pyreqwest 0.5.0__cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

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 pyreqwest might be problematic. Click here for more details.

Files changed (41) hide show
  1. pyreqwest/__init__.py +3 -0
  2. pyreqwest/__init__.pyi +1 -0
  3. pyreqwest/_pyreqwest.cpython-311-powerpc64le-linux-gnu.so +0 -0
  4. pyreqwest/bytes/__init__.py +16 -0
  5. pyreqwest/bytes/__init__.pyi +106 -0
  6. pyreqwest/client/__init__.py +21 -0
  7. pyreqwest/client/__init__.pyi +341 -0
  8. pyreqwest/client/types.py +54 -0
  9. pyreqwest/cookie/__init__.py +5 -0
  10. pyreqwest/cookie/__init__.pyi +174 -0
  11. pyreqwest/exceptions/__init__.py +193 -0
  12. pyreqwest/http/__init__.py +19 -0
  13. pyreqwest/http/__init__.pyi +344 -0
  14. pyreqwest/middleware/__init__.py +5 -0
  15. pyreqwest/middleware/__init__.pyi +12 -0
  16. pyreqwest/middleware/asgi/__init__.py +5 -0
  17. pyreqwest/middleware/asgi/asgi.py +168 -0
  18. pyreqwest/middleware/types.py +26 -0
  19. pyreqwest/multipart/__init__.py +5 -0
  20. pyreqwest/multipart/__init__.pyi +75 -0
  21. pyreqwest/proxy/__init__.py +5 -0
  22. pyreqwest/proxy/__init__.pyi +47 -0
  23. pyreqwest/py.typed +0 -0
  24. pyreqwest/pytest_plugin/__init__.py +8 -0
  25. pyreqwest/pytest_plugin/internal/__init__.py +0 -0
  26. pyreqwest/pytest_plugin/internal/assert_eq.py +6 -0
  27. pyreqwest/pytest_plugin/internal/assert_message.py +123 -0
  28. pyreqwest/pytest_plugin/internal/matcher.py +34 -0
  29. pyreqwest/pytest_plugin/internal/plugin.py +15 -0
  30. pyreqwest/pytest_plugin/mock.py +493 -0
  31. pyreqwest/pytest_plugin/types.py +26 -0
  32. pyreqwest/request/__init__.py +25 -0
  33. pyreqwest/request/__init__.pyi +200 -0
  34. pyreqwest/response/__init__.py +19 -0
  35. pyreqwest/response/__init__.pyi +157 -0
  36. pyreqwest/types.py +12 -0
  37. pyreqwest-0.5.0.dist-info/METADATA +106 -0
  38. pyreqwest-0.5.0.dist-info/RECORD +41 -0
  39. pyreqwest-0.5.0.dist-info/WHEEL +4 -0
  40. pyreqwest-0.5.0.dist-info/entry_points.txt +2 -0
  41. pyreqwest-0.5.0.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,200 @@
