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.
Files changed (201) hide show
  1. {clientwright-0.4.0 → clientwright-0.4.1}/CHANGELOG.md +7 -0
  2. {clientwright-0.4.0 → clientwright-0.4.1}/PKG-INFO +1 -1
  3. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/__init__.py +2 -0
  4. clientwright-0.4.1/clientwright/__version__.py +1 -0
  5. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/contrib/settings.py +5 -1
  6. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/__init__.py +2 -0
  7. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/settings.py +33 -3
  8. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/contrib/test_settings.py +22 -0
  9. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_settings.py +10 -0
  10. clientwright-0.4.0/clientwright/__version__.py +0 -1
  11. {clientwright-0.4.0 → clientwright-0.4.1}/.gitignore +0 -0
  12. {clientwright-0.4.0 → clientwright-0.4.1}/LICENSE +0 -0
  13. {clientwright-0.4.0 → clientwright-0.4.1}/README.md +0 -0
  14. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/__init__.py +0 -0
  15. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/_httpx_shared.py +0 -0
  16. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/_lazy.py +0 -0
  17. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/__init__.py +0 -0
  18. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/_imports.py +0 -0
  19. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/adapter.py +0 -0
  20. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/capabilities.py +0 -0
  21. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/classify.py +0 -0
  22. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/errors.py +0 -0
  23. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/middleware.py +0 -0
  24. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/normalize.py +0 -0
  25. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/options.py +0 -0
  26. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/trace.py +0 -0
  27. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/aiohttp/views.py +0 -0
  28. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/__init__.py +0 -0
  29. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/_imports.py +0 -0
  30. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/adapter.py +0 -0
  31. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/capabilities.py +0 -0
  32. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/classify.py +0 -0
  33. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/errors.py +0 -0
  34. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/normalize.py +0 -0
  35. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/normalize_sync.py +0 -0
  36. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/transport.py +0 -0
  37. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx/views.py +0 -0
  38. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/__init__.py +0 -0
  39. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/_imports.py +0 -0
  40. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/adapter.py +0 -0
  41. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/capabilities.py +0 -0
  42. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/classify.py +0 -0
  43. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/errors.py +0 -0
  44. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/normalize.py +0 -0
  45. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/normalize_sync.py +0 -0
  46. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/transport.py +0 -0
  47. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/httpx2/views.py +0 -0
  48. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/__init__.py +0 -0
  49. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_metrics/__init__.py +0 -0
  50. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_metrics/prometheus.py +0 -0
  51. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_tracing/__init__.py +0 -0
  52. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/observability/_tracing/otel.py +0 -0
  53. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/__init__.py +0 -0
  54. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/_imports.py +0 -0
  55. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/adapter.py +0 -0
  56. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/capabilities.py +0 -0
  57. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/classify.py +0 -0
  58. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/errors.py +0 -0
  59. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/normalize.py +0 -0
  60. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/requests/views.py +0 -0
  61. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/__init__.py +0 -0
  62. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/_imports.py +0 -0
  63. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/adapter.py +0 -0
  64. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/capabilities.py +0 -0
  65. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/classify.py +0 -0
  66. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/errors.py +0 -0
  67. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/normalize.py +0 -0
  68. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/adapters/urllib3/views.py +0 -0
  69. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/contrib/__init__.py +0 -0
  70. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/contrib/deadline.py +0 -0
  71. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/contrib/dishka.py +0 -0
  72. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/__init__.py +0 -0
  73. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/balancer/__init__.py +0 -0
  74. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/balancer/policy.py +0 -0
  75. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/capabilities.py +0 -0
  76. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/config.py +0 -0
  77. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/adapter.py +0 -0
  78. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/context.py +0 -0
  79. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/message.py +0 -0
  80. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/contracts/observability.py +0 -0
  81. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/__init__.py +0 -0
  82. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/aio.py +0 -0
  83. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/base.py +0 -0
  84. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/redirects.py +0 -0
  85. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/suppress.py +0 -0
  86. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/engine/sync.py +0 -0
  87. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/errors.py +0 -0
  88. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/model.py +0 -0
  89. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/native.py +0 -0
  90. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/options.py +0 -0
  91. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/plan.py +0 -0
  92. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/__init__.py +0 -0
  93. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/budget.py +0 -0
  94. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/circuit.py +0 -0
  95. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/concurrency.py +0 -0
  96. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/retry.py +0 -0
  97. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/policy/timeout.py +0 -0
  98. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/registry.py +0 -0
  99. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/telemetry/__init__.py +0 -0
  100. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/telemetry/emitter.py +0 -0
  101. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/telemetry/names.py +0 -0
  102. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/telemetry/null.py +0 -0
  103. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/telemetry/redaction.py +0 -0
  104. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/testing/__init__.py +0 -0
  105. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/testing/doubles.py +0 -0
  106. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/core/testing/origin.py +0 -0
  107. {clientwright-0.4.0 → clientwright-0.4.1}/clientwright/py.typed +0 -0
  108. {clientwright-0.4.0 → clientwright-0.4.1}/pyproject.toml +0 -0
  109. {clientwright-0.4.0 → clientwright-0.4.1}/tests/__init__.py +0 -0
  110. {clientwright-0.4.0 → clientwright-0.4.1}/tests/conftest.py +0 -0
  111. {clientwright-0.4.0 → clientwright-0.4.1}/tests/helpers/__init__.py +0 -0
  112. {clientwright-0.4.0 → clientwright-0.4.1}/tests/helpers/drivers.py +0 -0
  113. {clientwright-0.4.0 → clientwright-0.4.1}/tests/helpers/engine.py +0 -0
  114. {clientwright-0.4.0 → clientwright-0.4.1}/tests/helpers/telemetry.py +0 -0
  115. {clientwright-0.4.0 → clientwright-0.4.1}/tests/helpers/views.py +0 -0
  116. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/__init__.py +0 -0
  117. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/__init__.py +0 -0
  118. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_aiohttp.py +0 -0
  119. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_httpx2.py +0 -0
  120. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_httpx_async.py +0 -0
  121. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_httpx_sync.py +0 -0
  122. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_requests.py +0 -0
  123. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/adapters/test_urllib3.py +0 -0
  124. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/chaos/__init__.py +0 -0
  125. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/chaos/test_faults.py +0 -0
  126. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/chaos/test_origin_faults.py +0 -0
  127. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/conftest.py +0 -0
  128. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/contrib/__init__.py +0 -0
  129. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/contrib/test_deadline.py +0 -0
  130. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/contrib/test_dishka.py +0 -0
  131. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/parity/__init__.py +0 -0
  132. {clientwright-0.4.0 → clientwright-0.4.1}/tests/integration/parity/test_semantics.py +0 -0
  133. {clientwright-0.4.0 → clientwright-0.4.1}/tests/live/__init__.py +0 -0
  134. {clientwright-0.4.0 → clientwright-0.4.1}/tests/live/conftest.py +0 -0
  135. {clientwright-0.4.0 → clientwright-0.4.1}/tests/live/test_public_endpoints.py +0 -0
  136. {clientwright-0.4.0 → clientwright-0.4.1}/tests/live/test_tls_and_dns.py +0 -0
  137. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/__init__.py +0 -0
  138. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/__init__.py +0 -0
  139. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/aiohttp/__init__.py +0 -0
  140. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/aiohttp/test_build.py +0 -0
  141. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/aiohttp/test_normalize.py +0 -0
  142. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/aiohttp/test_trace.py +0 -0
  143. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/aiohttp/test_units.py +0 -0
  144. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/conftest.py +0 -0
  145. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/httpx/__init__.py +0 -0
  146. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/httpx/test_units.py +0 -0
  147. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/httpx2/__init__.py +0 -0
  148. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/httpx2/test_units.py +0 -0
  149. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/observability/__init__.py +0 -0
  150. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/observability/test_exports.py +0 -0
  151. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/observability/test_otel.py +0 -0
  152. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/observability/test_prometheus.py +0 -0
  153. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/requests/__init__.py +0 -0
  154. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/requests/test_adapter.py +0 -0
  155. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/requests/test_normalize.py +0 -0
  156. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/requests/test_units.py +0 -0
  157. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/test_bare_install.py +0 -0
  158. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/test_httpx_family_parity.py +0 -0
  159. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/test_httpx_shared.py +0 -0
  160. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/urllib3/__init__.py +0 -0
  161. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/urllib3/test_adapter.py +0 -0
  162. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/urllib3/test_normalize.py +0 -0
  163. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/adapters/urllib3/test_units.py +0 -0
  164. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/contrib/__init__.py +0 -0
  165. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/contrib/test_deadline.py +0 -0
  166. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/contrib/test_deadline_context.py +0 -0
  167. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/contrib/test_dishka.py +0 -0
  168. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/__init__.py +0 -0
  169. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/__init__.py +0 -0
  170. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/test_aio.py +0 -0
  171. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/test_base.py +0 -0
  172. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/test_redirects.py +0 -0
  173. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/test_suppress.py +0 -0
  174. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/engine/test_sync.py +0 -0
  175. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/__init__.py +0 -0
  176. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_budget.py +0 -0
  177. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_circuit.py +0 -0
  178. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_circuit_properties.py +0 -0
  179. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_concurrency.py +0 -0
  180. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_retry.py +0 -0
  181. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_retry_properties.py +0 -0
  182. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_timeout.py +0 -0
  183. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/policy/test_timeout_properties.py +0 -0
  184. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/__init__.py +0 -0
  185. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/test_emitter.py +0 -0
  186. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/test_masking.py +0 -0
  187. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/test_redaction.py +0 -0
  188. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/telemetry/test_redaction_properties.py +0 -0
  189. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_balancer.py +0 -0
  190. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_capabilities.py +0 -0
  191. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_capabilities_properties.py +0 -0
  192. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_config.py +0 -0
  193. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_enum_coercion.py +0 -0
  194. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_errors.py +0 -0
  195. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_model.py +0 -0
  196. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_options.py +0 -0
  197. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_plan.py +0 -0
  198. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/core/test_registry.py +0 -0
  199. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/test_docs_snippets.py +0 -0
  200. {clientwright-0.4.0 → clientwright-0.4.1}/tests/unit/test_sdk_imports_are_guarded.py +0 -0
  201. {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.0
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
- def client_config_from_settings(settings: ClientSettingsProtocol, service_name: str) -> ClientConfig:
93
- """Build a ClientConfig from the structural settings shape used by services."""
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