Skip to content

Commit 271ca9a

Browse files
fix: update wait_for_logs to not throw on 'created', and an optimization (#719)
Attempt to fix another part of #715 , plus an optimization. Based on #716 by @alexanderankin . --------- Co-authored-by: David Ankin <[email protected]>
1 parent fe489d7 commit 271ca9a

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

core/testcontainers/core/waiting_utils.py

+11-4
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,9 @@ def wait_for(condition: Callable[..., bool]) -> bool:
7777
return condition()
7878

7979

80+
_NOT_EXITED_STATUSES = {"running", "created"}
81+
82+
8083
def wait_for_logs(
8184
container: "DockerContainer",
8285
predicate: Union[Callable, str],
@@ -103,11 +106,13 @@ def wait_for_logs(
103106
"""
104107
if isinstance(predicate, str):
105108
predicate = re.compile(predicate, re.MULTILINE).search
109+
wrapped = container.get_wrapped_container()
106110
start = time.time()
107111
while True:
108112
duration = time.time() - start
109-
stdout = container.get_logs()[0].decode()
110-
stderr = container.get_logs()[1].decode()
113+
stdout, stderr = container.get_logs()
114+
stdout = stdout.decode()
115+
stderr = stderr.decode()
111116
predicate_result = (
112117
predicate(stdout) or predicate(stderr)
113118
if predicate_streams_and is False
@@ -118,6 +123,8 @@ def wait_for_logs(
118123
return duration
119124
if duration > timeout:
120125
raise TimeoutError(f"Container did not emit logs satisfying predicate in {timeout:.3f} " "seconds")
121-
if raise_on_exit and container.get_wrapped_container().status != "running":
122-
raise RuntimeError("Container exited before emitting logs satisfying predicate")
126+
if raise_on_exit:
127+
wrapped.reload()
128+
if wrapped.status not in _NOT_EXITED_STATUSES:
129+
raise RuntimeError("Container exited before emitting logs satisfying predicate")
123130
time.sleep(interval)

0 commit comments

Comments
 (0)