clientwright 0.4.0__tar.gz → 0.4.1__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.
- {clientwright-0.4.0 → clientwright-0.4.1}/CHANGELOG.md +7 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/PKG-INFO +1 -1
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/__init__.py +2 -0
- clientwright-0.4.1/clientwright/__version__.py +1 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/contrib/settings.py +5 -1
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/__init__.py +2 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/settings.py +33 -3
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/contrib/test_settings.py +22 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_settings.py +10 -0
- clientwright-0.4.0/clientwright/__version__.py +0 -1
- {clientwright-0.4.0 → clientwright-0.4.1}/.gitignore +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/LICENSE +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/README.md +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/_httpx_shared.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/_lazy.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/_imports.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/adapter.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/capabilities.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/classify.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/errors.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/middleware.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/normalize.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/options.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/trace.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/views.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/_imports.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/adapter.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/capabilities.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/classify.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/errors.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/normalize.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/normalize_sync.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/transport.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/views.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/_imports.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/adapter.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/capabilities.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/classify.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/errors.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/normalize.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/normalize_sync.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/transport.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/views.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_metrics/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_metrics/prometheus.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_tracing/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_tracing/otel.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/_imports.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/adapter.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/capabilities.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/classify.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/errors.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/normalize.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/views.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/_imports.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/adapter.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/capabilities.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/classify.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/errors.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/normalize.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/views.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/contrib/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/contrib/deadline.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/contrib/dishka.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/balancer/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/balancer/policy.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/capabilities.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/config.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/adapter.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/context.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/message.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/observability.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/aio.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/base.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/redirects.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/suppress.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/sync.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/errors.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/model.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/native.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/options.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/plan.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/budget.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/circuit.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/concurrency.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/retry.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/timeout.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/registry.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/telemetry/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/telemetry/emitter.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/telemetry/names.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/telemetry/null.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/telemetry/redaction.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/testing/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/testing/doubles.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/testing/origin.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/py.typed +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/pyproject.toml +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/conftest.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/helpers/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/helpers/drivers.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/helpers/engine.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/helpers/telemetry.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/helpers/views.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_aiohttp.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_httpx2.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_httpx_async.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_httpx_sync.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_requests.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_urllib3.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/chaos/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/chaos/test_faults.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/chaos/test_origin_faults.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/conftest.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/contrib/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/contrib/test_deadline.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/contrib/test_dishka.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/parity/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/parity/test_semantics.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/live/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/live/conftest.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/live/test_public_endpoints.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/live/test_tls_and_dns.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/aiohttp/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/aiohttp/test_build.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/aiohttp/test_normalize.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/aiohttp/test_trace.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/aiohttp/test_units.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/conftest.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/httpx/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/httpx/test_units.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/httpx2/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/httpx2/test_units.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/observability/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/observability/test_exports.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/observability/test_otel.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/observability/test_prometheus.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/requests/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/requests/test_adapter.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/requests/test_normalize.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/requests/test_units.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/test_bare_install.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/test_httpx_family_parity.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/test_httpx_shared.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/urllib3/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/urllib3/test_adapter.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/urllib3/test_normalize.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/urllib3/test_units.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/contrib/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/contrib/test_deadline.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/contrib/test_deadline_context.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/contrib/test_dishka.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/test_aio.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/test_base.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/test_redirects.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/test_suppress.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/test_sync.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_budget.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_circuit.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_circuit_properties.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_concurrency.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_retry.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_retry_properties.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_timeout.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_timeout_properties.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/__init__.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/test_emitter.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/test_masking.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/test_redaction.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/test_redaction_properties.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_balancer.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_capabilities.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_capabilities_properties.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_config.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_enum_coercion.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_errors.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_model.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_options.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_plan.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_registry.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/test_docs_snippets.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/test_sdk_imports_are_guarded.py +0 -0
- {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/test_version.py +0 -0
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.4.1](https://github.com/bedrock-python/clientwright/compare/clientwright-v0.4.0...clientwright-v0.4.1) (2026-09-14)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* client_config_from_settings passes a BaseClientSettings through to to_config ([fc3af5e](https://github.com/bedrock-python/clientwright/commit/fc3af5e21821c8c506f10c43733aa4d66c563c39)), closes [#38](https://github.com/bedrock-python/clientwright/issues/38)
|
|
9
|
+
|
|
3
10
|
## [0.4.0](https://github.com/bedrock-python/clientwright/compare/clientwright-v0.3.0...clientwright-v0.4.0) (2026-09-14)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: clientwright
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: HTTP client platform: one resilience and observability core with adapters for httpx, aiohttp, requests, urllib3 and friends
|
|
5
5
|
Project-URL: Repository, https://github.com/bedrock-python/clientwright
|
|
6
6
|
Project-URL: Documentation, https://bedrock-python.github.io/clientwright/
|
|
@@ -55,6 +55,7 @@ from .core.contracts import (
|
|
|
55
55
|
MaskerProtocol,
|
|
56
56
|
RetrySettingsProtocol,
|
|
57
57
|
SpanProtocol,
|
|
58
|
+
SupportsToConfig,
|
|
58
59
|
TracerProtocol,
|
|
59
60
|
)
|
|
60
61
|
from .core.contracts.adapter import default_deps
|
|
@@ -158,6 +159,7 @@ __all__ = [
|
|
|
158
159
|
"SeamGranularity",
|
|
159
160
|
"SpanProtocol",
|
|
160
161
|
"Support",
|
|
162
|
+
"SupportsToConfig",
|
|
161
163
|
"TimeoutConfig",
|
|
162
164
|
"TlsConfig",
|
|
163
165
|
"TooManyRedirectsError",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.4.1" # x-release-please-version
|
|
@@ -283,7 +283,11 @@ class BaseClientSettings(BaseModel):
|
|
|
283
283
|
)
|
|
284
284
|
|
|
285
285
|
def to_config(self, service_name: str) -> ClientConfig:
|
|
286
|
-
"""The ``ClientConfig`` these settings describe, labelled ``service_name``.
|
|
286
|
+
"""The ``ClientConfig`` these settings describe, labelled ``service_name``.
|
|
287
|
+
|
|
288
|
+
The one translation for the shipped models. ``client_config_from_settings``
|
|
289
|
+
is the flat legacy route and passes a ``BaseClientSettings`` straight here.
|
|
290
|
+
"""
|
|
287
291
|
return ClientConfig(
|
|
288
292
|
service_name=service_name,
|
|
289
293
|
base_url=self.base_url,
|
|
@@ -15,6 +15,7 @@ from .observability import TracerProtocol as TracerProtocol
|
|
|
15
15
|
from .settings import CircuitBreakerSettingsProtocol as CircuitBreakerSettingsProtocol
|
|
16
16
|
from .settings import ClientSettingsProtocol as ClientSettingsProtocol
|
|
17
17
|
from .settings import RetrySettingsProtocol as RetrySettingsProtocol
|
|
18
|
+
from .settings import SupportsToConfig as SupportsToConfig
|
|
18
19
|
|
|
19
20
|
__all__ = [
|
|
20
21
|
"AdapterDeps",
|
|
@@ -30,6 +31,7 @@ __all__ = [
|
|
|
30
31
|
"ResponseView",
|
|
31
32
|
"RetrySettingsProtocol",
|
|
32
33
|
"SpanProtocol",
|
|
34
|
+
"SupportsToConfig",
|
|
33
35
|
"SyncNormalizer",
|
|
34
36
|
"TracerProtocol",
|
|
35
37
|
]
|
|
@@ -4,6 +4,12 @@ Services keep their own settings models (pydantic or otherwise); anything with
|
|
|
4
4
|
these read-only properties satisfies the contract - the org convention set by
|
|
5
5
|
grpc-client-kit. ``client_config_from_settings`` converts the structural shape
|
|
6
6
|
into a ``ClientConfig``.
|
|
7
|
+
|
|
8
|
+
This is the flat, legacy shape. The shipped models in
|
|
9
|
+
``clientwright.contrib.settings`` are the nested one and carry their own
|
|
10
|
+
translation, ``BaseClientSettings.to_config(service_name)``; the converter
|
|
11
|
+
passes anything with a ``to_config`` through to it, so either call builds
|
|
12
|
+
the same config.
|
|
7
13
|
"""
|
|
8
14
|
|
|
9
15
|
from __future__ import annotations
|
|
@@ -50,7 +56,12 @@ class CircuitBreakerSettingsProtocol(Protocol):
|
|
|
50
56
|
|
|
51
57
|
@runtime_checkable
|
|
52
58
|
class ClientSettingsProtocol(Protocol):
|
|
53
|
-
"""Mirror of the legacy ``RestClientSettingsProtocol`` reachable surface.
|
|
59
|
+
"""Mirror of the legacy ``RestClientSettingsProtocol`` reachable surface.
|
|
60
|
+
|
|
61
|
+
Flat names for a settings model of your own. The shipped nested models
|
|
62
|
+
(``clientwright.contrib.settings.BaseClientSettings``) do not satisfy this
|
|
63
|
+
protocol; they carry ``to_config(service_name)`` instead.
|
|
64
|
+
"""
|
|
54
65
|
|
|
55
66
|
@property
|
|
56
67
|
def base_url(self) -> str: ...
|
|
@@ -89,8 +100,26 @@ class ClientSettingsProtocol(Protocol):
|
|
|
89
100
|
def circuit_breaker(self) -> CircuitBreakerSettingsProtocol | None: ...
|
|
90
101
|
|
|
91
102
|
|
|
92
|
-
|
|
93
|
-
|
|
103
|
+
@runtime_checkable
|
|
104
|
+
class SupportsToConfig(Protocol):
|
|
105
|
+
"""Settings that build their own ``ClientConfig`` - the shape of ``BaseClientSettings``."""
|
|
106
|
+
|
|
107
|
+
def to_config(self, service_name: str) -> ClientConfig: ...
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def client_config_from_settings(settings: ClientSettingsProtocol | SupportsToConfig, service_name: str) -> ClientConfig:
|
|
111
|
+
"""Build a ClientConfig from the structural settings shape used by services.
|
|
112
|
+
|
|
113
|
+
For a settings object that builds its own config - the shipped
|
|
114
|
+
``clientwright.contrib.settings.BaseClientSettings`` - this is
|
|
115
|
+
``settings.to_config(service_name)``, and that is what it returns: the
|
|
116
|
+
nested sections (pool, tls, proxy, headers, redirects, observability, ...)
|
|
117
|
+
all reach the config. Call ``to_config`` directly where you can; the flat
|
|
118
|
+
``ClientSettingsProtocol`` route is for a model of your own that predates
|
|
119
|
+
the shipped ones.
|
|
120
|
+
"""
|
|
121
|
+
if isinstance(settings, SupportsToConfig):
|
|
122
|
+
return settings.to_config(service_name)
|
|
94
123
|
retry_settings = settings.retry
|
|
95
124
|
retry = (
|
|
96
125
|
RetryConfig(
|
|
@@ -136,5 +165,6 @@ __all__ = [
|
|
|
136
165
|
"CircuitBreakerSettingsProtocol",
|
|
137
166
|
"ClientSettingsProtocol",
|
|
138
167
|
"RetrySettingsProtocol",
|
|
168
|
+
"SupportsToConfig",
|
|
139
169
|
"client_config_from_settings",
|
|
140
170
|
]
|
|
@@ -27,6 +27,7 @@ from clientwright import (
|
|
|
27
27
|
TlsConfig,
|
|
28
28
|
UnsupportedPolicy,
|
|
29
29
|
build_sync,
|
|
30
|
+
client_config_from_settings,
|
|
30
31
|
)
|
|
31
32
|
from clientwright.contrib import settings as settings_module
|
|
32
33
|
from clientwright.contrib.settings import (
|
|
@@ -203,6 +204,27 @@ def test__bad_values__fail_at_load_with_the_field_path() -> None:
|
|
|
203
204
|
BaseProxySettings(url="http://proxy:3128", from_env=True)
|
|
204
205
|
|
|
205
206
|
|
|
207
|
+
# --- the legacy converter ---
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
def test__the_legacy_converter__passes_a_base_client_settings_through_to_to_config() -> None:
|
|
211
|
+
settings = BaseClientSettings(
|
|
212
|
+
base_url="https://auth.example.com",
|
|
213
|
+
pool={"max_connections": 7},
|
|
214
|
+
retry={"multiplier": 3.0},
|
|
215
|
+
tls={"verify": False},
|
|
216
|
+
proxy={"url": "http://proxy:3128"},
|
|
217
|
+
)
|
|
218
|
+
|
|
219
|
+
config = client_config_from_settings(settings, "auth-orchestrator")
|
|
220
|
+
|
|
221
|
+
assert config == settings.to_config("auth-orchestrator")
|
|
222
|
+
assert config.pool.max_connections == 7
|
|
223
|
+
assert config.retry is not None and config.retry.multiplier == 3.0
|
|
224
|
+
assert config.tls == TlsConfig(verify=False)
|
|
225
|
+
assert config.proxy == ProxyConfig(url="http://proxy:3128")
|
|
226
|
+
|
|
227
|
+
|
|
206
228
|
def test__a_config_from_settings__builds_the_native_client() -> None:
|
|
207
229
|
httpx = pytest.importorskip("httpx", reason="requires the [httpx] extra")
|
|
208
230
|
config = BaseClientSettings(base_url="https://api.example.com", pool={"http2": False}).to_config("api")
|
|
@@ -32,3 +32,13 @@ def test__structural_settings__mapped_into_config() -> None:
|
|
|
32
32
|
assert config.retry is not None and config.retry.max_attempts == 5
|
|
33
33
|
assert config.circuit_breaker is None
|
|
34
34
|
assert config.observability.tracing is False
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def test__settings_with_to_config__are_passed_through_to_it() -> None:
|
|
38
|
+
class Settings:
|
|
39
|
+
def to_config(self, service_name: str) -> clientwright.ClientConfig:
|
|
40
|
+
return clientwright.ClientConfig(service_name=service_name, base_url="https://api.example.com")
|
|
41
|
+
|
|
42
|
+
config = clientwright.client_config_from_settings(Settings(), "svc")
|
|
43
|
+
assert config == clientwright.ClientConfig(service_name="svc", base_url="https://api.example.com")
|
|
44
|
+
assert isinstance(Settings(), clientwright.SupportsToConfig)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.4.0" # x-release-please-version
|
|
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
|
|
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
|
{clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_metrics/__init__.py
RENAMED
|
File without changes
|
{clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_metrics/prometheus.py
RENAMED
|
File without changes
|
{clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_tracing/__init__.py
RENAMED
|
File without changes
|
{clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_tracing/otel.py
RENAMED
|
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
|
|
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
|
|
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
|
|
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
|
{clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/observability/test_prometheus.py
RENAMED
|
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
|
|
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
|
{clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/test_redaction_properties.py
RENAMED
|
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
|