|
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"
|
@@ -45,16 +47,6 @@ def get_docker_socket() -> str:
|
45 | 47 | return "/var/run/docker.sock"
|
46 | 48 |
|
47 | 49 |
|
48 |
| -def get_bool_env(name: str) -> bool: |
49 |
| - """ |
50 |
| - Get environment variable named `name` and convert it to bool. |
51 |
| -
|
52 |
| - Defaults to False. |
53 |
| - """ |
54 |
| - value = environ.get(name, "") |
55 |
| - return value.lower() in ("yes", "true", "t", "y", "1") |
56 |
| - |
57 |
| - |
58 | 50 | TC_FILE = ".testcontainers.properties"
|
59 | 51 | TC_GLOBAL = Path.home() / TC_FILE
|
60 | 52 |
|
@@ -96,11 +88,20 @@ def read_tc_properties() -> dict[str, str]:
|
96 | 88 |
|
97 | 89 | @dataclass
|
98 | 90 | class TestcontainersConfiguration:
|
| 91 | + def _render_bool(self, env_name: str, prop_name: str) -> bool: |
| 92 | + env_val = environ.get(env_name, None) |
| 93 | + if env_val is not None: |
| 94 | + return env_val.lower() in ENABLE_FLAGS |
| 95 | + prop_val = self.tc_properties.get(prop_name, None) |
| 96 | + if prop_val is not None: |
| 97 | + return prop_val.lower() in ENABLE_FLAGS |
| 98 | + return False |
| 99 | + |
99 | 100 | max_tries: int = int(environ.get("TC_MAX_TRIES", "120"))
|
100 | 101 | sleep_time: float = float(environ.get("TC_POOLING_INTERVAL", "1"))
|
101 | 102 | 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") |
| 103 | + _ryuk_privileged: Optional[bool] = None |
| 104 | + _ryuk_disabled: Optional[bool] = None |
104 | 105 | _ryuk_docker_socket: str = ""
|
105 | 106 | ryuk_reconnection_timeout: str = environ.get("RYUK_RECONNECTION_TIMEOUT", "10s")
|
106 | 107 | tc_properties: dict[str, str] = field(default_factory=read_tc_properties)
|
@@ -129,6 +130,28 @@ def docker_auth_config(self, value: str) -> None:
|
129 | 130 | def tc_properties_get_tc_host(self) -> Union[str, None]:
|
130 | 131 | return self.tc_properties.get("tc.host")
|
131 | 132 |
|
| 133 | + @property |
| 134 | + def ryuk_privileged(self) -> bool: |
| 135 | + if self._ryuk_privileged is not None: |
| 136 | + return bool(self._ryuk_privileged) |
| 137 | + self._ryuk_privileged = self._render_bool("TESTCONTAINERS_RYUK_PRIVILEGED", "ryuk.container.privileged") |
| 138 | + return self._ryuk_privileged |
| 139 | + |
| 140 | + @ryuk_privileged.setter |
| 141 | + def ryuk_privileged(self, value: bool) -> None: |
| 142 | + self._ryuk_privileged = value |
| 143 | + |
| 144 | + @property |
| 145 | + def ryuk_disabled(self) -> bool: |
| 146 | + if self._ryuk_disabled is not None: |
| 147 | + return bool(self._ryuk_disabled) |
| 148 | + self._ryuk_disabled = self._render_bool("TESTCONTAINERS_RYUK_DISABLED", "ryuk.disabled") |
| 149 | + return self._ryuk_disabled |
| 150 | + |
| 151 | + @ryuk_disabled.setter |
| 152 | + def ryuk_disabled(self, value: bool) -> None: |
| 153 | + self._ryuk_disabled = value |
| 154 | + |
132 | 155 | @property
|
133 | 156 | def timeout(self) -> float:
|
134 | 157 | return self.max_tries * self.sleep_time
|
|
0 commit comments