httpware 0.15.2__tar.gz → 0.16.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.
- {httpware-0.15.2 → httpware-0.16.0}/PKG-INFO +2 -1
- {httpware-0.15.2 → httpware-0.16.0}/pyproject.toml +6 -1
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/middleware/resilience/_event_loop_guard.py +3 -3
- {httpware-0.15.2 → httpware-0.16.0}/README.md +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/__init__.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/_internal/__init__.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/_internal/body_cap.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/_internal/exception_mapping.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/_internal/import_checker.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/_internal/observability.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/_internal/redaction.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/_internal/status.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/client.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/decoders/__init__.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/decoders/_caching.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/decoders/_resolver.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/decoders/msgspec.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/decoders/pydantic.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/errors.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/middleware/__init__.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/middleware/chain.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/middleware/resilience/__init__.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/middleware/resilience/_backoff.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/middleware/resilience/budget.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/middleware/resilience/bulkhead.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/middleware/resilience/circuit_breaker.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/middleware/resilience/retry.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/middleware/resilience/timeout.py +0 -0
- {httpware-0.15.2 → httpware-0.16.0}/src/httpware/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: httpware
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.0
|
|
4
4
|
Summary: Python HTTP client framework with sync & async clients and built-in resilience
|
|
5
5
|
Keywords: http-client,httpx,async,asyncio,resilience,retry,circuit-breaker,bulkhead,middleware,pydantic,msgspec,python
|
|
6
6
|
Author: Artur Shiriev
|
|
@@ -12,6 +12,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.14
|
|
15
|
+
Classifier: Programming Language :: Python :: Free Threading :: 2 - Beta
|
|
15
16
|
Classifier: Typing :: Typed
|
|
16
17
|
Classifier: Topic :: Software Development :: Libraries
|
|
17
18
|
Classifier: Topic :: Internet :: WWW/HTTP
|
|
@@ -26,12 +26,13 @@ classifiers = [
|
|
|
26
26
|
"Programming Language :: Python :: 3.12",
|
|
27
27
|
"Programming Language :: Python :: 3.13",
|
|
28
28
|
"Programming Language :: Python :: 3.14",
|
|
29
|
+
"Programming Language :: Python :: Free Threading :: 2 - Beta",
|
|
29
30
|
"Typing :: Typed",
|
|
30
31
|
"Topic :: Software Development :: Libraries",
|
|
31
32
|
"Topic :: Internet :: WWW/HTTP",
|
|
32
33
|
"Framework :: AsyncIO",
|
|
33
34
|
]
|
|
34
|
-
version = "0.
|
|
35
|
+
version = "0.16.0"
|
|
35
36
|
dependencies = [
|
|
36
37
|
"httpx2>=2.0.0,<3.0",
|
|
37
38
|
]
|
|
@@ -102,7 +103,11 @@ addopts = "--cov=. --cov-report term-missing --cov-fail-under=100"
|
|
|
102
103
|
asyncio_mode = "auto"
|
|
103
104
|
pythonpath = ["src"]
|
|
104
105
|
asyncio_default_fixture_loop_scope = "function"
|
|
106
|
+
markers = [
|
|
107
|
+
"stress: concurrency stress test; proves thread-safety under free-threaded CPython (3.14t). Runs under the GIL too, so it counts toward coverage.",
|
|
108
|
+
]
|
|
105
109
|
|
|
106
110
|
[tool.coverage]
|
|
107
111
|
run.concurrency = ["thread"]
|
|
112
|
+
run.omit = ["benchmarks/*"]
|
|
108
113
|
report.exclude_also = ["if typing.TYPE_CHECKING:", 'pytest\.fail\(']
|
|
@@ -30,8 +30,8 @@ def check_event_loop(
|
|
|
30
30
|
cached = get_loop()
|
|
31
31
|
if cached is None:
|
|
32
32
|
set_loop(current)
|
|
33
|
-
# pragma below: inner double-check-with-lock race arm
|
|
34
|
-
#
|
|
35
|
-
#
|
|
33
|
+
# pragma below: inner double-check-with-lock race arm. Reachable only when two
|
|
34
|
+
# threads pass the outer check and race for loop_lock — free-threaded CPython can
|
|
35
|
+
# reach it, but only nondeterministically, so it stays excluded from coverage.
|
|
36
36
|
elif cached is not current: # pragma: no cover
|
|
37
37
|
raise RuntimeError(message_template.format(first=cached, current=current))
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|