-
Notifications
You must be signed in to change notification settings - Fork 320
feat(core): Wait strategies foundation #838
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
feat(core): Wait strategies foundation #838
Conversation
Notes: Mypy errors got crazy and circular, so I skipped them for now to focus on getting the wait strategies up without the massive changes caused by bringing those core files inline with mypy. Also the comments are representing some strategies not included here, but I do have working versions ready to be brought in 🥳 |
I assume mypy needs all the good stuff on #810 🙂 |
…tilities with other languges
1bc760a
to
4bf23d8
Compare
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #838 +/- ##
=======================================
Coverage ? 84.18%
=======================================
Files ? 14
Lines ? 841
Branches ? 131
=======================================
Hits ? 708
Misses ? 102
Partials ? 31 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
if i can merge 810 and rebase this on top of that that would be ideal. i hope to be done with #810 on sunday or monday and this can follow shortly after |
Sure, I can add the missing new mypy types on this PR too. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is great - thanks!
|
||
def wait_container_is_ready(*transient_exceptions) -> Callable: | ||
class WaitStrategyTarget(Protocol): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I wonder if WaitStrategyTarget
& WaitStrategy
might be split into their own module - somewhat separating it from the now deprecated functions in here. That might help simplify when time comes for its eventual removal.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we can avoid changing files it preserves git history better. If this file was called wait or waiting it would have been better but I don't see removing utils or reorganizing code a super high priority
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was on the fence about this, they're needed for the backwards compatibility but I honestly don't have strong feelings about where to have WaitStrategyTarget
and WaitStrategy
live
Aligns testcontainers-python with the testcontainers community standard wait strategy pattern used across Java, Go, and other implementations. This provides a consistent developer experience and better maintainability.
Examples
From:
To:
Backward Compatibility
No breaking changes - all existing code continues working
Deprecation warnings added to wait_for_logs() and @wait_container_is_ready
Clear migration path provided in warning messages
New:
core/testcontainers/core/wait_strategies.py - Strategy implementations
core/tests/test_wait_strategies*.py - Comprehensive test coverage
Modified:
core/testcontainers/core/container.py - Added waiting_for() method
core/testcontainers/compose/compose.py - Added compose wait strategy support
core/testcontainers/core/waiting_utils.py - Base classes and protocol
Future Strategies to quickly follow
Foundation enables community-standard wait strategies:
HttpWaitStrategy, HealthcheckWaitStrategy, PortWaitStrategy, CompositeWaitStrategy
Testing
Unit tests with parameterized scenarios
Integration tests with real Docker containers
Protocol compliance verification
Backward compatibility validation