|
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