feat(python-sdk): move template build-context uploads onto pyqwest#1603
feat(python-sdk): move template build-context uploads onto pyqwest#1603mishushakov wants to merge 1 commit into
Conversation
build_api.upload_file uses a one-off pyqwest transport; Content-Length framing verified at the wire level for both the spooled sync archive and the async-iterator body (S3 rejects chunked encoding). The upload-file regression tests compare header names case-insensitively since hyper lowercases them. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
🦋 Changeset detectedLatest commit: 6288fe5 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
PR SummaryMedium Risk Overview The default one-hour upload timeout now applies to the full transfer rather than per socket operation. Reviewed by Cursor Bugbot for commit 6288fe5. Bugbot is set up for automated code reviews on this repo. Configure here. |
Package ArtifactsBuilt from 595875d. Download artifacts from this workflow run. JS SDK ( npm install ./e2b-2.35.4-migrate-template-uploads-to-pyqwest.0.tgzCLI ( npm install ./e2b-cli-2.15.1-migrate-template-uploads-to-pyqwest.0.tgzPython SDK ( pip install ./e2b-2.34.0+migrate.template.uploads.to.pyqwest-py3-none-any.whl |
What
Stacked on #1601. Migrates the template build-context uploads (streaming the build archive to S3 presigned URLs in
build_api.upload_file) onto pyqwest via its httpx-compatible transport adapter.Originally deferred from #1601 because S3 presigned URLs reject chunked transfer encoding and Content-Length framing through reqwest was unverified. Verified at the wire level (raw-socket capture server): httpx's Content-Length — derived from the spooled archive (sync) or set explicitly on the async-iterator body (async) — is forwarded by the adapter and reqwest keeps Content-Length framing for streamed bodies, no chunked fallback.
How
e2b/template_sync/build_api.py/template_async/build_api.py:upload_fileuses a one-off pyqwest transport (ApiPyqwestTransportfrom feat(python-sdk): move the REST API client onto pyqwest's httpx transport adapter #1601) instead of the generated client's httpx transport.verify_ssl=Falseon the generated client is no longer honored for uploads (pyqwest has no insecure-TLS option), andhttp2=Falseis gone (S3 negotiates HTTP/1.1 via ALPN anyway).Testing
tests/{sync,async}/*/test_upload_file.py(the [JS SDK] uploadFile uses chunked transfer encoding, causing 501 NotImplemented on S3 presigned PUT URLs #1243 regression tests — Content-Length present and equal to the body, no chunked encoding) pass through pyqwest; the capture handlers now compare header names case-insensitively since hyper lowercases them where httpcore title-cased.ruff), typecheck (ty), unit suite: green.Usage example
No API changes — template builds upload their context exactly as before:
🤖 Generated with Claude Code