httpr 0.1.0__tar.gz → 0.1.11__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.
Potentially problematic release.
This version of httpr might be problematic. Click here for more details.
- {httpr-0.1.0 → httpr-0.1.11}/.github/workflows/CI.yml +63 -2
- {httpr-0.1.0 → httpr-0.1.11}/.github/workflows/mkdocs.yml +1 -1
- httpr-0.1.11/.github/workflows/set_version.py +56 -0
- {httpr-0.1.0 → httpr-0.1.11}/.gitignore +3 -1
- {httpr-0.1.0 → httpr-0.1.11}/PKG-INFO +17 -11
- {httpr-0.1.0 → httpr-0.1.11}/README.md +15 -9
- httpr-0.1.11/benchmark.jpg +0 -0
- httpr-0.1.11/docs/writings/index.md +1 -0
- httpr-0.1.11/docs/writings/posts/2025-02-24-python-http-clients-suck.md +9 -0
- {httpr-0.1.0 → httpr-0.1.11}/httpr/__init__.py +14 -0
- httpr-0.1.11/mkdocs.yml +41 -0
- httpr-0.1.11/pyproject.toml +49 -0
- {httpr-0.1.0 → httpr-0.1.11}/src/lib.rs +1 -0
- {httpr-0.1.0 → httpr-0.1.11}/tests/test_client.py +2 -2
- {httpr-0.1.0 → httpr-0.1.11}/uv.lock +104 -65
- httpr-0.1.0/benchmark.jpg +0 -0
- httpr-0.1.0/mkdocs.yml +0 -4
- httpr-0.1.0/pyproject.toml +0 -87
- {httpr-0.1.0 → httpr-0.1.11}/.pre-commit-config.yaml +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/Cargo.lock +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/Cargo.toml +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/LICENSE +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/benchmark/README.md +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/benchmark/benchmark.py +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/benchmark/generate_image.py +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/benchmark/pyproject.toml +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/benchmark/requirements.txt +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/benchmark/server.py +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/docs/index.md +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/httpr/httpr.pyi +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/httpr/py.typed +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/httpr.code-workspace +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/scratch.ipynb +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/src/response.rs +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/src/traits.rs +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/src/utils.rs +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/tests/httpx_conns.py +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/tests/test_asyncclient.py +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/tests/test_defs.py +0 -0
- {httpr-0.1.0 → httpr-0.1.11}/tests/test_ssl.py +0 -0
|
@@ -19,6 +19,20 @@ permissions:
|
|
|
19
19
|
contents: read
|
|
20
20
|
|
|
21
21
|
jobs:
|
|
22
|
+
extract-version:
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
25
|
+
outputs:
|
|
26
|
+
version: ${{ steps.get_version.outputs.version }}
|
|
27
|
+
steps:
|
|
28
|
+
- name: Extract version from tag
|
|
29
|
+
id: get_version
|
|
30
|
+
run: |
|
|
31
|
+
# Extract version from tag (e.g., v0.1.0 -> 0.1.0)
|
|
32
|
+
TAG_VERSION=${GITHUB_REF#refs/tags/v}
|
|
33
|
+
echo "version=$TAG_VERSION" >> $GITHUB_OUTPUT
|
|
34
|
+
echo "Version extracted: $TAG_VERSION"
|
|
35
|
+
|
|
22
36
|
linux:
|
|
23
37
|
runs-on: ${{ matrix.platform.runner }}
|
|
24
38
|
strategy:
|
|
@@ -47,6 +61,13 @@ jobs:
|
|
|
47
61
|
- uses: actions/setup-python@v5
|
|
48
62
|
with:
|
|
49
63
|
python-version: 3.x
|
|
64
|
+
# Only modify pyproject.toml temporarily for this job if running from a tag
|
|
65
|
+
- name: Update version in pyproject.toml
|
|
66
|
+
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
67
|
+
run: |
|
|
68
|
+
TAG_VERSION=${GITHUB_REF#refs/tags/v}
|
|
69
|
+
pip install toml
|
|
70
|
+
python .github/workflows/set_version.py $TAG_VERSION
|
|
50
71
|
- name: Build wheels
|
|
51
72
|
uses: PyO3/maturin-action@v1
|
|
52
73
|
with:
|
|
@@ -103,13 +124,20 @@ jobs:
|
|
|
103
124
|
target: x86
|
|
104
125
|
- runner: ubuntu-22.04
|
|
105
126
|
target: aarch64
|
|
106
|
-
- runner: ubuntu-22.04
|
|
107
|
-
|
|
127
|
+
# - runner: ubuntu-22.04
|
|
128
|
+
# target: armv7
|
|
108
129
|
steps:
|
|
109
130
|
- uses: actions/checkout@v4
|
|
110
131
|
- uses: actions/setup-python@v5
|
|
111
132
|
with:
|
|
112
133
|
python-version: 3.x
|
|
134
|
+
# Only modify pyproject.toml temporarily for this job if running from a tag
|
|
135
|
+
- name: Update version in pyproject.toml
|
|
136
|
+
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
137
|
+
run: |
|
|
138
|
+
TAG_VERSION=${GITHUB_REF#refs/tags/v}
|
|
139
|
+
pip install toml
|
|
140
|
+
python .github/workflows/set_version.py $TAG_VERSION
|
|
113
141
|
- name: Build wheels
|
|
114
142
|
uses: PyO3/maturin-action@v1
|
|
115
143
|
with:
|
|
@@ -175,6 +203,14 @@ jobs:
|
|
|
175
203
|
with:
|
|
176
204
|
python-version: 3.x
|
|
177
205
|
architecture: ${{ matrix.platform.target }}
|
|
206
|
+
# Only modify pyproject.toml temporarily for this job if running from a tag
|
|
207
|
+
- name: Update version in pyproject.toml
|
|
208
|
+
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
209
|
+
shell: pwsh
|
|
210
|
+
run: |
|
|
211
|
+
$TAG_VERSION = $env:GITHUB_REF -replace 'refs/tags/v', ''
|
|
212
|
+
pip install toml
|
|
213
|
+
python .github/workflows/set_version.py $TAG_VERSION
|
|
178
214
|
- name: Build wheels
|
|
179
215
|
uses: PyO3/maturin-action@v1
|
|
180
216
|
with:
|
|
@@ -216,6 +252,13 @@ jobs:
|
|
|
216
252
|
- uses: actions/setup-python@v5
|
|
217
253
|
with:
|
|
218
254
|
python-version: 3.x
|
|
255
|
+
# Only modify pyproject.toml temporarily for this job if running from a tag
|
|
256
|
+
- name: Update version in pyproject.toml
|
|
257
|
+
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
258
|
+
run: |
|
|
259
|
+
TAG_VERSION=${GITHUB_REF#refs/tags/v}
|
|
260
|
+
pip install toml
|
|
261
|
+
python .github/workflows/set_version.py $TAG_VERSION
|
|
219
262
|
- name: Build wheels
|
|
220
263
|
uses: PyO3/maturin-action@v1
|
|
221
264
|
with:
|
|
@@ -246,6 +289,16 @@ jobs:
|
|
|
246
289
|
runs-on: ubuntu-latest
|
|
247
290
|
steps:
|
|
248
291
|
- uses: actions/checkout@v4
|
|
292
|
+
- uses: actions/setup-python@v5
|
|
293
|
+
with:
|
|
294
|
+
python-version: 3.x
|
|
295
|
+
# Only modify pyproject.toml temporarily for this job if running from a tag
|
|
296
|
+
- name: Update version in pyproject.toml
|
|
297
|
+
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
298
|
+
run: |
|
|
299
|
+
TAG_VERSION=${GITHUB_REF#refs/tags/v}
|
|
300
|
+
pip install toml
|
|
301
|
+
python .github/workflows/set_version.py $TAG_VERSION
|
|
249
302
|
- name: Build sdist
|
|
250
303
|
uses: PyO3/maturin-action@v1
|
|
251
304
|
with:
|
|
@@ -292,6 +345,8 @@ jobs:
|
|
|
292
345
|
needs: [linux]
|
|
293
346
|
steps:
|
|
294
347
|
- uses: actions/checkout@v4
|
|
348
|
+
with:
|
|
349
|
+
fetch-depth: 0
|
|
295
350
|
- name: Set up Python
|
|
296
351
|
uses: actions/setup-python@v5
|
|
297
352
|
with:
|
|
@@ -312,8 +367,14 @@ jobs:
|
|
|
312
367
|
run: python benchmark/benchmark.py
|
|
313
368
|
- name: Generate image
|
|
314
369
|
run: python benchmark/generate_image.py
|
|
370
|
+
- name: Checkout main branch
|
|
371
|
+
if: ${{ startsWith(github.ref, 'refs/tags/') }}
|
|
372
|
+
run: |
|
|
373
|
+
git checkout main
|
|
315
374
|
- name: Commit generated image if changed
|
|
316
375
|
uses: EndBug/add-and-commit@v9
|
|
317
376
|
with:
|
|
318
377
|
message: "Update generated image"
|
|
319
378
|
add: "*.jpg"
|
|
379
|
+
default_author: github_actions
|
|
380
|
+
push: true
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import os
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
# Replace tomllib with toml (needs to be installed with pip)
|
|
8
|
+
import toml
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def update_version(version):
|
|
12
|
+
"""Update project version in pyproject.toml file"""
|
|
13
|
+
# Get the project root directory (assuming script is in .github/workflows)
|
|
14
|
+
project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
15
|
+
pyproject_path = os.path.join(project_root, "pyproject.toml")
|
|
16
|
+
|
|
17
|
+
# Check if pyproject.toml exists
|
|
18
|
+
if not os.path.isfile(pyproject_path):
|
|
19
|
+
print(f"Error: pyproject.toml not found at {pyproject_path}")
|
|
20
|
+
sys.exit(1)
|
|
21
|
+
|
|
22
|
+
try:
|
|
23
|
+
# Load the pyproject.toml file
|
|
24
|
+
data = toml.load(pyproject_path)
|
|
25
|
+
|
|
26
|
+
# Show the current version
|
|
27
|
+
current_version = data.get("project", {}).get("version", "unknown")
|
|
28
|
+
print(f"Current version: {current_version}")
|
|
29
|
+
|
|
30
|
+
# Update the version
|
|
31
|
+
if "project" not in data:
|
|
32
|
+
print("Error: 'project' section not found in pyproject.toml")
|
|
33
|
+
sys.exit(1)
|
|
34
|
+
|
|
35
|
+
data["project"]["version"] = version
|
|
36
|
+
|
|
37
|
+
# Write the updated content back to the file
|
|
38
|
+
with open(pyproject_path, "w") as f:
|
|
39
|
+
toml.dump(data, f)
|
|
40
|
+
|
|
41
|
+
print(f"Version updated to: {version}")
|
|
42
|
+
|
|
43
|
+
except Exception as e:
|
|
44
|
+
print(f"Error updating version: {e}")
|
|
45
|
+
sys.exit(1)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
if __name__ == "__main__":
|
|
49
|
+
# Parse command line arguments
|
|
50
|
+
parser = argparse.ArgumentParser(description="Update project version in pyproject.toml")
|
|
51
|
+
parser.add_argument("version", help="New version to set (e.g., '0.1.0')")
|
|
52
|
+
|
|
53
|
+
args = parser.parse_args()
|
|
54
|
+
|
|
55
|
+
# Update the version
|
|
56
|
+
update_version(args.version)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: httpr
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.11
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: 3
|
|
6
6
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
@@ -22,7 +22,7 @@ Requires-Dist: mypy>=1.14.1 ; extra == 'dev'
|
|
|
22
22
|
Requires-Dist: ruff>=0.9.2 ; extra == 'dev'
|
|
23
23
|
Requires-Dist: maturin ; extra == 'dev'
|
|
24
24
|
Requires-Dist: trustme ; extra == 'dev'
|
|
25
|
-
Requires-Dist: mkdocs-material ; extra == 'docs'
|
|
25
|
+
Requires-Dist: mkdocs-material[imaging] ; extra == 'docs'
|
|
26
26
|
Requires-Dist: httpr[dev] ; extra == 'scratch'
|
|
27
27
|
Requires-Dist: matplotlib ; extra == 'scratch'
|
|
28
28
|
Requires-Dist: pandas ; extra == 'scratch'
|
|
@@ -47,19 +47,24 @@ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
|
47
47
|
|
|
48
48
|
# httpr
|
|
49
49
|
|
|
50
|
-
**Blazing fast http-client** for Python in Rust 🦀 that can be used as drop-in replacement for `httpx` in most cases.
|
|
50
|
+
**Blazing fast http-client** for Python in Rust 🦀 that can be used as drop-in replacement for `httpx` and `requests` in most cases.
|
|
51
51
|
|
|
52
|
-
- **Fast**: httpr is built on top of `reqwests
|
|
53
|
-
- **Both async and sync**: httpr provides both a sync and async client.
|
|
54
|
-
- **Lightweight**: httpr is a lightweight http client with
|
|
55
|
-
- **Async**: first-class support
|
|
56
|
-
- **http2**: httpr supports
|
|
57
|
-
- **mTLS**: httpr supports mTLS.
|
|
58
|
-
|
|
52
|
+
- **Fast**: `httpr` is built on top of `reqwests`, which is a blazing fast http client in Rust. Check out the [benchmark](#benchmark).
|
|
53
|
+
- **Both async and sync**: `httpr` provides both a sync and async client.
|
|
54
|
+
- **Lightweight**: `httpr` is a lightweight http client with zero python-dependencies.
|
|
55
|
+
- **Async**: first-class async support.
|
|
56
|
+
- **http2**: `httpr` supports HTTP/2.
|
|
57
|
+
- **mTLS**: `httpr` supports mTLS.
|
|
58
|
+
|
|
59
|
+
## Not implemented yet
|
|
60
|
+
|
|
61
|
+
- **Streaming**: Streaming is not implemented yet.
|
|
62
|
+
- **Fine-grained error handling**: Fine-grained error handling is not implemented yet.
|
|
59
63
|
|
|
60
64
|
## Table of Contents
|
|
61
65
|
|
|
62
66
|
- [httpr](#httpr)
|
|
67
|
+
- [Not implemented yet](#not-implemented-yet)
|
|
63
68
|
- [Table of Contents](#table-of-contents)
|
|
64
69
|
- [Installation](#installation)
|
|
65
70
|
- [Install with uv](#install-with-uv)
|
|
@@ -310,7 +315,8 @@ Provides precompiled wheels for the following platforms:
|
|
|
310
315
|
|
|
311
316
|
## Acknowledgements
|
|
312
317
|
|
|
313
|
-
- [
|
|
318
|
+
- [uv](https://docs.astral.sh/uv/): The package manager used, and for leading the way in the "Rust for python tools"-sphere.
|
|
319
|
+
- [primp](https://github.com/deedy5/primp): *A lot* of code is borrowed from primp, that wraps rust library `rquest` for python in a similar way. If primp supported mTLS, I would have used it instead.
|
|
314
320
|
- [reqwests](https://github.com/seanmonstar/reqwest): The rust library that powers httpr.
|
|
315
321
|
- [pyo3](https://github.com/PyO3/pyo3)
|
|
316
322
|
- [maturin](https://github.com/PyO3/maturin)
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
# httpr
|
|
2
2
|
|
|
3
|
-
**Blazing fast http-client** for Python in Rust 🦀 that can be used as drop-in replacement for `httpx` in most cases.
|
|
3
|
+
**Blazing fast http-client** for Python in Rust 🦀 that can be used as drop-in replacement for `httpx` and `requests` in most cases.
|
|
4
4
|
|
|
5
|
-
- **Fast**: httpr is built on top of `reqwests
|
|
6
|
-
- **Both async and sync**: httpr provides both a sync and async client.
|
|
7
|
-
- **Lightweight**: httpr is a lightweight http client with
|
|
8
|
-
- **Async**: first-class support
|
|
9
|
-
- **http2**: httpr supports
|
|
10
|
-
- **mTLS**: httpr supports mTLS.
|
|
11
|
-
|
|
5
|
+
- **Fast**: `httpr` is built on top of `reqwests`, which is a blazing fast http client in Rust. Check out the [benchmark](#benchmark).
|
|
6
|
+
- **Both async and sync**: `httpr` provides both a sync and async client.
|
|
7
|
+
- **Lightweight**: `httpr` is a lightweight http client with zero python-dependencies.
|
|
8
|
+
- **Async**: first-class async support.
|
|
9
|
+
- **http2**: `httpr` supports HTTP/2.
|
|
10
|
+
- **mTLS**: `httpr` supports mTLS.
|
|
11
|
+
|
|
12
|
+
## Not implemented yet
|
|
13
|
+
|
|
14
|
+
- **Streaming**: Streaming is not implemented yet.
|
|
15
|
+
- **Fine-grained error handling**: Fine-grained error handling is not implemented yet.
|
|
12
16
|
|
|
13
17
|
## Table of Contents
|
|
14
18
|
|
|
15
19
|
- [httpr](#httpr)
|
|
20
|
+
- [Not implemented yet](#not-implemented-yet)
|
|
16
21
|
- [Table of Contents](#table-of-contents)
|
|
17
22
|
- [Installation](#installation)
|
|
18
23
|
- [Install with uv](#install-with-uv)
|
|
@@ -263,7 +268,8 @@ Provides precompiled wheels for the following platforms:
|
|
|
263
268
|
|
|
264
269
|
## Acknowledgements
|
|
265
270
|
|
|
266
|
-
- [
|
|
271
|
+
- [uv](https://docs.astral.sh/uv/): The package manager used, and for leading the way in the "Rust for python tools"-sphere.
|
|
272
|
+
- [primp](https://github.com/deedy5/primp): *A lot* of code is borrowed from primp, that wraps rust library `rquest` for python in a similar way. If primp supported mTLS, I would have used it instead.
|
|
267
273
|
- [reqwests](https://github.com/seanmonstar/reqwest): The rust library that powers httpr.
|
|
268
274
|
- [pyo3](https://github.com/PyO3/pyo3)
|
|
269
275
|
- [maturin](https://github.com/PyO3/maturin)
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Blog
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
date: 2025-02-25T00:00:00-07:00
|
|
3
|
+
social:
|
|
4
|
+
cards: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Lorem ipsum dolor sit amet
|
|
8
|
+
|
|
9
|
+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt est et ultrices eleifend, nunc risus varius orci, in dignissim purus enim quis turpis.
|
|
@@ -80,6 +80,10 @@ class Client(RClient):
|
|
|
80
80
|
# Validate the HTTP method. Raise an exception if it's not supported.
|
|
81
81
|
if method not in ["GET", "HEAD", "OPTIONS", "DELETE", "POST", "PUT", "PATCH"]:
|
|
82
82
|
raise ValueError(f"Unsupported HTTP method: {method}")
|
|
83
|
+
# Convert all params values to strings if params is present
|
|
84
|
+
if "params" in kwargs and kwargs["params"] is not None:
|
|
85
|
+
kwargs["params"] = {k: str(v) for k, v in kwargs["params"].items()}
|
|
86
|
+
|
|
83
87
|
return super().request(method=method, url=url, **kwargs)
|
|
84
88
|
|
|
85
89
|
def get(self, url: str, **kwargs: Unpack[RequestParams]) -> Response:
|
|
@@ -114,11 +118,21 @@ class AsyncClient(Client):
|
|
|
114
118
|
async def __aexit__(self, *args):
|
|
115
119
|
del self
|
|
116
120
|
|
|
121
|
+
async def aclose(self):
|
|
122
|
+
del self
|
|
123
|
+
return
|
|
124
|
+
|
|
117
125
|
async def _run_sync_asyncio(self, fn, *args, **kwargs):
|
|
118
126
|
loop = asyncio.get_running_loop()
|
|
119
127
|
return await loop.run_in_executor(None, partial(fn, *args, **kwargs))
|
|
120
128
|
|
|
121
129
|
async def request(self, method: HttpMethod, url: str, **kwargs: Unpack[RequestParams]): # type: ignore
|
|
130
|
+
if method not in ["GET", "HEAD", "OPTIONS", "DELETE", "POST", "PUT", "PATCH"]:
|
|
131
|
+
raise ValueError(f"Unsupported HTTP method: {method}")
|
|
132
|
+
# Convert all params values to strings if params is present
|
|
133
|
+
if "params" in kwargs and kwargs["params"] is not None:
|
|
134
|
+
kwargs["params"] = {k: str(v) for k, v in kwargs["params"].items()}
|
|
135
|
+
|
|
122
136
|
return await self._run_sync_asyncio(super().request, method=method, url=url, **kwargs)
|
|
123
137
|
|
|
124
138
|
async def get(self, url: str, **kwargs: Unpack[RequestParams]): # type: ignore
|
httpr-0.1.11/mkdocs.yml
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
site_name: httpr
|
|
2
|
+
site_url: https://thomasht86.github.io/httpr
|
|
3
|
+
plugins:
|
|
4
|
+
- search
|
|
5
|
+
- blog:
|
|
6
|
+
blog_dir: writings
|
|
7
|
+
- social:
|
|
8
|
+
enabled: true
|
|
9
|
+
|
|
10
|
+
nav:
|
|
11
|
+
- Home: index.md
|
|
12
|
+
- Docs: docs.md
|
|
13
|
+
- Blog: writings/index.md
|
|
14
|
+
|
|
15
|
+
theme:
|
|
16
|
+
name: material
|
|
17
|
+
font:
|
|
18
|
+
text: Lato
|
|
19
|
+
code: Fira Code
|
|
20
|
+
features:
|
|
21
|
+
- content.code.copy
|
|
22
|
+
- search.suggest
|
|
23
|
+
|
|
24
|
+
markdown_extensions:
|
|
25
|
+
- attr_list
|
|
26
|
+
- admonition
|
|
27
|
+
- pymdownx.betterem
|
|
28
|
+
- toc:
|
|
29
|
+
permalink: true
|
|
30
|
+
- pymdownx.highlight:
|
|
31
|
+
anchor_linenums: true
|
|
32
|
+
line_spans: __span
|
|
33
|
+
pygments_lang_class: true
|
|
34
|
+
- pymdownx.inlinehilite
|
|
35
|
+
- pymdownx.snippets
|
|
36
|
+
- pymdownx.superfences
|
|
37
|
+
- pymdownx.tabbed:
|
|
38
|
+
alternate_style: true
|
|
39
|
+
- pymdownx.emoji
|
|
40
|
+
- pymdownx.keys
|
|
41
|
+
- footnotes
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = [ "maturin>=1.5,<2.0",]
|
|
3
|
+
build-backend = "maturin"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "httpr"
|
|
7
|
+
description = "Fast HTTP client for Python"
|
|
8
|
+
requires-python = ">=3.9"
|
|
9
|
+
keywords = [ "python", "request",]
|
|
10
|
+
classifiers = [ "Programming Language :: Rust", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Python Modules",]
|
|
11
|
+
dynamic = [ "version",]
|
|
12
|
+
dependencies = []
|
|
13
|
+
version = "0.1.11"
|
|
14
|
+
[[project.authors]]
|
|
15
|
+
name = "thomasht86"
|
|
16
|
+
|
|
17
|
+
[project.license]
|
|
18
|
+
text = "MIT License"
|
|
19
|
+
|
|
20
|
+
[project.optional-dependencies]
|
|
21
|
+
dev = [ "certifi", "pytest>=8.1.1", "pytest-asyncio>=0.25.3", "typing_extensions; python_version <= '3.11'", "mypy>=1.14.1", "ruff>=0.9.2", "maturin", "trustme",]
|
|
22
|
+
docs = [ "mkdocs-material[imaging]",]
|
|
23
|
+
scratch = [ "httpr[dev]", "matplotlib", "pandas", "jupyter", "ipykernel", "httpx", "gunicorn", "uvicorn", "trustme", "starlette", "fastapi",]
|
|
24
|
+
|
|
25
|
+
[tool.maturin]
|
|
26
|
+
features = [ "pyo3/extension-module",]
|
|
27
|
+
|
|
28
|
+
[tool.ruff]
|
|
29
|
+
line-length = 120
|
|
30
|
+
exclude = [ "tests",]
|
|
31
|
+
|
|
32
|
+
[tool.mypy]
|
|
33
|
+
python_version = "0.1.5"
|
|
34
|
+
|
|
35
|
+
[tool.uv]
|
|
36
|
+
[[tool.uv.cache-keys]]
|
|
37
|
+
file = "pyproject.toml"
|
|
38
|
+
|
|
39
|
+
[[tool.uv.cache-keys]]
|
|
40
|
+
file = "rust/Cargo.toml"
|
|
41
|
+
|
|
42
|
+
[[tool.uv.cache-keys]]
|
|
43
|
+
file = "**/*.rs"
|
|
44
|
+
|
|
45
|
+
[tool.ruff.lint]
|
|
46
|
+
select = [ "E", "F", "UP", "B", "SIM", "I",]
|
|
47
|
+
|
|
48
|
+
[tool.uv.workspace]
|
|
49
|
+
members = [ "benchmark",]
|
|
@@ -219,7 +219,7 @@ def test_client_post_json():
|
|
|
219
219
|
auth_bearer = "bearerXXXXXXXXXXXXXXXXXXXX"
|
|
220
220
|
headers = {"X-Test": "test"}
|
|
221
221
|
cookies = {"ccc": "ddd", "cccc": "dddd"}
|
|
222
|
-
params = {"x": "aaa", "y": "bbb"}
|
|
222
|
+
params = {"x": "aaa", "y": "bbb", "z": 3}
|
|
223
223
|
data = {"key1": "value1", "key2": "value2"}
|
|
224
224
|
response = client.post(
|
|
225
225
|
"https://httpbin.org/anything",
|
|
@@ -235,7 +235,7 @@ def test_client_post_json():
|
|
|
235
235
|
assert json_data["headers"]["X-Test"] == "test"
|
|
236
236
|
assert json_data["headers"]["Cookie"] == "ccc=ddd; cccc=dddd"
|
|
237
237
|
assert json_data["headers"]["Authorization"] == "Bearer bearerXXXXXXXXXXXXXXXXXXXX"
|
|
238
|
-
assert json_data["args"] == {"x": "aaa", "y": "bbb"}
|
|
238
|
+
assert json_data["args"] == {"x": "aaa", "y": "bbb", "z": "3"}
|
|
239
239
|
assert json_data["json"] == data
|
|
240
240
|
|
|
241
241
|
|
|
@@ -308,6 +308,34 @@ css = [
|
|
|
308
308
|
{ name = "tinycss2" },
|
|
309
309
|
]
|
|
310
310
|
|
|
311
|
+
[[package]]
|
|
312
|
+
name = "cairocffi"
|
|
313
|
+
version = "1.7.1"
|
|
314
|
+
source = { registry = "https://pypi.org/simple" }
|
|
315
|
+
dependencies = [
|
|
316
|
+
{ name = "cffi" },
|
|
317
|
+
]
|
|
318
|
+
sdist = { url = "https://files.pythonhosted.org/packages/70/c5/1a4dc131459e68a173cbdab5fad6b524f53f9c1ef7861b7698e998b837cc/cairocffi-1.7.1.tar.gz", hash = "sha256:2e48ee864884ec4a3a34bfa8c9ab9999f688286eb714a15a43ec9d068c36557b", size = 88096 }
|
|
319
|
+
wheels = [
|
|
320
|
+
{ url = "https://files.pythonhosted.org/packages/93/d8/ba13451aa6b745c49536e87b6bf8f629b950e84bd0e8308f7dc6883b67e2/cairocffi-1.7.1-py3-none-any.whl", hash = "sha256:9803a0e11f6c962f3b0ae2ec8ba6ae45e957a146a004697a1ac1bbf16b073b3f", size = 75611 },
|
|
321
|
+
]
|
|
322
|
+
|
|
323
|
+
[[package]]
|
|
324
|
+
name = "cairosvg"
|
|
325
|
+
version = "2.7.1"
|
|
326
|
+
source = { registry = "https://pypi.org/simple" }
|
|
327
|
+
dependencies = [
|
|
328
|
+
{ name = "cairocffi" },
|
|
329
|
+
{ name = "cssselect2" },
|
|
330
|
+
{ name = "defusedxml" },
|
|
331
|
+
{ name = "pillow" },
|
|
332
|
+
{ name = "tinycss2" },
|
|
333
|
+
]
|
|
334
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d5/e6/ec5900b724e3c44af7f6f51f719919137284e5da4aabe96508baec8a1b40/CairoSVG-2.7.1.tar.gz", hash = "sha256:432531d72347291b9a9ebfb6777026b607563fd8719c46ee742db0aef7271ba0", size = 8399085 }
|
|
335
|
+
wheels = [
|
|
336
|
+
{ url = "https://files.pythonhosted.org/packages/01/a5/1866b42151f50453f1a0d28fc4c39f5be5f412a2e914f33449c42daafdf1/CairoSVG-2.7.1-py3-none-any.whl", hash = "sha256:8a5222d4e6c3f86f1f7046b63246877a63b49923a1cd202184c3a634ef546b3b", size = 43235 },
|
|
337
|
+
]
|
|
338
|
+
|
|
311
339
|
[[package]]
|
|
312
340
|
name = "certifi"
|
|
313
341
|
version = "2025.1.31"
|
|
@@ -638,6 +666,19 @@ wheels = [
|
|
|
638
666
|
{ url = "https://files.pythonhosted.org/packages/cc/9d/37e5da7519de7b0b070a3fedd4230fe76d50d2a21403e0f2153d70ac4163/cryptography-44.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:62901fb618f74d7d81bf408c8719e9ec14d863086efe4185afd07c352aee1d2c", size = 3128774 },
|
|
639
667
|
]
|
|
640
668
|
|
|
669
|
+
[[package]]
|
|
670
|
+
name = "cssselect2"
|
|
671
|
+
version = "0.7.0"
|
|
672
|
+
source = { registry = "https://pypi.org/simple" }
|
|
673
|
+
dependencies = [
|
|
674
|
+
{ name = "tinycss2" },
|
|
675
|
+
{ name = "webencodings" },
|
|
676
|
+
]
|
|
677
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e7/fc/326cb6f988905998f09bb54a3f5d98d4462ba119363c0dfad29750d48c09/cssselect2-0.7.0.tar.gz", hash = "sha256:1ccd984dab89fc68955043aca4e1b03e0cf29cad9880f6e28e3ba7a74b14aa5a", size = 35888 }
|
|
678
|
+
wheels = [
|
|
679
|
+
{ url = "https://files.pythonhosted.org/packages/9d/3a/e39436efe51894243ff145a37c4f9a030839b97779ebcc4f13b3ba21c54e/cssselect2-0.7.0-py3-none-any.whl", hash = "sha256:fd23a65bfd444595913f02fc71f6b286c29261e354c41d722ca7a261a49b5969", size = 15586 },
|
|
680
|
+
]
|
|
681
|
+
|
|
641
682
|
[[package]]
|
|
642
683
|
name = "curl-cffi"
|
|
643
684
|
version = "0.7.4"
|
|
@@ -934,7 +975,7 @@ dev = [
|
|
|
934
975
|
{ name = "typing-extensions", marker = "python_full_version < '3.12'" },
|
|
935
976
|
]
|
|
936
977
|
docs = [
|
|
937
|
-
{ name = "mkdocs-material" },
|
|
978
|
+
{ name = "mkdocs-material", extra = ["imaging"] },
|
|
938
979
|
]
|
|
939
980
|
scratch = [
|
|
940
981
|
{ name = "certifi" },
|
|
@@ -967,7 +1008,7 @@ requires-dist = [
|
|
|
967
1008
|
{ name = "jupyter", marker = "extra == 'scratch'" },
|
|
968
1009
|
{ name = "matplotlib", marker = "extra == 'scratch'" },
|
|
969
1010
|
{ name = "maturin", marker = "extra == 'dev'" },
|
|
970
|
-
{ name = "mkdocs-material", marker = "extra == 'docs'" },
|
|
1011
|
+
{ name = "mkdocs-material", extras = ["imaging"], marker = "extra == 'docs'" },
|
|
971
1012
|
{ name = "mypy", marker = "extra == 'dev'", specifier = ">=1.14.1" },
|
|
972
1013
|
{ name = "pandas", marker = "extra == 'scratch'" },
|
|
973
1014
|
{ name = "pytest", marker = "extra == 'dev'", specifier = ">=8.1.1" },
|
|
@@ -1807,6 +1848,12 @@ wheels = [
|
|
|
1807
1848
|
{ url = "https://files.pythonhosted.org/packages/5b/a5/f3c0e86c1d28fe04f1b724700ff3dd8b3647c89df03a8e10c4bc6b4db1b8/mkdocs_material-9.6.4-py3-none-any.whl", hash = "sha256:414e8376551def6d644b8e6f77226022868532a792eb2c9accf52199009f568f", size = 8688727 },
|
|
1808
1849
|
]
|
|
1809
1850
|
|
|
1851
|
+
[package.optional-dependencies]
|
|
1852
|
+
imaging = [
|
|
1853
|
+
{ name = "cairosvg" },
|
|
1854
|
+
{ name = "pillow" },
|
|
1855
|
+
]
|
|
1856
|
+
|
|
1810
1857
|
[[package]]
|
|
1811
1858
|
name = "mkdocs-material-extensions"
|
|
1812
1859
|
version = "1.3.1"
|
|
@@ -2251,69 +2298,61 @@ wheels = [
|
|
|
2251
2298
|
|
|
2252
2299
|
[[package]]
|
|
2253
2300
|
name = "pillow"
|
|
2254
|
-
version = "
|
|
2255
|
-
source = { registry = "https://pypi.org/simple" }
|
|
2256
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
2257
|
-
wheels = [
|
|
2258
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2259
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2260
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2261
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2262
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2263
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2264
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2265
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2266
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2267
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2268
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2269
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2270
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2271
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2272
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2273
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2274
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2275
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2276
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2277
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2278
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2279
|
-
{ url = "https://files.pythonhosted.org/packages/c8/
|
|
2280
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2281
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2282
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2283
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2284
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2285
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2286
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2287
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2288
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2289
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2290
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2291
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2292
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2293
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2294
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2295
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2296
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2297
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2298
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2299
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2300
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2301
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2302
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2303
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2304
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2305
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2306
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2307
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2308
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
2309
|
-
{ url = "https://files.pythonhosted.org/packages/cf/6c/41c21c6c8af92b9fea313aa47c75de49e2f9a467964ee33eb0135d47eb64/pillow-11.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:67cd427c68926108778a9005f2a04adbd5e67c442ed21d95389fe1d595458756", size = 2377651 },
|
|
2310
|
-
{ url = "https://files.pythonhosted.org/packages/fa/c5/389961578fb677b8b3244fcd934f720ed25a148b9a5cc81c91bdf59d8588/pillow-11.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8c730dc3a83e5ac137fbc92dfcfe1511ce3b2b5d7578315b63dbbb76f7f51d90", size = 3198345 },
|
|
2311
|
-
{ url = "https://files.pythonhosted.org/packages/c4/fa/803c0e50ffee74d4b965229e816af55276eac1d5806712de86f9371858fd/pillow-11.1.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:7d33d2fae0e8b170b6a6c57400e077412240f6f5bb2a342cf1ee512a787942bb", size = 3072938 },
|
|
2312
|
-
{ url = "https://files.pythonhosted.org/packages/dc/67/2a3a5f8012b5d8c63fe53958ba906c1b1d0482ebed5618057ef4d22f8076/pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8d65b38173085f24bc07f8b6c505cbb7418009fa1a1fcb111b1f4961814a442", size = 3400049 },
|
|
2313
|
-
{ url = "https://files.pythonhosted.org/packages/e5/a0/514f0d317446c98c478d1872497eb92e7cde67003fed74f696441e647446/pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:015c6e863faa4779251436db398ae75051469f7c903b043a48f078e437656f83", size = 3422431 },
|
|
2314
|
-
{ url = "https://files.pythonhosted.org/packages/cd/00/20f40a935514037b7d3f87adfc87d2c538430ea625b63b3af8c3f5578e72/pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:d44ff19eea13ae4acdaaab0179fa68c0c6f2f45d66a4d8ec1eda7d6cecbcc15f", size = 3446208 },
|
|
2315
|
-
{ url = "https://files.pythonhosted.org/packages/28/3c/7de681727963043e093c72e6c3348411b0185eab3263100d4490234ba2f6/pillow-11.1.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d3d8da4a631471dfaf94c10c85f5277b1f8e42ac42bade1ac67da4b4a7359b73", size = 3509746 },
|
|
2316
|
-
{ url = "https://files.pythonhosted.org/packages/41/67/936f9814bdd74b2dfd4822f1f7725ab5d8ff4103919a1664eb4874c58b2f/pillow-11.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4637b88343166249fe8aa94e7c4a62a180c4b3898283bb5d3d2fd5fe10d8e4e0", size = 2626353 },
|
|
2301
|
+
version = "10.4.0"
|
|
2302
|
+
source = { registry = "https://pypi.org/simple" }
|
|
2303
|
+
sdist = { url = "https://files.pythonhosted.org/packages/cd/74/ad3d526f3bf7b6d3f408b73fde271ec69dfac8b81341a318ce825f2b3812/pillow-10.4.0.tar.gz", hash = "sha256:166c1cd4d24309b30d61f79f4a9114b7b2313d7450912277855ff5dfd7cd4a06", size = 46555059 }
|
|
2304
|
+
wheels = [
|
|
2305
|
+
{ url = "https://files.pythonhosted.org/packages/0e/69/a31cccd538ca0b5272be2a38347f8839b97a14be104ea08b0db92f749c74/pillow-10.4.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:4d9667937cfa347525b319ae34375c37b9ee6b525440f3ef48542fcf66f2731e", size = 3509271 },
|
|
2306
|
+
{ url = "https://files.pythonhosted.org/packages/9a/9e/4143b907be8ea0bce215f2ae4f7480027473f8b61fcedfda9d851082a5d2/pillow-10.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:543f3dc61c18dafb755773efc89aae60d06b6596a63914107f75459cf984164d", size = 3375658 },
|
|
2307
|
+
{ url = "https://files.pythonhosted.org/packages/8a/25/1fc45761955f9359b1169aa75e241551e74ac01a09f487adaaf4c3472d11/pillow-10.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7928ecbf1ece13956b95d9cbcfc77137652b02763ba384d9ab508099a2eca856", size = 4332075 },
|
|
2308
|
+
{ url = "https://files.pythonhosted.org/packages/5e/dd/425b95d0151e1d6c951f45051112394f130df3da67363b6bc75dc4c27aba/pillow-10.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4d49b85c4348ea0b31ea63bc75a9f3857869174e2bf17e7aba02945cd218e6f", size = 4444808 },
|
|
2309
|
+
{ url = "https://files.pythonhosted.org/packages/b1/84/9a15cc5726cbbfe7f9f90bfb11f5d028586595907cd093815ca6644932e3/pillow-10.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:6c762a5b0997f5659a5ef2266abc1d8851ad7749ad9a6a5506eb23d314e4f46b", size = 4356290 },
|
|
2310
|
+
{ url = "https://files.pythonhosted.org/packages/b5/5b/6651c288b08df3b8c1e2f8c1152201e0b25d240e22ddade0f1e242fc9fa0/pillow-10.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a985e028fc183bf12a77a8bbf36318db4238a3ded7fa9df1b9a133f1cb79f8fc", size = 4525163 },
|
|
2311
|
+
{ url = "https://files.pythonhosted.org/packages/07/8b/34854bf11a83c248505c8cb0fcf8d3d0b459a2246c8809b967963b6b12ae/pillow-10.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:812f7342b0eee081eaec84d91423d1b4650bb9828eb53d8511bcef8ce5aecf1e", size = 4463100 },
|
|
2312
|
+
{ url = "https://files.pythonhosted.org/packages/78/63/0632aee4e82476d9cbe5200c0cdf9ba41ee04ed77887432845264d81116d/pillow-10.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ac1452d2fbe4978c2eec89fb5a23b8387aba707ac72810d9490118817d9c0b46", size = 4592880 },
|
|
2313
|
+
{ url = "https://files.pythonhosted.org/packages/df/56/b8663d7520671b4398b9d97e1ed9f583d4afcbefbda3c6188325e8c297bd/pillow-10.4.0-cp310-cp310-win32.whl", hash = "sha256:bcd5e41a859bf2e84fdc42f4edb7d9aba0a13d29a2abadccafad99de3feff984", size = 2235218 },
|
|
2314
|
+
{ url = "https://files.pythonhosted.org/packages/f4/72/0203e94a91ddb4a9d5238434ae6c1ca10e610e8487036132ea9bf806ca2a/pillow-10.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:ecd85a8d3e79cd7158dec1c9e5808e821feea088e2f69a974db5edf84dc53141", size = 2554487 },
|
|
2315
|
+
{ url = "https://files.pythonhosted.org/packages/bd/52/7e7e93d7a6e4290543f17dc6f7d3af4bd0b3dd9926e2e8a35ac2282bc5f4/pillow-10.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:ff337c552345e95702c5fde3158acb0625111017d0e5f24bf3acdb9cc16b90d1", size = 2243219 },
|
|
2316
|
+
{ url = "https://files.pythonhosted.org/packages/a7/62/c9449f9c3043c37f73e7487ec4ef0c03eb9c9afc91a92b977a67b3c0bbc5/pillow-10.4.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:0a9ec697746f268507404647e531e92889890a087e03681a3606d9b920fbee3c", size = 3509265 },
|
|
2317
|
+
{ url = "https://files.pythonhosted.org/packages/f4/5f/491dafc7bbf5a3cc1845dc0430872e8096eb9e2b6f8161509d124594ec2d/pillow-10.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dfe91cb65544a1321e631e696759491ae04a2ea11d36715eca01ce07284738be", size = 3375655 },
|
|
2318
|
+
{ url = "https://files.pythonhosted.org/packages/73/d5/c4011a76f4207a3c151134cd22a1415741e42fa5ddecec7c0182887deb3d/pillow-10.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dc6761a6efc781e6a1544206f22c80c3af4c8cf461206d46a1e6006e4429ff3", size = 4340304 },
|
|
2319
|
+
{ url = "https://files.pythonhosted.org/packages/ac/10/c67e20445a707f7a610699bba4fe050583b688d8cd2d202572b257f46600/pillow-10.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e84b6cc6a4a3d76c153a6b19270b3526a5a8ed6b09501d3af891daa2a9de7d6", size = 4452804 },
|
|
2320
|
+
{ url = "https://files.pythonhosted.org/packages/a9/83/6523837906d1da2b269dee787e31df3b0acb12e3d08f024965a3e7f64665/pillow-10.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:bbc527b519bd3aa9d7f429d152fea69f9ad37c95f0b02aebddff592688998abe", size = 4365126 },
|
|
2321
|
+
{ url = "https://files.pythonhosted.org/packages/ba/e5/8c68ff608a4203085158cff5cc2a3c534ec384536d9438c405ed6370d080/pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:76a911dfe51a36041f2e756b00f96ed84677cdeb75d25c767f296c1c1eda1319", size = 4533541 },
|
|
2322
|
+
{ url = "https://files.pythonhosted.org/packages/f4/7c/01b8dbdca5bc6785573f4cee96e2358b0918b7b2c7b60d8b6f3abf87a070/pillow-10.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:59291fb29317122398786c2d44427bbd1a6d7ff54017075b22be9d21aa59bd8d", size = 4471616 },
|
|
2323
|
+
{ url = "https://files.pythonhosted.org/packages/c8/57/2899b82394a35a0fbfd352e290945440e3b3785655a03365c0ca8279f351/pillow-10.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:416d3a5d0e8cfe4f27f574362435bc9bae57f679a7158e0096ad2beb427b8696", size = 4600802 },
|
|
2324
|
+
{ url = "https://files.pythonhosted.org/packages/4d/d7/a44f193d4c26e58ee5d2d9db3d4854b2cfb5b5e08d360a5e03fe987c0086/pillow-10.4.0-cp311-cp311-win32.whl", hash = "sha256:7086cc1d5eebb91ad24ded9f58bec6c688e9f0ed7eb3dbbf1e4800280a896496", size = 2235213 },
|
|
2325
|
+
{ url = "https://files.pythonhosted.org/packages/c1/d0/5866318eec2b801cdb8c82abf190c8343d8a1cd8bf5a0c17444a6f268291/pillow-10.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:cbed61494057c0f83b83eb3a310f0bf774b09513307c434d4366ed64f4128a91", size = 2554498 },
|
|
2326
|
+
{ url = "https://files.pythonhosted.org/packages/d4/c8/310ac16ac2b97e902d9eb438688de0d961660a87703ad1561fd3dfbd2aa0/pillow-10.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:f5f0c3e969c8f12dd2bb7e0b15d5c468b51e5017e01e2e867335c81903046a22", size = 2243219 },
|
|
2327
|
+
{ url = "https://files.pythonhosted.org/packages/05/cb/0353013dc30c02a8be34eb91d25e4e4cf594b59e5a55ea1128fde1e5f8ea/pillow-10.4.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:673655af3eadf4df6b5457033f086e90299fdd7a47983a13827acf7459c15d94", size = 3509350 },
|
|
2328
|
+
{ url = "https://files.pythonhosted.org/packages/e7/cf/5c558a0f247e0bf9cec92bff9b46ae6474dd736f6d906315e60e4075f737/pillow-10.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:866b6942a92f56300012f5fbac71f2d610312ee65e22f1aa2609e491284e5597", size = 3374980 },
|
|
2329
|
+
{ url = "https://files.pythonhosted.org/packages/84/48/6e394b86369a4eb68b8a1382c78dc092245af517385c086c5094e3b34428/pillow-10.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29dbdc4207642ea6aad70fbde1a9338753d33fb23ed6956e706936706f52dd80", size = 4343799 },
|
|
2330
|
+
{ url = "https://files.pythonhosted.org/packages/3b/f3/a8c6c11fa84b59b9df0cd5694492da8c039a24cd159f0f6918690105c3be/pillow-10.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf2342ac639c4cf38799a44950bbc2dfcb685f052b9e262f446482afaf4bffca", size = 4459973 },
|
|
2331
|
+
{ url = "https://files.pythonhosted.org/packages/7d/1b/c14b4197b80150fb64453585247e6fb2e1d93761fa0fa9cf63b102fde822/pillow-10.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f5b92f4d70791b4a67157321c4e8225d60b119c5cc9aee8ecf153aace4aad4ef", size = 4370054 },
|
|
2332
|
+
{ url = "https://files.pythonhosted.org/packages/55/77/40daddf677897a923d5d33329acd52a2144d54a9644f2a5422c028c6bf2d/pillow-10.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:86dcb5a1eb778d8b25659d5e4341269e8590ad6b4e8b44d9f4b07f8d136c414a", size = 4539484 },
|
|
2333
|
+
{ url = "https://files.pythonhosted.org/packages/40/54/90de3e4256b1207300fb2b1d7168dd912a2fb4b2401e439ba23c2b2cabde/pillow-10.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:780c072c2e11c9b2c7ca37f9a2ee8ba66f44367ac3e5c7832afcfe5104fd6d1b", size = 4477375 },
|
|
2334
|
+
{ url = "https://files.pythonhosted.org/packages/13/24/1bfba52f44193860918ff7c93d03d95e3f8748ca1de3ceaf11157a14cf16/pillow-10.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:37fb69d905be665f68f28a8bba3c6d3223c8efe1edf14cc4cfa06c241f8c81d9", size = 4608773 },
|
|
2335
|
+
{ url = "https://files.pythonhosted.org/packages/55/04/5e6de6e6120451ec0c24516c41dbaf80cce1b6451f96561235ef2429da2e/pillow-10.4.0-cp312-cp312-win32.whl", hash = "sha256:7dfecdbad5c301d7b5bde160150b4db4c659cee2b69589705b6f8a0c509d9f42", size = 2235690 },
|
|
2336
|
+
{ url = "https://files.pythonhosted.org/packages/74/0a/d4ce3c44bca8635bd29a2eab5aa181b654a734a29b263ca8efe013beea98/pillow-10.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1d846aea995ad352d4bdcc847535bd56e0fd88d36829d2c90be880ef1ee4668a", size = 2554951 },
|
|
2337
|
+
{ url = "https://files.pythonhosted.org/packages/b5/ca/184349ee40f2e92439be9b3502ae6cfc43ac4b50bc4fc6b3de7957563894/pillow-10.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:e553cad5179a66ba15bb18b353a19020e73a7921296a7979c4a2b7f6a5cd57f9", size = 2243427 },
|
|
2338
|
+
{ url = "https://files.pythonhosted.org/packages/c3/00/706cebe7c2c12a6318aabe5d354836f54adff7156fd9e1bd6c89f4ba0e98/pillow-10.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8bc1a764ed8c957a2e9cacf97c8b2b053b70307cf2996aafd70e91a082e70df3", size = 3525685 },
|
|
2339
|
+
{ url = "https://files.pythonhosted.org/packages/cf/76/f658cbfa49405e5ecbfb9ba42d07074ad9792031267e782d409fd8fe7c69/pillow-10.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6209bb41dc692ddfee4942517c19ee81b86c864b626dbfca272ec0f7cff5d9fb", size = 3374883 },
|
|
2340
|
+
{ url = "https://files.pythonhosted.org/packages/46/2b/99c28c4379a85e65378211971c0b430d9c7234b1ec4d59b2668f6299e011/pillow-10.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bee197b30783295d2eb680b311af15a20a8b24024a19c3a26431ff83eb8d1f70", size = 4339837 },
|
|
2341
|
+
{ url = "https://files.pythonhosted.org/packages/f1/74/b1ec314f624c0c43711fdf0d8076f82d9d802afd58f1d62c2a86878e8615/pillow-10.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef61f5dd14c300786318482456481463b9d6b91ebe5ef12f405afbba77ed0be", size = 4455562 },
|
|
2342
|
+
{ url = "https://files.pythonhosted.org/packages/4a/2a/4b04157cb7b9c74372fa867096a1607e6fedad93a44deeff553ccd307868/pillow-10.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:297e388da6e248c98bc4a02e018966af0c5f92dfacf5a5ca22fa01cb3179bca0", size = 4366761 },
|
|
2343
|
+
{ url = "https://files.pythonhosted.org/packages/ac/7b/8f1d815c1a6a268fe90481232c98dd0e5fa8c75e341a75f060037bd5ceae/pillow-10.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:e4db64794ccdf6cb83a59d73405f63adbe2a1887012e308828596100a0b2f6cc", size = 4536767 },
|
|
2344
|
+
{ url = "https://files.pythonhosted.org/packages/e5/77/05fa64d1f45d12c22c314e7b97398ffb28ef2813a485465017b7978b3ce7/pillow-10.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bd2880a07482090a3bcb01f4265f1936a903d70bc740bfcb1fd4e8a2ffe5cf5a", size = 4477989 },
|
|
2345
|
+
{ url = "https://files.pythonhosted.org/packages/12/63/b0397cfc2caae05c3fb2f4ed1b4fc4fc878f0243510a7a6034ca59726494/pillow-10.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4b35b21b819ac1dbd1233317adeecd63495f6babf21b7b2512d244ff6c6ce309", size = 4610255 },
|
|
2346
|
+
{ url = "https://files.pythonhosted.org/packages/7b/f9/cfaa5082ca9bc4a6de66ffe1c12c2d90bf09c309a5f52b27759a596900e7/pillow-10.4.0-cp313-cp313-win32.whl", hash = "sha256:551d3fd6e9dc15e4c1eb6fc4ba2b39c0c7933fa113b220057a34f4bb3268a060", size = 2235603 },
|
|
2347
|
+
{ url = "https://files.pythonhosted.org/packages/01/6a/30ff0eef6e0c0e71e55ded56a38d4859bf9d3634a94a88743897b5f96936/pillow-10.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:030abdbe43ee02e0de642aee345efa443740aa4d828bfe8e2eb11922ea6a21ea", size = 2554972 },
|
|
2348
|
+
{ url = "https://files.pythonhosted.org/packages/48/2c/2e0a52890f269435eee38b21c8218e102c621fe8d8df8b9dd06fabf879ba/pillow-10.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:5b001114dd152cfd6b23befeb28d7aee43553e2402c9f159807bf55f33af8a8d", size = 2243375 },
|
|
2349
|
+
{ url = "https://files.pythonhosted.org/packages/38/30/095d4f55f3a053392f75e2eae45eba3228452783bab3d9a920b951ac495c/pillow-10.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5b4815f2e65b30f5fbae9dfffa8636d992d49705723fe86a3661806e069352d4", size = 3493889 },
|
|
2350
|
+
{ url = "https://files.pythonhosted.org/packages/f3/e8/4ff79788803a5fcd5dc35efdc9386af153569853767bff74540725b45863/pillow-10.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8f0aef4ef59694b12cadee839e2ba6afeab89c0f39a3adc02ed51d109117b8da", size = 3346160 },
|
|
2351
|
+
{ url = "https://files.pythonhosted.org/packages/d7/ac/4184edd511b14f760c73f5bb8a5d6fd85c591c8aff7c2229677a355c4179/pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4727572e2918acaa9077c919cbbeb73bd2b3ebcfe033b72f858fc9fbef0026", size = 3435020 },
|
|
2352
|
+
{ url = "https://files.pythonhosted.org/packages/da/21/1749cd09160149c0a246a81d646e05f35041619ce76f6493d6a96e8d1103/pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff25afb18123cea58a591ea0244b92eb1e61a1fd497bf6d6384f09bc3262ec3e", size = 3490539 },
|
|
2353
|
+
{ url = "https://files.pythonhosted.org/packages/b6/f5/f71fe1888b96083b3f6dfa0709101f61fc9e972c0c8d04e9d93ccef2a045/pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dc3e2db6ba09ffd7d02ae9141cfa0ae23393ee7687248d46a7507b75d610f4f5", size = 3476125 },
|
|
2354
|
+
{ url = "https://files.pythonhosted.org/packages/96/b9/c0362c54290a31866c3526848583a2f45a535aa9d725fd31e25d318c805f/pillow-10.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02a2be69f9c9b8c1e97cf2713e789d4e398c751ecfd9967c18d0ce304efbf885", size = 3579373 },
|
|
2355
|
+
{ url = "https://files.pythonhosted.org/packages/52/3b/ce7a01026a7cf46e5452afa86f97a5e88ca97f562cafa76570178ab56d8d/pillow-10.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0755ffd4a0c6f267cccbae2e9903d95477ca2f77c4fcf3a3a09570001856c8a5", size = 2554661 },
|
|
2317
2356
|
]
|
|
2318
2357
|
|
|
2319
2358
|
[[package]]
|
httpr-0.1.0/benchmark.jpg
DELETED
|
Binary file
|
httpr-0.1.0/mkdocs.yml
DELETED
httpr-0.1.0/pyproject.toml
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
[build-system]
|
|
2
|
-
requires = ["maturin>=1.5,<2.0"]
|
|
3
|
-
build-backend = "maturin"
|
|
4
|
-
|
|
5
|
-
[project]
|
|
6
|
-
name = "httpr"
|
|
7
|
-
description = "Fast HTTP client for Python"
|
|
8
|
-
requires-python = ">=3.9"
|
|
9
|
-
license = { text = "MIT License" }
|
|
10
|
-
keywords = ["python", "request"]
|
|
11
|
-
authors = [{ name = "thomasht86" }]
|
|
12
|
-
classifiers = [
|
|
13
|
-
"Programming Language :: Rust",
|
|
14
|
-
"Programming Language :: Python :: 3",
|
|
15
|
-
"Programming Language :: Python :: 3 :: Only",
|
|
16
|
-
"Programming Language :: Python :: 3.8",
|
|
17
|
-
"Programming Language :: Python :: 3.9",
|
|
18
|
-
"Programming Language :: Python :: 3.10",
|
|
19
|
-
"Programming Language :: Python :: 3.11",
|
|
20
|
-
"Programming Language :: Python :: 3.12",
|
|
21
|
-
"Programming Language :: Python :: 3.13",
|
|
22
|
-
"Programming Language :: Python :: Implementation :: CPython",
|
|
23
|
-
"Programming Language :: Python :: Implementation :: PyPy",
|
|
24
|
-
"Topic :: Internet :: WWW/HTTP",
|
|
25
|
-
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
26
|
-
]
|
|
27
|
-
dynamic = ["version"]
|
|
28
|
-
|
|
29
|
-
dependencies = []
|
|
30
|
-
|
|
31
|
-
[project.optional-dependencies]
|
|
32
|
-
dev = [
|
|
33
|
-
"certifi",
|
|
34
|
-
"pytest>=8.1.1",
|
|
35
|
-
"pytest-asyncio>=0.25.3",
|
|
36
|
-
"typing_extensions; python_version <= '3.11'", # for Unpack[TypedDict]
|
|
37
|
-
"mypy>=1.14.1",
|
|
38
|
-
"ruff>=0.9.2",
|
|
39
|
-
"maturin",
|
|
40
|
-
"trustme",
|
|
41
|
-
]
|
|
42
|
-
docs = ["mkdocs-material"]
|
|
43
|
-
scratch = [
|
|
44
|
-
"httpr[dev]",
|
|
45
|
-
"matplotlib",
|
|
46
|
-
"pandas",
|
|
47
|
-
"jupyter",
|
|
48
|
-
"ipykernel",
|
|
49
|
-
"httpx",
|
|
50
|
-
"gunicorn",
|
|
51
|
-
"uvicorn",
|
|
52
|
-
"trustme",
|
|
53
|
-
"starlette",
|
|
54
|
-
"fastapi",
|
|
55
|
-
]
|
|
56
|
-
|
|
57
|
-
[tool.maturin]
|
|
58
|
-
features = ["pyo3/extension-module"]
|
|
59
|
-
|
|
60
|
-
[tool.ruff]
|
|
61
|
-
line-length = 120
|
|
62
|
-
exclude = ["tests"]
|
|
63
|
-
|
|
64
|
-
[tool.ruff.lint]
|
|
65
|
-
select = [
|
|
66
|
-
"E", # pycodestyle
|
|
67
|
-
"F", # Pyflakes
|
|
68
|
-
"UP", # pyupgrade
|
|
69
|
-
"B", # flake8-bugbear
|
|
70
|
-
"SIM", # flake8-simplify
|
|
71
|
-
"I", # isort
|
|
72
|
-
]
|
|
73
|
-
|
|
74
|
-
[tool.mypy]
|
|
75
|
-
python_version = "3.8"
|
|
76
|
-
|
|
77
|
-
[tool.uv]
|
|
78
|
-
# Rebuild package when any rust files change
|
|
79
|
-
cache-keys = [
|
|
80
|
-
{ file = "pyproject.toml" },
|
|
81
|
-
{ file = "rust/Cargo.toml" },
|
|
82
|
-
{ file = "**/*.rs" },
|
|
83
|
-
]
|
|
84
|
-
# Uncomment to build rust code in development mode
|
|
85
|
-
# config-settings = { build-args = '--profile=dev' }
|
|
86
|
-
[tool.uv.workspace]
|
|
87
|
-
members = ["benchmark"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|