1
+ from datetime import timedelta
2
+ from typing import Any, Self
3
+
4
+ from pyreqwest.bytes import Bytes
5
+ from pyreqwest.http import HeaderMap, Url
6
+ from pyreqwest.middleware.types import Middleware, SyncMiddleware
7
+ from pyreqwest.multipart import FormBuilder
8
+ from pyreqwest.response import Response, SyncResponse
9
+ from pyreqwest.types import ExtensionsType, FormParams, HeadersType, QueryParams, Stream, SyncStream
10
+
11
+ class Request:
12
+ @property
13
+ def method(self) -> str:
14
+ """Get the HTTP method. (e.g. GET, POST)."""
15
+
16
+ @method.setter
17
+ def method(self, value: str) -> None:
18
+ """Set the HTTP method."""
19
+
20
+ @property
21
+ def url(self) -> Url:
22
+ """Get the url."""
23
+
24
+ @url.setter
25
+ def url(self, value: Url | str) -> None:
26
+ """Set the url."""
27
+
28
+ @property
29
+ def headers(self) -> HeaderMap:
30
+ """Get the headers. This is not a copy. Modifying it modifies the request."""
31
+
32
+ @headers.setter
33
+ def headers(self, headers: HeadersType) -> None:
34
+ """Replace headers. Given value is copied."""
35
+
36
+ @property
37
+ def body(self) -> "RequestBody | None":
38
+ """Get the body."""
39
+
40
+ @body.setter
41
+ def body(self, value: "RequestBody | None") -> None:
42
+ """Set the body or remove body."""
43
+
44
+ @property
45
+ def extensions(self) -> dict[str, Any]:
46
+ """Arbitrary per-request data storage. Useful for passing through data to middleware and response."""
47
+
48
+ @extensions.setter
49
+ def extensions(self, value: ExtensionsType) -> None:
50
+ """Replace extensions. Given value is shallow copied."""
51
+
52
+ def copy(self) -> Self:
53
+ """Copy the request. Byte-bodies are zero-copied. Stream bodies are re-created via their own copy logic."""
54
+
55
+ def __copy__(self) -> Self: ...
56
+ def repr_full(self) -> str:
57
+ """Verbose repr including non-sensitive headers and body summary."""
58
+
59
+ @classmethod
60
+ def from_request_and_body(cls, request: Self, body: "RequestBody | None") -> Self:
61
+ """Clone request with a new body instance."""
62
+
63
+ class ConsumedRequest(Request):
64
+ """Request that will fully read the response body when sent."""
65
+
66
+ async def send(self) -> Response:
67
+ """Execute the request returning a Response with fully read response body."""
68
+
69
+ class StreamRequest(Request):
70
+ """Request whose response body is streamed."""
71
+
72
+ async def __aenter__(self) -> Response:
73
+ """Execute the request returning a Response with streaming response body."""
74
+
75
+ async def __aexit__(self, *args: object, **kwargs: Any) -> None:
76
+ """Close streaming response."""
77
+
78
+ @property
79
+ def read_buffer_limit(self) -> int:
80
+ """Max bytes buffered when reading streamed body."""
81
+
82
+ class SyncConsumedRequest(Request):
83
+ """Synchronous request that will fully read the response body when sent."""
84
+
85
+ def send(self) -> SyncResponse:
86
+ """Execute the request returning a Response with fully read response body."""
87
+
88
+ class SyncStreamRequest(Request):
89
+ """Synchronous request whose response body is streamed."""
90
+
91
+ def __enter__(self) -> SyncResponse:
92
+ """Execute the request returning a Response with streaming response body."""
93
+
94
+ def __exit__(self, *args: object, **kwargs: Any) -> None:
95
+ """Close streaming response."""
96
+
97
+ @property
98
+ def read_buffer_limit(self) -> int:
99
+ """Max bytes buffered when reading streamed body."""
100
+
101
+ class RequestBody:
102
+ """Represents request body content (bytes, text, or async stream). Bodies are single-use."""
103
+
104
+ @staticmethod
105
+ def from_text(body: str) -> "RequestBody":
106
+ """Create body from text."""
107
+
108
+ @staticmethod
109
+ def from_bytes(body: bytes | bytearray | memoryview) -> "RequestBody":
110
+ """Create body from raw bytes."""
111
+
112
+ @staticmethod
113
+ def from_stream(stream: Stream) -> "RequestBody":
114
+ """Create body from async byte stream."""
115
+
116
+ def copy_bytes(self) -> Bytes | None:
117
+ """Return bytes zero-copy. None for stream."""
118
+
119
+ def get_stream(self) -> Stream | None:
120
+ """Return underlying stream if streaming body else None."""
121
+
122
+ def __copy__(self) -> Self:
123
+ """Copy body (Zero-copied bytes. Stream supplies its own copy)."""
124
+
125
+ class BaseRequestBuilder:
126
+ def error_for_status(self, enable: bool) -> Self:
127
+ """Enable automatic HTTP error raising (4xx/5xx)."""
128
+
129
+ def header(self, name: str, value: str) -> Self:
130
+ """Append single header value."""
131
+
132
+ def headers(self, headers: HeadersType) -> Self:
133
+ """Merge multiple headers (mapping or sequence)."""
134
+
135
+ def basic_auth(self, username: str, password: str | None) -> Self:
136
+ """Add Basic Authorization header."""
137
+
138
+ def bearer_auth(self, token: str) -> Self:
139
+ """Add Bearer token Authorization header."""
140
+
141
+ def body_bytes(self, body: bytes | bytearray | memoryview) -> Self:
142
+ """Set body from raw bytes."""
143
+
144
+ def body_text(self, body: str) -> Self:
145
+ """Set body from text."""
146
+
147
+ def body_json(self, body: Any) -> Self:
148
+ """Serialize body as JSON. Sets Content-Type header."""
149
+
150
+ def query(self, query: QueryParams) -> Self:
151
+ """Add/merge query parameters."""
152
+
153
+ def timeout(self, timeout: timedelta) -> Self:
154
+ """Set per-request total timeout."""
155
+
156
+ def multipart(self, multipart: FormBuilder) -> Self:
157
+ """Attach multipart form body builder."""
158
+
159
+ def form(self, form: FormParams) -> Self:
160
+ """Set application/x-www-form-urlencoded body."""
161
+
162
+ def extensions(self, extensions: ExtensionsType) -> Self:
163
+ """Arbitrary per-request data storage. Useful for passing through data to middleware and response."""
164
+
165
+ def streamed_read_buffer_limit(self, value: int) -> Self:
166
+ """Max bytes buffered when reading streamed body."""
167
+
168
+ @staticmethod
169
+ def default_streamed_read_buffer_limit() -> int:
170
+ """Default max bytes buffered when reading streamed body."""
171
+
172
+ class RequestBuilder(BaseRequestBuilder):
173
+ """Request builder. Use `build()` or `build_streamed()` to create the request to send."""
174
+
175
+ def build(self) -> ConsumedRequest:
176
+ """Build request that full reads the response body on send()."""
177
+
178
+ def build_streamed(self) -> StreamRequest:
179
+ """Build request whose response body is streamed."""
180
+
181
+ def body_stream(self, stream: Stream) -> Self:
182
+ """Set streaming request body."""
183
+
184
+ def with_middleware(self, middleware: Middleware) -> Self:
185
+ """Register a middleware component (added after client level middlewares, executed in chain order)."""
186
+
187
+ class SyncRequestBuilder(BaseRequestBuilder):
188
+ """Synchronous request builder. Use `build()` or `build_streamed()` to create the request to send."""
189
+
190
+ def build(self) -> SyncConsumedRequest:
191
+ """Build request that full reads the response body on send()."""
192
+
193
+ def build_streamed(self) -> SyncStreamRequest:
194
+ """Build request whose response body is streamed."""
195
+
196
+ def body_stream(self, stream: SyncStream) -> Self:
197
+ """Set streaming request body."""
198
+
199
+ def with_middleware(self, middleware: SyncMiddleware) -> Self:
200
+ """Register a middleware component (added after client level middlewares, executed in chain order)."""
@@ -0,0 +1,19 @@
1
+ """Response classes and builders."""
2
+
3
+ from pyreqwest._pyreqwest.response import (
4
+ BaseResponse,
5
+ Response,
6
+ ResponseBodyReader,
7
+ ResponseBuilder,
8
+ SyncResponse,
9
+ SyncResponseBodyReader,
10
+ )
11
+
12
+ __all__ = [ # noqa: RUF022
13
+ "Response",
14
+ "SyncResponse",
15
+ "BaseResponse",
16
+ "ResponseBuilder",
17
+ "ResponseBodyReader",
18
+ "SyncResponseBodyReader",
19
+ ]
@@ -0,0 +1,157 @@
1
+ from typing import Any, Self
2
+
3
+ from pyreqwest.bytes import Bytes
4
+ from pyreqwest.http import HeaderMap, Mime
5
+ from pyreqwest.types import ExtensionsType, HeadersType, Stream
6
+
7
+ class BaseResponse:
8
+ @property
9
+ def status(self) -> int:
10
+ """HTTP status code (e.g. 200, 404)."""
11
+
12
+ @status.setter
13
+ def status(self, value: int) -> None:
14
+ """Set HTTP status code."""
15
+
16
+ @property
17
+ def headers(self) -> HeaderMap:
18
+ """Get the headers. This is not a copy. Modifying it modifies the response.
19
+ You can also use `get_header` or `get_header_all` to access headers.
20
+ """
21
+
22
+ @headers.setter
23
+ def headers(self, headers: HeadersType) -> None:
24
+ """Replace headers. Given value is copied."""
25
+
26
+ @property
27
+ def extensions(self) -> dict[str, Any]:
28
+ """Arbitrary per-request data storage. This is the data that was passed via request and middlewares.
29
+ This is not a copy. Modifying it modifies the response.
30
+ """
31
+
32
+ @extensions.setter
33
+ def extensions(self, value: ExtensionsType) -> None:
34
+ """Replace extensions. Given value is shallow copied."""
35
+
36
+ @property
37
+ def version(self) -> str:
38
+ """Used HTTP version (e.g. 'HTTP/1.1', 'HTTP/2.0')."""
39
+
40
+ @version.setter
41
+ def version(self, value: str) -> None:
42
+ """Set HTTP version."""
43
+
44
+ def error_for_status(self) -> None:
45
+ """Raise StatusError for 4xx/5xx."""
46
+
47
+ def get_header(self, key: str) -> str | None:
48
+ """Return first matching header value else None (case-insensitive)."""
49
+
50
+ def get_header_all(self, key: str) -> list[str]:
51
+ """Return all values for header name (case-insensitive). Empty if absent."""
52
+
53
+ def content_type_mime(self) -> Mime | None:
54
+ """Parsed Content-Type header as Mime or None if absent."""
55
+
56
+ class Response(BaseResponse):
57
+ """Asynchronous response with optionally streamed body."""
58
+
59
+ async def bytes(self) -> Bytes:
60
+ """Return entire body as bytes (cached after first read)."""
61
+
62
+ async def json(self) -> Any:
63
+ """Decode body as JSON (underlying bytes cached after first read). Uses serde for decoding.
64
+ User can provide custom deserializer via `ClientBuilder.json_handler`.
65
+ """
66
+
67
+ async def text(self) -> str:
68
+ """Decode body to text (underlying bytes cached after first read). Uses charset from Content-Type."""
69
+
70
+ @property
71
+ def body_reader(self) -> "ResponseBodyReader":
72
+ """Access streaming reader. Using bytes(), json() or text() is not allowed after reading body partially."""
73
+
74
+ class SyncResponse(BaseResponse):
75
+ """Synchronous response variant."""
76
+
77
+ def bytes(self) -> Bytes:
78
+ """Return entire body as bytes (cached after first read)."""
79
+
80
+ def json(self) -> Any:
81
+ """Decode body as JSON (underlying bytes cached after first read). Uses serde for decoding.
82
+ User can provide custom deserializer via `SyncClientBuilder.json_handler`.
83
+ """
84
+
85
+ def text(self) -> str:
86
+ """Decode body to text (underlying bytes cached after first read). Uses charset from Content-Type."""
87
+
88
+ @property
89
+ def body_reader(self) -> "SyncResponseBodyReader":
90
+ """Access streaming reader. Using bytes(), json() or text() is not allowed after reading body partially."""
91
+
92
+ class ResponseBuilder:
93
+ """Programmatic response construction (for testing, middlewares, manual responses)."""
94
+
95
+ def __init__(self) -> None:
96
+ """Create empty response builder (defaults: 200, HTTP/1.1, empty headers/body)."""
97
+
98
+ async def build(self) -> Response:
99
+ """Build asynchronous response."""
100
+
101
+ def build_sync(self) -> SyncResponse:
102
+ """Build synchronous response (disallows async streams)."""
103
+
104
+ def status(self, value: int) -> Self:
105
+ """Set status code."""
106
+
107
+ def version(self, value: str) -> Self:
108
+ """Set HTTP version string."""
109
+
110
+ def header(self, name: str, value: str) -> Self:
111
+ """Append single header value (multiple allowed)."""
112
+
113
+ def headers(self, headers: HeadersType) -> Self:
114
+ """Merge multiple headers (mapping or sequence)."""
115
+
116
+ def extensions(self, extensions: ExtensionsType) -> Self:
117
+ """Set extensions."""
118
+
119
+ def body_bytes(self, body: bytes | bytearray | memoryview) -> Self:
120
+ """Set fixed byte body (zero-copied where possible)."""
121
+
122
+ def body_text(self, body: str) -> Self:
123
+ """Set text body (UTF-8 encoded)."""
124
+
125
+ def body_json(self, body: Any) -> Self:
126
+ """Serialize body to JSON (sets Content-Type). Uses serde for serialization."""
127
+
128
+ def body_stream(self, stream: Stream) -> Self:
129
+ """Set streaming body. `build_sync` can not be mixed with async streams."""
130
+
131
+ def copy(self) -> Self:
132
+ """Copy builder."""
133
+ def __copy__(self) -> Self: ...
134
+
135
+ class ResponseBodyReader:
136
+ """Streaming body reader."""
137
+
138
+ async def bytes(self) -> Bytes:
139
+ """Read remaining stream fully and return bytes (caches)."""
140
+
141
+ async def read(self, amount: int = ...) -> Bytes | None:
142
+ """Read up to amount bytes (or default chunk size) from stream. None when stream is exhausted."""
143
+
144
+ async def read_chunk(self) -> Bytes | None:
145
+ """Return next raw chunk. Sizes are arbitrary and depend on OS. None when stream is exhausted."""
146
+
147
+ class SyncResponseBodyReader:
148
+ """Streaming body reader."""
149
+
150
+ def bytes(self) -> Bytes:
151
+ """Read remaining stream fully and return bytes (caches)."""
152
+
153
+ def read(self, amount: int = ...) -> Bytes | None:
154
+ """Read up to amount bytes (or default chunk size) from stream. None when stream is exhausted."""
155
+
156
+ def read_chunk(self) -> Bytes | None:
157
+ """Return next raw chunk. Sizes are arbitrary and depend on OS. None when stream is exhausted."""
pyreqwest/types.py ADDED
@@ -0,0 +1,12 @@
1
+ """Common types and interfaces used in the library."""
2
+
3
+ from collections.abc import AsyncIterable, Iterable, Mapping, Sequence
4
+ from typing import Any, TypeAlias
5
+
6
+ HeadersType: TypeAlias = Mapping[str, str] | Sequence[tuple[str, str]]
7
+ QueryParams: TypeAlias = Mapping[str, Any] | Sequence[tuple[str, Any]]
8
+ FormParams: TypeAlias = Mapping[str, Any] | Sequence[tuple[str, Any]]
9
+ ExtensionsType: TypeAlias = Mapping[str, Any] | Sequence[tuple[str, Any]]
10
+
11
+ SyncStream: TypeAlias = Iterable[bytes] | Iterable[bytearray] | Iterable[memoryview]
12
+ Stream: TypeAlias = AsyncIterable[bytes] | AsyncIterable[bytearray] | AsyncIterable[memoryview] | SyncStream
@@ -0,0 +1,106 @@
1
+ Metadata-Version: 2.4
2
+ Name: pyreqwest
3
+ Version: 0.5.0
4
+ Classifier: Development Status :: 4 - Beta
5
+ Classifier: Programming Language :: Python
6
+ Classifier: Programming Language :: Python :: 3
7
+ Classifier: Programming Language :: Python :: 3 :: Only
8
+ Classifier: Programming Language :: Python :: 3.11
9
+ Classifier: Programming Language :: Python :: 3.12
10
+ Classifier: Programming Language :: Python :: 3.13
11
+ Classifier: Programming Language :: Python :: 3.14
12
+ Classifier: Programming Language :: Python :: Implementation :: CPython
13
+ Classifier: Programming Language :: Python :: Implementation :: PyPy
14
+ Classifier: Programming Language :: Python :: Implementation :: GraalPy
15
+ Classifier: Programming Language :: Rust
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: Intended Audience :: Information Technology
18
+ Classifier: Operating System :: POSIX :: Linux
19
+ Classifier: Operating System :: Microsoft :: Windows
20
+ Classifier: Operating System :: MacOS
21
+ Classifier: Typing :: Typed
22
+ License-File: LICENSE
23
+ Summary: Powerful and fast Rust based HTTP client
24
+ Author-email: Markus Sintonen <pyreqwest@gmail.com>
25
+ Requires-Python: >=3.11
26
+ Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
27
+ Project-URL: Homepage, https://github.com/MarkusSintonen/pyreqwest
28
+ Project-URL: Source, https://github.com/MarkusSintonen/pyreqwest
29
+
30
+ <p align="center">
31
+ <img width="250" alt="logo" src="https://raw.githubusercontent.com/MarkusSintonen/pyreqwest/refs/heads/main/docs/logo.png" />
32
+ </p>
33
+
34
+ ---
35
+
36
+ pyreqwest - Powerful and fast Rust based HTTP client. Built on top of and inspired by [reqwest](https://github.com/seanmonstar/reqwest).
37
+
38
+ ## Why
39
+
40
+ - No reinvention of the wheel - built on top of widely used reqwest and other Rust HTTP crates
41
+ - Secure and fast - no C-extension code, no Python code/dependencies, no `unsafe` code
42
+ - Ergonomic and easy to use - similar API as in reqwest, fully type-annotated
43
+ - Testing ergonomics - mocking included, can also connect into ASGI apps
44
+
45
+ Using this is a good choice when:
46
+
47
+ - You care about throughput and latency, especially in high concurrency scenarios
48
+ - You want a single solution to serve all your HTTP client needs
49
+
50
+ This is not a good choice when:
51
+
52
+ - You want a pure Python solution allowing debugging of the HTTP client internals
53
+ - You use alternative Python implementations or Python version older than 3.11
54
+
55
+ ## Features
56
+
57
+ - High performance, see [notes](https://github.com/MarkusSintonen/pyreqwest/blob/main/docs/performance.md) and [benchmarks](https://github.com/MarkusSintonen/pyreqwest/blob/main/docs/benchmarks.md)
58
+ - Asynchronous and synchronous HTTP clients
59
+ - Customizable via middlewares and custom JSON serializers
60
+ - Ergonomic as `reqwest`
61
+ - HTTP/1.1 and HTTP/2 support (also HTTP/3 when it [stabilizes](https://docs.rs/reqwest/latest/reqwest/#unstable-features))
62
+ - Mocking and testing utilities (can also connect to ASGI apps)
63
+ - Fully type-safe with Python type hints
64
+ - Full test coverage
65
+ - Free threading, see [notes](https://github.com/MarkusSintonen/pyreqwest/blob/main/docs/performance.md#python-313-free-threading)
66
+
67
+ ### Standard HTTP features you would expect
68
+
69
+ - HTTPS support (using [rustls](https://github.com/rustls/rustls))
70
+ - Request and response body streaming
71
+ - Connection pooling
72
+ - JSON, URLs, Headers, Cookies etc. (all serializers in Rust)
73
+ - Automatic decompression (zstd, gzip, brotli, deflate)
74
+ - Automatic response decoding (charset detection)
75
+ - Multipart form support
76
+ - Proxy support
77
+ - Redirects
78
+ - Timeouts
79
+ - Authentication (Basic, Bearer)
80
+ - Cookie management
81
+
82
+ ## Quickstart
83
+
84
+ ```python
85
+ # uv add pyreqwest
86
+
87
+ from pyreqwest.client import ClientBuilder, SyncClientBuilder
88
+
89
+ async def example_async():
90
+ async with ClientBuilder().error_for_status(True).build() as client:
91
+ response = await client.get("https://httpbun.com/get").query({"q": "val"}).build().send()
92
+ print(await response.json())
93
+
94
+ def example_sync():
95
+ with SyncClientBuilder().error_for_status(True).build() as client:
96
+ print(client.get("https://httpbun.com/get").query({"q": "val"}).build().send().json())
97
+ ```
98
+
99
+ Context manager usage is optional, but recommended. Also `close()` methods are available.
100
+
101
+ ## Documentation
102
+
103
+ See [docs](https://markussintonen.github.io/pyreqwest/pyreqwest.html)
104
+
105
+ See [examples](https://github.com/MarkusSintonen/pyreqwest/tree/main/examples)
106
+
@@ -0,0 +1,41 @@
1
+ pyreqwest-0.5.0.dist-info/METADATA,sha256=13eNxIuH0GIxErPMVAR-j7iZG2MC7U3XYlzg8jJR1Sw,4315
2
+ pyreqwest-0.5.0.dist-info/WHEEL,sha256=uV83QoQqnjBLzFJhqOOim9LCucwNpoYmeL9jKwT6K0E,131
3
+ pyreqwest-0.5.0.dist-info/entry_points.txt,sha256=x6BM9g8m805tw6VqKvSe_Kgd2qp4Eq3moyIoFnETeoE,61
4
+ pyreqwest-0.5.0.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
5
+ pyreqwest/__init__.py,sha256=AqtJmAtOEQ6kYGY2_Qzw2f_q5K3Q5PN-TpOmIKaeiEM,86
6
+ pyreqwest/__init__.pyi,sha256=Y25n44pyE3vp92MiABKrcK3IWRyQ1JG1rZ4Ufqy2nC0,17
7
+ pyreqwest/_pyreqwest.cpython-311-powerpc64le-linux-gnu.so,sha256=tVckJTQhW7QtN85QZCuLOg00nsk79HcBWllcesWUMyc,7811888
8
+ pyreqwest/bytes/__init__.py,sha256=uzB8cxWbBizu0kyrdXhmnwWKWdwBcVIv4mgEhCR1LMs,465
9
+ pyreqwest/bytes/__init__.pyi,sha256=bttN8uCg7K3gW90FBgPP4vbtNrBCOwqX4v7LAK-T1pU,4569
10
+ pyreqwest/client/__init__.py,sha256=tPfCyh-HJJEepvGMvLSLjKkZySTKsATsnbJziT_P4IM,369
11
+ pyreqwest/client/__init__.pyi,sha256=y9AfLH2Dhw8UOnnia1hk1qVGjAGW43LGT3dwqZfEVm4,14231
12
+ pyreqwest/client/types.py,sha256=CpfplqBGOyvpZNpwbOqal89dBztZlZTYuX-nM1Qrwrg,1475
13
+ pyreqwest/cookie/__init__.py,sha256=whcJaTtVHgqH2n_lvGYXYHP7D9BolDU6SvKjuKpewAs,128
14
+ pyreqwest/cookie/__init__.pyi,sha256=YCOI79evRpc7xmSpY6q1MsQMCHSucGDpLmsk0ZqfXN4,6401
15
+ pyreqwest/exceptions/__init__.py,sha256=LWD8I6hFsw0ogHwpobPVcO5tfFRhRg0rPF2Bs64XjuI,5319
16
+ pyreqwest/http/__init__.py,sha256=cXbHvSjZhMc7Zi_8JWjEn9GVzT6HG6BBbuk0xwSqMiA,334
17
+ pyreqwest/http/__init__.pyi,sha256=xmG6eD1Uz0Y1nRgPb_zxUMKc57rgxWq58W5nsCRg9V0,13798
18
+ pyreqwest/middleware/__init__.py,sha256=0i12zyrey3OmmKLtYRLTK4goC7QHWi0Di5erhe4VYHw,118
19
+ pyreqwest/middleware/__init__.pyi,sha256=dkrwXkePVkvQNa4xe0l0-L-4WL3VsrNdJOO1-zNGApo,476
20
+ pyreqwest/middleware/asgi/__init__.py,sha256=jLj4n6F4O2SKOl6HyufmSEvldDOQ1seWtcZPLOxZCyw,95
21
+ pyreqwest/middleware/asgi/asgi.py,sha256=-sfreLfoAvfLxTFGaxJwsQ8wKDJnUZ8LdYe8N_37weA,6464
22
+ pyreqwest/middleware/types.py,sha256=eeJ69Tqt0lr7k0XJncnYrvdkGdc_jgcytRMHKfNz260,1011
23
+ pyreqwest/multipart/__init__.py,sha256=3UFqwbotg9XICgMW40UsaHoqZSQCcmgOl18oPMnIN94,146
24
+ pyreqwest/multipart/__init__.pyi,sha256=aUh8Ubc4EHc5IYXjJKhfldpd9oN752kgdFrDWNmfuGI,2669
25
+ pyreqwest/proxy/__init__.py,sha256=cMc1OIXi8c1_aauFNECcQI1kVoNyJHqLwVi_xHSsIs4,102
26
+ pyreqwest/proxy/__init__.pyi,sha256=bcPG1KqlCWYI4eNewZBt1MFmV1vZAefr5meLtu4KJZs,1653
27
+ pyreqwest/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
+ pyreqwest/pytest_plugin/__init__.py,sha256=gFpygM4ekWY51fmQqsrIhTUf_qtaC1MIazcdE0JtOnU,140
29
+ pyreqwest/pytest_plugin/internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
+ pyreqwest/pytest_plugin/internal/assert_eq.py,sha256=j4bEJPHWZvLAvSKqS3eCFViI0X8phvyfiBu_N4GBNsw,171
31
+ pyreqwest/pytest_plugin/internal/assert_message.py,sha256=oRkvzpIFw69rOaGTYBFGd8gP1Piut_RpG8G51OhYbes,4853
32
+ pyreqwest/pytest_plugin/internal/matcher.py,sha256=aB08rUdI3rLQL2pMxerYAD-S8p1TeFUl36i0G2-tdgs,1221
33
+ pyreqwest/pytest_plugin/internal/plugin.py,sha256=NkneUC5Ui-1ATlrG0q-R4_xdkA_Ou3UEF3t6qAlhS_M,448
34
+ pyreqwest/pytest_plugin/mock.py,sha256=f3Zdy0CAlPc4RVZcSktPU6WfrhAmCtbzZnZyxizizqI,20315
35
+ pyreqwest/pytest_plugin/types.py,sha256=_PvM5c7pkjf0tmC_ozE8wO1ssMNTy7ZX49AWY9zCo1E,884
36
+ pyreqwest/request/__init__.py,sha256=D5JI5nbfJgBgnGK_2fxCR1bPjGhy-yr1U4PoPY_RtsM,504
37
+ pyreqwest/request/__init__.pyi,sha256=UB9IMIep6xwCvinv7OD9lNTNYLw-kkxdVMEqvVDRFkk,7149
38
+ pyreqwest/response/__init__.py,sha256=u1M-aMKJdS3EQ9NqANnpnZ4S2XeWsM2ncd73Oj7T1_E,373
39
+ pyreqwest/response/__init__.pyi,sha256=8hebHvfuWadg4zi0esEMJikTrXE296DlWHbYGGkLNfQ,5737
40
+ pyreqwest/types.py,sha256=10lGx5uugbo5awMz6nNOcuIsyeG3NIB7DqQHiPbOHLk,643
41
+ pyreqwest-0.5.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: maturin (1.9.6)
3
+ Root-Is-Purelib: false
4
+ Tag: cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le
@@ -0,0 +1,2 @@
1
+ [pytest11]
2
+ pyreqwest=pyreqwest.pytest_plugin.internal.plugin