|
11 | 11 |
|
12 | 12 | import docker
|
13 | 13 |
|
| 14 | +ENABLE_FLAGS = ("yes", "true", "t", "y", "1") |
| 15 | + |
14 | 16 |
|
15 | 17 | class ConnectionMode(Enum):
|
16 | 18 | bridge_ip = "bridge_ip"
|
@@ -52,7 +54,7 @@ def get_bool_env(name: str) -> bool:
|
52 | 54 | Defaults to False.
|
53 | 55 | """
|
54 | 56 | value = environ.get(name, "")
|
55 |
| - return value.lower() in ("yes", "true", "t", "y", "1") |
| 57 | + return value.lower() in ENABLE_FLAGS |
56 | 58 |
|
57 | 59 |
|
58 | 60 | TC_FILE = ".testcontainers.properties"
|
@@ -96,11 +98,20 @@ def read_tc_properties() -> dict[str, str]:
|
96 | 98 |
|
97 | 99 | @dataclass
|
98 | 100 | class TestcontainersConfiguration:
|
| 101 | + def _render_bool(self, env_name: str, prop_name: str) -> bool: |
| 102 | + env_val = environ.get(env_name, None) |
| 103 | + if env_val is not None: |
| 104 | + return env_val.lower() in ENABLE_FLAGS |
| 105 | + prop_val = self.tc_properties.get(prop_name, None) |
| 106 | + if prop_val is not None: |
| 107 | + return prop_val.lower() in ENABLE_FLAGS |
| 108 | + return False |
| 109 | + |
99 | 110 | max_tries: int = int(environ.get("TC_MAX_TRIES", "120"))
|
100 | 111 | sleep_time: float = float(environ.get("TC_POOLING_INTERVAL", "1"))
|
101 | 112 | ryuk_image: str = environ.get("RYUK_CONTAINER_IMAGE", "testcontainers/ryuk:0.8.1")
|
102 |
| - ryuk_privileged: bool = get_bool_env("TESTCONTAINERS_RYUK_PRIVILEGED") |
103 |
| - ryuk_disabled: bool = get_bool_env("TESTCONTAINERS_RYUK_DISABLED") |
| 113 | + _ryuk_privileged: Optional[bool] = None |
| 114 | + _ryuk_disabled: Optional[bool] = None |
104 | 115 | _ryuk_docker_socket: str = ""
|
105 | 116 | ryuk_reconnection_timeout: str = environ.get("RYUK_RECONNECTION_TIMEOUT", "10s")
|
106 | 117 | tc_properties: dict[str, str] = field(default_factory=read_tc_properties)
|
@@ -129,6 +140,29 @@ def docker_auth_config(self, value: str) -> None:
|
129 | 140 | def tc_properties_get_tc_host(self) -> Union[str, None]:
|
130 | 141 | return self.tc_properties.get("tc.host")
|
131 | 142 |
|
| 143 | + @property |
| 144 | + def ryuk_privileged(self) -> bool: |
| 145 | + if self._ryuk_privileged: |
| 146 | + return self._ryuk_privileged |
| 147 | + self._ryuk_privileged = self._render_bool("TESTCONTAINERS_RYUK_PRIVILEGED", "ryuk.container.privileged") |
| 148 | + return self._ryuk_privileged |
| 149 | + |
| 150 | + @ryuk_privileged.setter |
| 151 | + def ryuk_privileged(self, value: bool) -> None: |
| 152 | + self._ryuk_privileged = value |
| 153 | + |
| 154 | + @property |
| 155 | + def ryuk_disabled(self) -> bool: |
| 156 | + if self._ryuk_disabled: |
| 157 | + return self._ryuk_disabled |
| 158 | + |
| 159 | + self._ryuk_disabled = self._render_bool("TESTCONTAINERS_RYUK_DISABLED", "ryuk.disabled") |
| 160 | + return self._ryuk_disabled |
| 161 | + |
| 162 | + @ryuk_disabled.setter |
| 163 | + def ryuk_disabled(self, value: bool) -> None: |
| 164 | + self._ryuk_disabled = value |
| 165 | + |
132 | 166 | @property
|
133 | 167 | def timeout(self) -> float:
|
134 | 168 | return self.max_tries * self.sleep_time
|
|
0 commit comments