httpr 0.4.8__tar.gz → 0.6.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {httpr-0.4.8 → httpr-0.6.0}/.github/workflows/CI.yml +29 -90
- {httpr-0.4.8 → httpr-0.6.0}/.github/workflows/benchmark.yml +2 -2
- {httpr-0.4.8 → httpr-0.6.0}/.github/workflows/copilot-setup-steps.yml +3 -3
- {httpr-0.4.8 → httpr-0.6.0}/.github/workflows/mkdocs.yml +2 -11
- {httpr-0.4.8 → httpr-0.6.0}/CLAUDE.md +2 -1
- {httpr-0.4.8 → httpr-0.6.0}/Cargo.lock +76 -93
- {httpr-0.4.8 → httpr-0.6.0}/Cargo.toml +5 -5
- {httpr-0.4.8 → httpr-0.6.0}/PKG-INFO +27 -10
- {httpr-0.4.8 → httpr-0.6.0}/README.md +23 -5
- {httpr-0.4.8 → httpr-0.6.0}/benchmark/benchmark.py +3 -3
- {httpr-0.4.8 → httpr-0.6.0}/benchmark/benchmark_cbor.py +1 -1
- {httpr-0.4.8 → httpr-0.6.0}/benchmark/server.py +2 -1
- {httpr-0.4.8 → httpr-0.6.0}/docs/api/index.md +4 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/api/response.md +101 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/tutorial/making-requests.md +12 -3
- {httpr-0.4.8 → httpr-0.6.0}/docs/tutorial/response-handling.md +47 -11
- {httpr-0.4.8 → httpr-0.6.0}/httpr/__init__.py +96 -7
- {httpr-0.4.8 → httpr-0.6.0}/httpr/httpr.pyi +97 -3
- {httpr-0.4.8 → httpr-0.6.0}/pyproject.toml +5 -5
- {httpr-0.4.8 → httpr-0.6.0}/src/exceptions.rs +1 -1
- {httpr-0.4.8 → httpr-0.6.0}/src/lib.rs +23 -0
- {httpr-0.4.8 → httpr-0.6.0}/src/response.rs +150 -2
- {httpr-0.4.8 → httpr-0.6.0}/tests/benchmark/test_performance.py +32 -3
- httpr-0.6.0/tests/unit/test_asyncclient.py +111 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/unit/test_client.py +45 -0
- httpr-0.6.0/tests/unit/test_response.py +69 -0
- {httpr-0.4.8 → httpr-0.6.0}/uv.lock +150 -1026
- httpr-0.4.8/benchmark/generate_image.py +0 -149
- httpr-0.4.8/tests/unit/test_asyncclient.py +0 -25
- {httpr-0.4.8 → httpr-0.6.0}/.github/actions/set-version/action.yml +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/.github/copilot-instructions.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/.github/workflows/CI.yml.backup +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/.github/workflows/set_version.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/.gitignore +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/.pre-commit-config.yaml +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/LICENSE +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/Taskfile.yaml +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/benchmark/README.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/benchmark/__init__.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/benchmark.jpg +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/advanced/cookies.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/advanced/index.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/advanced/proxy.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/advanced/ssl-tls.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/api/async-client.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/api/client.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/api/functions.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/index.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/quickstart.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/tutorial/async.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/tutorial/authentication.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/tutorial/index.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/writings/index.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/docs/writings/posts/2025-02-24-python-http-clients-suck.md +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/httpr/py.typed +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/httpr.code-workspace +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/mkdocs.yml +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/scripts/generate_certs.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/src/traits.rs +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/src/utils.rs +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/benchmark/__init__.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/conftest.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/e2e/__init__.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/e2e/test_async.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/e2e/test_auth.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/e2e/test_redirects.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/e2e/test_ssl.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/e2e/test_streaming.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/e2e/test_uploads.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/unit/__init__.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/unit/cbor_test_server.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/unit/httpx_conns.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/unit/test_cbor.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/unit/test_defs.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/unit/test_docs.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/unit/test_exceptions.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/unit/test_ssl.py +0 -0
- {httpr-0.4.8 → httpr-0.6.0}/tests/unit/test_streaming.py +0 -0
|
@@ -4,8 +4,6 @@ on:
|
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
6
|
- main
|
|
7
|
-
paths-ignore:
|
|
8
|
-
- "*.jpg" # Prevents the benchmark image update from triggering CI
|
|
9
7
|
tags:
|
|
10
8
|
- "*"
|
|
11
9
|
pull_request:
|
|
@@ -20,7 +18,7 @@ jobs:
|
|
|
20
18
|
runs-on: ubuntu-22.04
|
|
21
19
|
if: github.event_name == 'pull_request'
|
|
22
20
|
steps:
|
|
23
|
-
- uses: actions/checkout@
|
|
21
|
+
- uses: actions/checkout@v5
|
|
24
22
|
- uses: astral-sh/setup-uv@v7
|
|
25
23
|
with:
|
|
26
24
|
python-version: "3.12"
|
|
@@ -39,16 +37,16 @@ jobs:
|
|
|
39
37
|
PYO3_USE_ABI3_FORWARD_COMPATIBILITY: "1"
|
|
40
38
|
strategy:
|
|
41
39
|
matrix:
|
|
42
|
-
python-version: ["3.
|
|
40
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
43
41
|
steps:
|
|
44
|
-
- uses: actions/checkout@
|
|
45
|
-
- uses: actions/setup-python@
|
|
42
|
+
- uses: actions/checkout@v5
|
|
43
|
+
- uses: actions/setup-python@v6
|
|
46
44
|
with:
|
|
47
45
|
python-version: ${{ matrix.python-version }}
|
|
48
46
|
allow-prereleases: true
|
|
49
47
|
- uses: astral-sh/setup-uv@v7
|
|
50
48
|
- name: Cache Rust build
|
|
51
|
-
uses: actions/cache@
|
|
49
|
+
uses: actions/cache@v5
|
|
52
50
|
with:
|
|
53
51
|
path: |
|
|
54
52
|
~/.cargo/registry
|
|
@@ -69,12 +67,12 @@ jobs:
|
|
|
69
67
|
runs-on: ubuntu-22.04
|
|
70
68
|
if: github.event_name == 'pull_request' || (github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/')))
|
|
71
69
|
steps:
|
|
72
|
-
- uses: actions/checkout@
|
|
70
|
+
- uses: actions/checkout@v5
|
|
73
71
|
- uses: astral-sh/setup-uv@v7
|
|
74
72
|
with:
|
|
75
73
|
python-version: "3.12"
|
|
76
74
|
- name: Cache Rust build
|
|
77
|
-
uses: actions/cache@
|
|
75
|
+
uses: actions/cache@v5
|
|
78
76
|
with:
|
|
79
77
|
path: |
|
|
80
78
|
~/.cargo/registry
|
|
@@ -127,7 +125,7 @@ jobs:
|
|
|
127
125
|
runs-on: ubuntu-latest
|
|
128
126
|
if: github.event_name == 'pull_request'
|
|
129
127
|
steps:
|
|
130
|
-
- uses: actions/checkout@
|
|
128
|
+
- uses: actions/checkout@v5
|
|
131
129
|
- uses: astral-sh/setup-uv@v7
|
|
132
130
|
with:
|
|
133
131
|
python-version: "3.12"
|
|
@@ -157,7 +155,7 @@ jobs:
|
|
|
157
155
|
# - runner: ubuntu-22.04
|
|
158
156
|
# target: ppc64le
|
|
159
157
|
steps:
|
|
160
|
-
- uses: actions/checkout@
|
|
158
|
+
- uses: actions/checkout@v5
|
|
161
159
|
- uses: astral-sh/setup-uv@v7
|
|
162
160
|
with:
|
|
163
161
|
python-version: "3.12"
|
|
@@ -176,11 +174,11 @@ jobs:
|
|
|
176
174
|
uses: PyO3/maturin-action@v1
|
|
177
175
|
with:
|
|
178
176
|
target: ${{ matrix.platform.target }}
|
|
179
|
-
args: --release --out dist -i python3.
|
|
177
|
+
args: --release --out dist -i python3.14t
|
|
180
178
|
sccache: true
|
|
181
179
|
manylinux: auto
|
|
182
180
|
- name: Upload wheels
|
|
183
|
-
uses: actions/upload-artifact@
|
|
181
|
+
uses: actions/upload-artifact@v6
|
|
184
182
|
with:
|
|
185
183
|
name: wheels-linux-${{ matrix.platform.target }}
|
|
186
184
|
path: dist
|
|
@@ -212,7 +210,7 @@ jobs:
|
|
|
212
210
|
# - runner: ubuntu-22.04
|
|
213
211
|
# target: armv7
|
|
214
212
|
steps:
|
|
215
|
-
- uses: actions/checkout@
|
|
213
|
+
- uses: actions/checkout@v5
|
|
216
214
|
- uses: astral-sh/setup-uv@v7
|
|
217
215
|
with:
|
|
218
216
|
python-version: "3.12"
|
|
@@ -231,11 +229,11 @@ jobs:
|
|
|
231
229
|
uses: PyO3/maturin-action@v1
|
|
232
230
|
with:
|
|
233
231
|
target: ${{ matrix.platform.target }}
|
|
234
|
-
args: --release --out dist -i python3.
|
|
232
|
+
args: --release --out dist -i python3.14t
|
|
235
233
|
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
|
|
236
234
|
manylinux: musllinux_1_2
|
|
237
235
|
- name: Upload wheels
|
|
238
|
-
uses: actions/upload-artifact@
|
|
236
|
+
uses: actions/upload-artifact@v6
|
|
239
237
|
with:
|
|
240
238
|
name: wheels-musllinux-${{ matrix.platform.target }}
|
|
241
239
|
path: dist
|
|
@@ -265,8 +263,8 @@ jobs:
|
|
|
265
263
|
- runner: windows-latest
|
|
266
264
|
target: x86
|
|
267
265
|
steps:
|
|
268
|
-
- uses: actions/checkout@
|
|
269
|
-
- uses: actions/setup-python@
|
|
266
|
+
- uses: actions/checkout@v5
|
|
267
|
+
- uses: actions/setup-python@v6
|
|
270
268
|
with:
|
|
271
269
|
python-version: "3.12"
|
|
272
270
|
architecture: ${{ matrix.platform.target }}
|
|
@@ -287,14 +285,18 @@ jobs:
|
|
|
287
285
|
uses: PyO3/maturin-action@v1
|
|
288
286
|
with:
|
|
289
287
|
target: ${{ matrix.platform.target }}
|
|
290
|
-
args: --release --out dist -i python3.
|
|
288
|
+
args: --release --out dist -i python3.14t
|
|
291
289
|
sccache: true
|
|
292
290
|
- name: Upload wheels
|
|
293
|
-
uses: actions/upload-artifact@
|
|
291
|
+
uses: actions/upload-artifact@v6
|
|
294
292
|
with:
|
|
295
293
|
name: wheels-windows-${{ matrix.platform.target }}
|
|
296
294
|
path: dist
|
|
297
295
|
- name: pytest
|
|
296
|
+
# Skip pytest on x86 - cryptography (pulled in via the trustme dev
|
|
297
|
+
# dependency) no longer ships 32-bit Windows wheels and fails to build
|
|
298
|
+
# from source. The x64 job provides test coverage for Windows.
|
|
299
|
+
if: ${{ matrix.platform.target == 'x64' }}
|
|
298
300
|
shell: bash
|
|
299
301
|
env:
|
|
300
302
|
RUSTC_WRAPPER: ""
|
|
@@ -315,7 +317,7 @@ jobs:
|
|
|
315
317
|
- runner: macos-14
|
|
316
318
|
target: aarch64
|
|
317
319
|
steps:
|
|
318
|
-
- uses: actions/checkout@
|
|
320
|
+
- uses: actions/checkout@v5
|
|
319
321
|
- uses: astral-sh/setup-uv@v7
|
|
320
322
|
with:
|
|
321
323
|
python-version: "3.12"
|
|
@@ -333,10 +335,10 @@ jobs:
|
|
|
333
335
|
uses: PyO3/maturin-action@v1
|
|
334
336
|
with:
|
|
335
337
|
target: ${{ matrix.platform.target }}
|
|
336
|
-
args: --release --out dist -i python3.
|
|
338
|
+
args: --release --out dist -i python3.14t
|
|
337
339
|
sccache: true
|
|
338
340
|
- name: Upload wheels
|
|
339
|
-
uses: actions/upload-artifact@
|
|
341
|
+
uses: actions/upload-artifact@v6
|
|
340
342
|
with:
|
|
341
343
|
name: wheels-macos-${{ matrix.platform.target }}
|
|
342
344
|
path: dist
|
|
@@ -353,7 +355,7 @@ jobs:
|
|
|
353
355
|
needs: [test, e2e]
|
|
354
356
|
if: ${{ always() && (startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch') && (needs.test.result == 'success' || needs.test.result == 'skipped') && (needs.e2e.result == 'success' || needs.e2e.result == 'skipped') }}
|
|
355
357
|
steps:
|
|
356
|
-
- uses: actions/checkout@
|
|
358
|
+
- uses: actions/checkout@v5
|
|
357
359
|
- uses: astral-sh/setup-uv@v7
|
|
358
360
|
with:
|
|
359
361
|
python-version: "3.12"
|
|
@@ -367,7 +369,7 @@ jobs:
|
|
|
367
369
|
command: sdist
|
|
368
370
|
args: --out dist
|
|
369
371
|
- name: Upload sdist
|
|
370
|
-
uses: actions/upload-artifact@
|
|
372
|
+
uses: actions/upload-artifact@v6
|
|
371
373
|
with:
|
|
372
374
|
name: wheels-sdist
|
|
373
375
|
path: dist
|
|
@@ -387,9 +389,9 @@ jobs:
|
|
|
387
389
|
# Used to generate artifact attestation
|
|
388
390
|
attestations: write
|
|
389
391
|
steps:
|
|
390
|
-
- uses: actions/download-artifact@
|
|
392
|
+
- uses: actions/download-artifact@v7
|
|
391
393
|
- name: Generate artifact attestation
|
|
392
|
-
uses: actions/attest-build-provenance@
|
|
394
|
+
uses: actions/attest-build-provenance@v3
|
|
393
395
|
with:
|
|
394
396
|
subject-path: "wheels-*/*"
|
|
395
397
|
- name: Publish to PyPI
|
|
@@ -401,66 +403,3 @@ jobs:
|
|
|
401
403
|
with:
|
|
402
404
|
command: upload
|
|
403
405
|
args: --non-interactive --skip-existing wheels-*/*
|
|
404
|
-
|
|
405
|
-
benchmark:
|
|
406
|
-
permissions:
|
|
407
|
-
contents: write
|
|
408
|
-
runs-on: ubuntu-latest
|
|
409
|
-
needs: [linux]
|
|
410
|
-
if: ${{ startsWith(github.ref, 'refs/tags/') || github.event_name == 'workflow_dispatch' }}
|
|
411
|
-
steps:
|
|
412
|
-
- uses: actions/checkout@v4
|
|
413
|
-
with:
|
|
414
|
-
fetch-depth: 0
|
|
415
|
-
- uses: astral-sh/setup-uv@v7
|
|
416
|
-
with:
|
|
417
|
-
python-version: "3.12"
|
|
418
|
-
- name: Download wheels
|
|
419
|
-
uses: actions/download-artifact@v4
|
|
420
|
-
with:
|
|
421
|
-
name: wheels-linux-x86_64
|
|
422
|
-
- name: Start Uvicorn server
|
|
423
|
-
env:
|
|
424
|
-
BENCHMARK_HOST: 0.0.0.0
|
|
425
|
-
BENCHMARK_PORT: "8000"
|
|
426
|
-
run: |
|
|
427
|
-
uv run --script benchmark/server.py &
|
|
428
|
-
sleep 10
|
|
429
|
-
- name: Run benchmark
|
|
430
|
-
run: |
|
|
431
|
-
# Extract version from tag (v0.3.0 -> 0.3.0) or use 'dev' for manual runs
|
|
432
|
-
if [[ "${{ github.ref }}" == refs/tags/v* ]]; then
|
|
433
|
-
HTTPR_VERSION=${GITHUB_REF#refs/tags/v}
|
|
434
|
-
else
|
|
435
|
-
HTTPR_VERSION="dev"
|
|
436
|
-
fi
|
|
437
|
-
# The script declares `httpr` in its PEP 723 deps; --find-links lets uv
|
|
438
|
-
# pick the freshly-built wheel from the workspace instead of PyPI.
|
|
439
|
-
uv run \
|
|
440
|
-
--find-links ./ \
|
|
441
|
-
--refresh-package httpr \
|
|
442
|
-
--script benchmark/benchmark.py --httpr-version "$HTTPR_VERSION"
|
|
443
|
-
- name: Generate and deploy benchmark image to gh-pages
|
|
444
|
-
if: startsWith(github.ref, 'refs/tags/')
|
|
445
|
-
run: |
|
|
446
|
-
uv run --script benchmark/generate_image.py
|
|
447
|
-
git config --global user.name 'github-actions[bot]'
|
|
448
|
-
git config --global user.email '41898282+github-actions[bot]@users.noreply.github.com'
|
|
449
|
-
|
|
450
|
-
# Save the generated image
|
|
451
|
-
cp benchmark.jpg /tmp/benchmark.jpg
|
|
452
|
-
|
|
453
|
-
# Fetch and checkout gh-pages
|
|
454
|
-
git fetch origin gh-pages:gh-pages
|
|
455
|
-
git checkout gh-pages
|
|
456
|
-
|
|
457
|
-
# Copy the benchmark image
|
|
458
|
-
cp /tmp/benchmark.jpg benchmark.jpg
|
|
459
|
-
|
|
460
|
-
git add benchmark.jpg
|
|
461
|
-
if ! git diff --quiet --cached; then
|
|
462
|
-
git commit -m "Update benchmark image for ${{ github.ref_name }}"
|
|
463
|
-
git push origin gh-pages
|
|
464
|
-
else
|
|
465
|
-
echo "No changes to commit"
|
|
466
|
-
fi
|
|
@@ -19,14 +19,14 @@ jobs:
|
|
|
19
19
|
runs-on: ubuntu-latest
|
|
20
20
|
if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
|
|
21
21
|
steps:
|
|
22
|
-
- uses: actions/checkout@
|
|
22
|
+
- uses: actions/checkout@v5
|
|
23
23
|
|
|
24
24
|
- uses: astral-sh/setup-uv@v7
|
|
25
25
|
with:
|
|
26
26
|
python-version: "3.12"
|
|
27
27
|
|
|
28
28
|
- name: Cache Rust build
|
|
29
|
-
uses: actions/cache@
|
|
29
|
+
uses: actions/cache@v5
|
|
30
30
|
with:
|
|
31
31
|
path: |
|
|
32
32
|
~/.cargo/registry
|
|
@@ -28,7 +28,7 @@ jobs:
|
|
|
28
28
|
uses: actions/checkout@v5
|
|
29
29
|
|
|
30
30
|
- name: Cache Rust build artifacts
|
|
31
|
-
uses: actions/cache@
|
|
31
|
+
uses: actions/cache@v5
|
|
32
32
|
with:
|
|
33
33
|
path: |
|
|
34
34
|
~/.cargo/bin/
|
|
@@ -46,12 +46,12 @@ jobs:
|
|
|
46
46
|
components: rustfmt, clippy
|
|
47
47
|
|
|
48
48
|
- name: Set up Python
|
|
49
|
-
uses: actions/setup-python@
|
|
49
|
+
uses: actions/setup-python@v6
|
|
50
50
|
with:
|
|
51
51
|
python-version: "3.12"
|
|
52
52
|
|
|
53
53
|
- name: Install uv
|
|
54
|
-
uses: astral-sh/setup-uv@
|
|
54
|
+
uses: astral-sh/setup-uv@v7
|
|
55
55
|
with:
|
|
56
56
|
enable-cache: true
|
|
57
57
|
|
|
@@ -10,7 +10,7 @@ jobs:
|
|
|
10
10
|
deploy:
|
|
11
11
|
runs-on: ubuntu-latest
|
|
12
12
|
steps:
|
|
13
|
-
- uses: actions/checkout@
|
|
13
|
+
- uses: actions/checkout@v5
|
|
14
14
|
with:
|
|
15
15
|
fetch-depth: 0
|
|
16
16
|
- name: Configure Git Credentials
|
|
@@ -22,7 +22,7 @@ jobs:
|
|
|
22
22
|
python-version: "3.12"
|
|
23
23
|
enable-cache: false
|
|
24
24
|
- run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV
|
|
25
|
-
- uses: actions/cache@
|
|
25
|
+
- uses: actions/cache@v5
|
|
26
26
|
with:
|
|
27
27
|
key: mkdocs-material-${{ env.cache_id }}
|
|
28
28
|
path: .cache
|
|
@@ -50,10 +50,6 @@ jobs:
|
|
|
50
50
|
if git show gh-pages:dev/bench/index.html > /tmp/bench-backup/index.html 2>/dev/null; then
|
|
51
51
|
echo "Found existing benchmark index.html, will preserve it"
|
|
52
52
|
fi
|
|
53
|
-
# Save benchmark image if it exists
|
|
54
|
-
if git show gh-pages:benchmark.jpg > /tmp/bench-backup/benchmark.jpg 2>/dev/null; then
|
|
55
|
-
echo "Found existing benchmark.jpg, will preserve it"
|
|
56
|
-
fi
|
|
57
53
|
|
|
58
54
|
# Switch to gh-pages branch
|
|
59
55
|
git checkout gh-pages || git checkout --orphan gh-pages
|
|
@@ -75,11 +71,6 @@ jobs:
|
|
|
75
71
|
[ -f /tmp/bench-backup/index.html ] && cp /tmp/bench-backup/index.html dev/bench/
|
|
76
72
|
echo "Restored benchmark chart files"
|
|
77
73
|
fi
|
|
78
|
-
# Restore benchmark image if it existed
|
|
79
|
-
if [ -f /tmp/bench-backup/benchmark.jpg ]; then
|
|
80
|
-
cp /tmp/bench-backup/benchmark.jpg benchmark.jpg
|
|
81
|
-
echo "Restored benchmark.jpg"
|
|
82
|
-
fi
|
|
83
74
|
|
|
84
75
|
# Add all files and commit
|
|
85
76
|
git add -A
|
|
@@ -151,7 +151,8 @@ uv run python benchmark.py # Terminal 2: Run benchmarks
|
|
|
151
151
|
|
|
152
152
|
### Headers Behavior
|
|
153
153
|
- Headers are lowercased internally (HTTP/2 spec)
|
|
154
|
-
- `client.headers` getter
|
|
154
|
+
- `client.headers` getter returns a live `_ClientHeaders` view; in-place mutations (`__setitem__`, `del`, `update`, `pop`, `popitem`, `setdefault`, `clear`) mirror to the client via Rust `set_header`/`del_header`
|
|
155
|
+
- `client.headers` getter excludes `Cookie` header; `set_headers` preserves the existing `Cookie` header so header mutation never clobbers cookies
|
|
155
156
|
- `client.cookies` getter/setter extracts from `Cookie` header
|
|
156
157
|
|
|
157
158
|
### Request Body
|
|
@@ -25,9 +25,9 @@ dependencies = [
|
|
|
25
25
|
|
|
26
26
|
[[package]]
|
|
27
27
|
name = "anyhow"
|
|
28
|
-
version = "1.0.
|
|
28
|
+
version = "1.0.103"
|
|
29
29
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
30
|
-
checksum = "
|
|
30
|
+
checksum = "2a4385e2e34eb35d6b3efe798b9eb88096925d87726c0798709bf56d9ed84af3"
|
|
31
31
|
|
|
32
32
|
[[package]]
|
|
33
33
|
name = "arc-swap"
|
|
@@ -56,12 +56,6 @@ version = "1.1.2"
|
|
|
56
56
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
57
57
|
checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0"
|
|
58
58
|
|
|
59
|
-
[[package]]
|
|
60
|
-
name = "autocfg"
|
|
61
|
-
version = "1.5.0"
|
|
62
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
63
|
-
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
|
64
|
-
|
|
65
59
|
[[package]]
|
|
66
60
|
name = "base64"
|
|
67
61
|
version = "0.22.1"
|
|
@@ -131,6 +125,17 @@ version = "0.2.1"
|
|
|
131
125
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
132
126
|
checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
|
|
133
127
|
|
|
128
|
+
[[package]]
|
|
129
|
+
name = "chacha20"
|
|
130
|
+
version = "0.10.1"
|
|
131
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
132
|
+
checksum = "d524456ba66e72eb8b115ff89e01e497f8e6d11d78b70b1aa13c0fbd97540a81"
|
|
133
|
+
dependencies = [
|
|
134
|
+
"cfg-if",
|
|
135
|
+
"cpufeatures",
|
|
136
|
+
"rand_core 0.10.1",
|
|
137
|
+
]
|
|
138
|
+
|
|
134
139
|
[[package]]
|
|
135
140
|
name = "compression-codecs"
|
|
136
141
|
version = "0.4.38"
|
|
@@ -180,6 +185,15 @@ dependencies = [
|
|
|
180
185
|
"url",
|
|
181
186
|
]
|
|
182
187
|
|
|
188
|
+
[[package]]
|
|
189
|
+
name = "cpufeatures"
|
|
190
|
+
version = "0.3.0"
|
|
191
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
192
|
+
checksum = "8b2a41393f66f16b0823bb79094d54ac5fbd34ab292ddafb9a0456ac9f87d201"
|
|
193
|
+
dependencies = [
|
|
194
|
+
"libc",
|
|
195
|
+
]
|
|
196
|
+
|
|
183
197
|
[[package]]
|
|
184
198
|
name = "crc32fast"
|
|
185
199
|
version = "1.5.0"
|
|
@@ -376,10 +390,22 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
376
390
|
checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd"
|
|
377
391
|
dependencies = [
|
|
378
392
|
"cfg-if",
|
|
379
|
-
"js-sys",
|
|
380
393
|
"libc",
|
|
381
|
-
"r-efi",
|
|
394
|
+
"r-efi 5.3.0",
|
|
382
395
|
"wasip2",
|
|
396
|
+
]
|
|
397
|
+
|
|
398
|
+
[[package]]
|
|
399
|
+
name = "getrandom"
|
|
400
|
+
version = "0.4.3"
|
|
401
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
402
|
+
checksum = "300e883d756b2e4ec94e02791f39b04b522276138852cfc41d9fb7e904106099"
|
|
403
|
+
dependencies = [
|
|
404
|
+
"cfg-if",
|
|
405
|
+
"js-sys",
|
|
406
|
+
"libc",
|
|
407
|
+
"r-efi 6.0.0",
|
|
408
|
+
"rand_core 0.10.1",
|
|
383
409
|
"wasm-bindgen",
|
|
384
410
|
]
|
|
385
411
|
|
|
@@ -492,7 +518,7 @@ checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87"
|
|
|
492
518
|
|
|
493
519
|
[[package]]
|
|
494
520
|
name = "httpr"
|
|
495
|
-
version = "0.
|
|
521
|
+
version = "0.6.0"
|
|
496
522
|
dependencies = [
|
|
497
523
|
"anyhow",
|
|
498
524
|
"bytes",
|
|
@@ -688,15 +714,6 @@ dependencies = [
|
|
|
688
714
|
"serde_core",
|
|
689
715
|
]
|
|
690
716
|
|
|
691
|
-
[[package]]
|
|
692
|
-
name = "indoc"
|
|
693
|
-
version = "2.0.7"
|
|
694
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
695
|
-
checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
|
|
696
|
-
dependencies = [
|
|
697
|
-
"rustversion",
|
|
698
|
-
]
|
|
699
|
-
|
|
700
717
|
[[package]]
|
|
701
718
|
name = "ipnet"
|
|
702
719
|
version = "2.12.0"
|
|
@@ -807,15 +824,6 @@ version = "2.8.0"
|
|
|
807
824
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
808
825
|
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
|
|
809
826
|
|
|
810
|
-
[[package]]
|
|
811
|
-
name = "memoffset"
|
|
812
|
-
version = "0.9.1"
|
|
813
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
814
|
-
checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a"
|
|
815
|
-
dependencies = [
|
|
816
|
-
"autocfg",
|
|
817
|
-
]
|
|
818
|
-
|
|
819
827
|
[[package]]
|
|
820
828
|
name = "mime"
|
|
821
829
|
version = "0.3.17"
|
|
@@ -987,15 +995,6 @@ version = "0.2.0"
|
|
|
987
995
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
988
996
|
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
|
989
997
|
|
|
990
|
-
[[package]]
|
|
991
|
-
name = "ppv-lite86"
|
|
992
|
-
version = "0.2.21"
|
|
993
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
994
|
-
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
|
|
995
|
-
dependencies = [
|
|
996
|
-
"zerocopy",
|
|
997
|
-
]
|
|
998
|
-
|
|
999
998
|
[[package]]
|
|
1000
999
|
name = "precomputed-hash"
|
|
1001
1000
|
version = "0.1.1"
|
|
@@ -1029,38 +1028,34 @@ dependencies = [
|
|
|
1029
1028
|
|
|
1030
1029
|
[[package]]
|
|
1031
1030
|
name = "pyo3"
|
|
1032
|
-
version = "0.
|
|
1031
|
+
version = "0.29.0"
|
|
1033
1032
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1034
|
-
checksum = "
|
|
1033
|
+
checksum = "cd274650b21d4bfc26a0a47587962c1edb425f69287324355cd040c3ea66071c"
|
|
1035
1034
|
dependencies = [
|
|
1036
1035
|
"anyhow",
|
|
1037
1036
|
"indexmap",
|
|
1038
|
-
"indoc",
|
|
1039
1037
|
"libc",
|
|
1040
|
-
"memoffset",
|
|
1041
1038
|
"once_cell",
|
|
1042
1039
|
"portable-atomic",
|
|
1043
1040
|
"pyo3-build-config",
|
|
1044
1041
|
"pyo3-ffi",
|
|
1045
1042
|
"pyo3-macros",
|
|
1046
|
-
"unindent",
|
|
1047
1043
|
]
|
|
1048
1044
|
|
|
1049
1045
|
[[package]]
|
|
1050
1046
|
name = "pyo3-build-config"
|
|
1051
|
-
version = "0.
|
|
1047
|
+
version = "0.29.0"
|
|
1052
1048
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1053
|
-
checksum = "
|
|
1049
|
+
checksum = "c5e2a7d2f0d013342f295c048ad19237add5154a55b1c5a254c0ec93d4109078"
|
|
1054
1050
|
dependencies = [
|
|
1055
|
-
"python3-dll-a",
|
|
1056
1051
|
"target-lexicon",
|
|
1057
1052
|
]
|
|
1058
1053
|
|
|
1059
1054
|
[[package]]
|
|
1060
1055
|
name = "pyo3-ffi"
|
|
1061
|
-
version = "0.
|
|
1056
|
+
version = "0.29.0"
|
|
1062
1057
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1063
|
-
checksum = "
|
|
1058
|
+
checksum = "ca85c467da1bbc8d866eea5deff9cf29ea5f7785054a17da36e65bda9c05845b"
|
|
1064
1059
|
dependencies = [
|
|
1065
1060
|
"libc",
|
|
1066
1061
|
"pyo3-build-config",
|
|
@@ -1068,9 +1063,9 @@ dependencies = [
|
|
|
1068
1063
|
|
|
1069
1064
|
[[package]]
|
|
1070
1065
|
name = "pyo3-log"
|
|
1071
|
-
version = "0.13.
|
|
1066
|
+
version = "0.13.4"
|
|
1072
1067
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1073
|
-
checksum = "
|
|
1068
|
+
checksum = "f64083bd3a16a353d9d62335808e8e13d0552d2a2b83fdb084496192dcfa9fcd"
|
|
1074
1069
|
dependencies = [
|
|
1075
1070
|
"arc-swap",
|
|
1076
1071
|
"log",
|
|
@@ -1079,9 +1074,9 @@ dependencies = [
|
|
|
1079
1074
|
|
|
1080
1075
|
[[package]]
|
|
1081
1076
|
name = "pyo3-macros"
|
|
1082
|
-
version = "0.
|
|
1077
|
+
version = "0.29.0"
|
|
1083
1078
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1084
|
-
checksum = "
|
|
1079
|
+
checksum = "9ac53762fd065daa3194dd09337a38bd793a188100fd1a9304c4ab312d901771"
|
|
1085
1080
|
dependencies = [
|
|
1086
1081
|
"proc-macro2",
|
|
1087
1082
|
"pyo3-macros-backend",
|
|
@@ -1091,31 +1086,21 @@ dependencies = [
|
|
|
1091
1086
|
|
|
1092
1087
|
[[package]]
|
|
1093
1088
|
name = "pyo3-macros-backend"
|
|
1094
|
-
version = "0.
|
|
1089
|
+
version = "0.29.0"
|
|
1095
1090
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1096
|
-
checksum = "
|
|
1091
|
+
checksum = "4ca3a1557399783172dc5bf39cfca835157732532cba56b71d2292161e53b362"
|
|
1097
1092
|
dependencies = [
|
|
1098
1093
|
"heck",
|
|
1099
1094
|
"proc-macro2",
|
|
1100
|
-
"pyo3-build-config",
|
|
1101
1095
|
"quote",
|
|
1102
1096
|
"syn",
|
|
1103
1097
|
]
|
|
1104
1098
|
|
|
1105
|
-
[[package]]
|
|
1106
|
-
name = "python3-dll-a"
|
|
1107
|
-
version = "0.2.15"
|
|
1108
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1109
|
-
checksum = "d80ba7540edb18890d444c5aa8e1f1f99b1bdf26fb26ae383135325f4a36042b"
|
|
1110
|
-
dependencies = [
|
|
1111
|
-
"cc",
|
|
1112
|
-
]
|
|
1113
|
-
|
|
1114
1099
|
[[package]]
|
|
1115
1100
|
name = "pythonize"
|
|
1116
|
-
version = "0.
|
|
1101
|
+
version = "0.29.0"
|
|
1117
1102
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1118
|
-
checksum = "
|
|
1103
|
+
checksum = "6ec376e1216e0c929a74964ce2020012a1a39f32d80e78aa688721219ea7fb89"
|
|
1119
1104
|
dependencies = [
|
|
1120
1105
|
"pyo3",
|
|
1121
1106
|
"serde",
|
|
@@ -1143,14 +1128,15 @@ dependencies = [
|
|
|
1143
1128
|
|
|
1144
1129
|
[[package]]
|
|
1145
1130
|
name = "quinn-proto"
|
|
1146
|
-
version = "0.11.
|
|
1131
|
+
version = "0.11.16"
|
|
1147
1132
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1148
|
-
checksum = "
|
|
1133
|
+
checksum = "2f4bfc015262b9df63c8845072ce59068853ff5872180c2ce2f13038b970e560"
|
|
1149
1134
|
dependencies = [
|
|
1150
1135
|
"bytes",
|
|
1151
|
-
"getrandom 0.3
|
|
1136
|
+
"getrandom 0.4.3",
|
|
1152
1137
|
"lru-slab",
|
|
1153
|
-
"rand 0.
|
|
1138
|
+
"rand 0.10.2",
|
|
1139
|
+
"rand_pcg",
|
|
1154
1140
|
"ring",
|
|
1155
1141
|
"rustc-hash",
|
|
1156
1142
|
"rustls",
|
|
@@ -1191,6 +1177,12 @@ version = "5.3.0"
|
|
|
1191
1177
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1192
1178
|
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
|
|
1193
1179
|
|
|
1180
|
+
[[package]]
|
|
1181
|
+
name = "r-efi"
|
|
1182
|
+
version = "6.0.0"
|
|
1183
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1184
|
+
checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf"
|
|
1185
|
+
|
|
1194
1186
|
[[package]]
|
|
1195
1187
|
name = "rand"
|
|
1196
1188
|
version = "0.8.6"
|
|
@@ -1202,22 +1194,13 @@ dependencies = [
|
|
|
1202
1194
|
|
|
1203
1195
|
[[package]]
|
|
1204
1196
|
name = "rand"
|
|
1205
|
-
version = "0.
|
|
1206
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1207
|
-
checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea"
|
|
1208
|
-
dependencies = [
|
|
1209
|
-
"rand_chacha",
|
|
1210
|
-
"rand_core 0.9.5",
|
|
1211
|
-
]
|
|
1212
|
-
|
|
1213
|
-
[[package]]
|
|
1214
|
-
name = "rand_chacha"
|
|
1215
|
-
version = "0.9.0"
|
|
1197
|
+
version = "0.10.2"
|
|
1216
1198
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1217
|
-
checksum = "
|
|
1199
|
+
checksum = "c7f5fa3a058cd35567ef9bfa5e75732bee0f9e4c55fa90477bef2dfcdbc4be80"
|
|
1218
1200
|
dependencies = [
|
|
1219
|
-
"
|
|
1220
|
-
"
|
|
1201
|
+
"chacha20",
|
|
1202
|
+
"getrandom 0.4.3",
|
|
1203
|
+
"rand_core 0.10.1",
|
|
1221
1204
|
]
|
|
1222
1205
|
|
|
1223
1206
|
[[package]]
|
|
@@ -1228,11 +1211,17 @@ checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
|
|
1228
1211
|
|
|
1229
1212
|
[[package]]
|
|
1230
1213
|
name = "rand_core"
|
|
1231
|
-
version = "0.
|
|
1214
|
+
version = "0.10.1"
|
|
1232
1215
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1233
|
-
checksum = "
|
|
1216
|
+
checksum = "63b8176103e19a2643978565ca18b50549f6101881c443590420e4dc998a3c69"
|
|
1217
|
+
|
|
1218
|
+
[[package]]
|
|
1219
|
+
name = "rand_pcg"
|
|
1220
|
+
version = "0.10.2"
|
|
1221
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1222
|
+
checksum = "caa0f4137e1c0a72f4c651489402276c8e8e1cf081f3b0ba156d2cbeef09e86a"
|
|
1234
1223
|
dependencies = [
|
|
1235
|
-
"
|
|
1224
|
+
"rand_core 0.10.1",
|
|
1236
1225
|
]
|
|
1237
1226
|
|
|
1238
1227
|
[[package]]
|
|
@@ -1803,12 +1792,6 @@ version = "0.2.2"
|
|
|
1803
1792
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1804
1793
|
checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
|
|
1805
1794
|
|
|
1806
|
-
[[package]]
|
|
1807
|
-
name = "unindent"
|
|
1808
|
-
version = "0.2.4"
|
|
1809
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1810
|
-
checksum = "7264e107f553ccae879d21fbea1d6724ac785e8c3bfc762137959b5802826ef3"
|
|
1811
|
-
|
|
1812
1795
|
[[package]]
|
|
1813
1796
|
name = "untrusted"
|
|
1814
1797
|
version = "0.9.0"
|