feat(python): add QUIC, HTTP, and WebSocket transport support - #3790
feat(python): add QUIC, HTTP, and WebSocket transport support#3790saie-ch wants to merge 1 commit into
Conversation
Closes apache#2835. Adds explicit IggyClient.tcp/quic/http/websocket() constructors mirroring the Rust builder, fixes a QUIC connection-string bug (endpoint creation needs an active Tokio runtime), and adds tests/examples/CI/docs for all three previously-untested transports.
|
Thanks for the PR. It is labeled Slash commands (own line, regular comment) move it around the queue:
See CONTRIBUTING.md for details. |
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #3790 +/- ##
============================================
- Coverage 75.58% 75.55% -0.03%
Complexity 969 969
============================================
Files 1317 1317
Lines 155244 155354 +110
Branches 128866 128946 +80
============================================
+ Hits 117339 117384 +45
+ Misses 34361 34343 -18
- Partials 3544 3627 +83
🚀 New features to boost your workflow:
|
|
This pull request has been automatically marked as stale because it has not had recent activity. It will be closed in 7 days if no further activity occurs. If you need a review, please ensure CI is green and the PR is rebased on the latest master. Don't hesitate to ping the maintainers - either Thank you for your contribution! |
Which issue does this PR address?
Closes #2835
Rationale:
The Python SDK only exposed TCP via IggyClient(). QUIC, HTTP, and WebSocket were reachable only through the untested
from_connection_string() path — no constructors, no docs, no examples, no tests.
What changed?
Added IggyClient.tcp/quic/http/websocket() classmethods mirroring the Rust builder's with_tcp/with_quic/with_http/with_websocket(). Fixed
a QUIC bug along the way: quinn::Endpoint::client needs an active Tokio runtime, which a synchronous Python call site doesn't have — both
quic() and from_connection_string() now enter it explicitly. Added integration tests, examples, and CI wiring for all three
previously-untested transports.
Local Execution:
foreign/python (excluded from the root workspace, so the repo's pre-push hook doesn't reach it). Built server + extension locally, ran
full pytest suite (337 passed, only pre-existing Docker-dependent TLS tests skipped for lack of a daemon), and manually exercised all
three new example pairs end-to-end.
AI Usage:
Claude Code (Sonnet).
Built iggy-server and the Python extension locally, ran the full pytest suite against a live 4-transport server (337 passed), and manually ran all three new example pairs (QUIC/HTTP/WebSocket producer+consumer) end-to-end. Also ran cargo clippy -D warnings, cargo fmt, ruff check/format, pyrefly, and markdownlint, and confirmed the diff stayed scoped to only foreign/python, examples/python, and CI config with nothing touching core/sdk or other SDKs