quadkit 0.0.3__tar.gz → 0.0.41__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 (670) hide show
  1. quadkit-0.0.41/PKG-INFO +270 -0
  2. quadkit-0.0.41/README.md +219 -0
  3. {quadkit-0.0.3 → quadkit-0.0.41}/example.yaml +0 -17
  4. {quadkit-0.0.3 → quadkit-0.0.41}/pyproject.toml +16 -18
  5. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/config.py +0 -15
  6. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/constants.py +0 -4
  7. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/executors/dispatcher.py +5 -4
  8. quadkit-0.0.41/src/quadkit/di/container/container.py +281 -0
  9. quadkit-0.0.41/src/quadkit/di/container/container_resolution.py +292 -0
  10. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/collect.py +2 -1
  11. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/errors.py +6 -4
  12. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/__init__.py +0 -5
  13. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/factory.py +2 -1
  14. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/redaction.py +11 -0
  15. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/__init__.py +0 -1
  16. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/builtins/caching.py +3 -1
  17. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/builtins/routing.py +5 -2
  18. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/builtins/validation.py +5 -3
  19. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/config.py +2 -15
  20. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/constants.py +0 -4
  21. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/config.py +1 -1
  22. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/sanitization/sanitizer.py +27 -8
  23. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_config.py +0 -6
  24. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_constants.py +0 -5
  25. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_constants_new.py +0 -4
  26. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_config_pool.py +0 -15
  27. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_container_visibility.py +38 -0
  28. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_di_provider_config_wiring.py +1 -1
  29. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_constants.py +0 -7
  30. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_constants_new.py +0 -4
  31. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_security_components_p2.py +3 -3
  32. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_base_and_misc_exceptions.py +2 -1
  33. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_concurrency_constants.py +3 -13
  34. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_logging_redaction.py +79 -5
  35. quadkit-0.0.3/CHANGELOG.md +0 -73
  36. quadkit-0.0.3/PKG-INFO +0 -179
  37. quadkit-0.0.3/README.md +0 -128
  38. quadkit-0.0.3/src/quadkit/di/container/container.py +0 -526
  39. quadkit-0.0.3/src/quadkit/domain/config.py +0 -38
  40. quadkit-0.0.3/src/quadkit/security/protocols.py +0 -15
  41. {quadkit-0.0.3 → quadkit-0.0.41}/.gitignore +0 -0
  42. {quadkit-0.0.3 → quadkit-0.0.41}/LICENSE +0 -0
  43. {quadkit-0.0.3 → quadkit-0.0.41}/NOTICE +0 -0
  44. {quadkit-0.0.3 → quadkit-0.0.41}/src/import_error.txt +0 -0
  45. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/__init__.py +0 -0
  46. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/__init__.py +0 -0
  47. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/asgi_lifespan.py +0 -0
  48. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/base.py +0 -0
  49. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/config/__init__.py +0 -0
  50. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/config/discovery.py +0 -0
  51. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/config/models.py +0 -0
  52. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/config_validation.py +0 -0
  53. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/constants.py +0 -0
  54. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/di/__init__.py +0 -0
  55. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/di/provider.py +0 -0
  56. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/discovery.py +0 -0
  57. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/events.py +0 -0
  58. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/exceptions.py +0 -0
  59. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/factory.py +0 -0
  60. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/health_probes.py +0 -0
  61. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/injectable_provider.py +0 -0
  62. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/invoker.py +0 -0
  63. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/lifecycle.py +0 -0
  64. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/module.py +0 -0
  65. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/pipeline.py +0 -0
  66. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/protocols.py +0 -0
  67. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/py.typed +0 -0
  68. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/runner.py +0 -0
  69. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/secrets.py +0 -0
  70. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/standard.py +0 -0
  71. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/app/types.py +0 -0
  72. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/codegen/__init__.py +0 -0
  73. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/codegen/base.py +0 -0
  74. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/__init__.py +0 -0
  75. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/bridges/__init__.py +0 -0
  76. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/bridges/py.typed +0 -0
  77. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/bridges/sync_bridge.py +0 -0
  78. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/channels/__init__.py +0 -0
  79. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/channels/channel.py +0 -0
  80. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/channels/py.typed +0 -0
  81. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/di/__init__.py +0 -0
  82. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/di/provider.py +0 -0
  83. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/di/py.typed +0 -0
  84. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/exceptions.py +0 -0
  85. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/executors/__init__.py +0 -0
  86. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/executors/parallel.py +0 -0
  87. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/executors/py.typed +0 -0
  88. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/executors/task_manager.py +0 -0
  89. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/locks/__init__.py +0 -0
  90. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/locks/py.typed +0 -0
  91. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/locks/rwlock.py +0 -0
  92. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/module.py +0 -0
  93. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/py.typed +0 -0
  94. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/concurrency/task_utils.py +0 -0
  95. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/__init__.py +0 -0
  96. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/base.py +0 -0
  97. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/constants.py +0 -0
  98. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/di/__init__.py +0 -0
  99. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/di/provider.py +0 -0
  100. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/exceptions.py +0 -0
  101. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/lib/__init__.py +0 -0
  102. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/lib/merge.py +0 -0
  103. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/lib/registry.py +0 -0
  104. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/lib/sources.py +0 -0
  105. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/lib/validation.py +0 -0
  106. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/lib/watcher.py +0 -0
  107. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/main.py +0 -0
  108. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/protocols.py +0 -0
  109. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/secrets.py +0 -0
  110. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/config/types.py +0 -0
  111. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/constants.py +0 -0
  112. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/__init__.py +0 -0
  113. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/_graph.py +0 -0
  114. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/builder.py +0 -0
  115. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/config/__init__.py +0 -0
  116. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/config/models.py +0 -0
  117. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/constants.py +0 -0
  118. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/container/__init__.py +0 -0
  119. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/container/container_introspection.py +0 -0
  120. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/container/container_runtime.py +0 -0
  121. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/container/registrar.py +0 -0
  122. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/container/resolver.py +0 -0
  123. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/container/scope.py +0 -0
  124. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/container/validation.py +0 -0
  125. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/context.py +0 -0
  126. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/decorators.py +0 -0
  127. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/exceptions.py +0 -0
  128. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/extensions/__init__.py +0 -0
  129. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/extensions/aop_interceptors.py +0 -0
  130. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/extensions/discovery.py +0 -0
  131. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/extensions/interceptors.py +0 -0
  132. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/extensions/strategies.py +0 -0
  133. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/extensions/validator.py +0 -0
  134. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/function_provider.py +0 -0
  135. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/integration/__init__.py +0 -0
  136. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/integration/provider.py +0 -0
  137. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/markers.py +0 -0
  138. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/__init__.py +0 -0
  139. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/base.py +0 -0
  140. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/__init__.py +0 -0
  141. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/_graph_utils.py +0 -0
  142. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/compiler.py +0 -0
  143. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/context.py +0 -0
  144. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/__init__.py +0 -0
  145. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/detect_cycles.py +0 -0
  146. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/expand.py +0 -0
  147. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/order.py +0 -0
  148. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/protocol.py +0 -0
  149. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/validate.py +0 -0
  150. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/compiler/phases/visibility.py +0 -0
  151. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/constants.py +0 -0
  152. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/decorator.py +0 -0
  153. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/dynamic.py +0 -0
  154. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/graph.py +0 -0
  155. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/introspection.py +0 -0
  156. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/metadata.py +0 -0
  157. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/module/registry.py +0 -0
  158. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/orchestrator/__init__.py +0 -0
  159. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/orchestrator/events.py +0 -0
  160. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/orchestrator/health.py +0 -0
  161. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/orchestrator/lifecycle.py +0 -0
  162. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/orchestrator/orchestrator.py +0 -0
  163. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/orchestrator/registry.py +0 -0
  164. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/protocols.py +0 -0
  165. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/provider.py +0 -0
  166. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/provider_utils.py +0 -0
  167. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/py.typed +0 -0
  168. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/__init__.py +0 -0
  169. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/context.py +0 -0
  170. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/descriptor.py +0 -0
  171. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/diagnostics.py +0 -0
  172. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/injector.py +0 -0
  173. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/invoker.py +0 -0
  174. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/registry.py +0 -0
  175. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/resolver.py +0 -0
  176. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/store.py +0 -0
  177. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/type_hints.py +0 -0
  178. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/resolution/validator.py +0 -0
  179. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/di/types.py +0 -0
  180. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/constants.py +0 -0
  181. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/exceptions.py +0 -0
  182. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/models/__init__.py +0 -0
  183. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/models/aggregate.py +0 -0
  184. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/models/base.py +0 -0
  185. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/models/coercion.py +0 -0
  186. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/models/entity.py +0 -0
  187. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/models/factory.py +0 -0
  188. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/models/py.typed +0 -0
  189. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/models/value_object.py +0 -0
  190. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/module.py +0 -0
  191. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/py.typed +0 -0
  192. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/types.py +0 -0
  193. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/domain/unit_of_work.py +0 -0
  194. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/exceptions.py +0 -0
  195. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/hooks/__init__.py +0 -0
  196. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/hooks/ambient.py +0 -0
  197. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/hooks/registry.py +0 -0
  198. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/hooks/types.py +0 -0
  199. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/identity/__init__.py +0 -0
  200. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/identity/ambient.py +0 -0
  201. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/identity/config.py +0 -0
  202. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/identity/constants.py +0 -0
  203. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/identity/di/__init__.py +0 -0
  204. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/identity/di/provider.py +0 -0
  205. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/identity/generator.py +0 -0
  206. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/README.md +0 -0
  207. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/__init__.py +0 -0
  208. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/config/__init__.py +0 -0
  209. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/config/models.py +0 -0
  210. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/config/redaction.py +0 -0
  211. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/config/sampling.py +0 -0
  212. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/configurator.py +0 -0
  213. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/constants.py +0 -0
  214. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/debug.py +0 -0
  215. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/di/__init__.py +0 -0
  216. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/di/provider.py +0 -0
  217. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/processors.py +0 -0
  218. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/logging/types.py +0 -0
  219. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/__init__.py +0 -0
  220. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/config.py +0 -0
  221. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/constants.py +0 -0
  222. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/core/__init__.py +0 -0
  223. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/core/mapper.py +0 -0
  224. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/di/__init__.py +0 -0
  225. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/di/provider.py +0 -0
  226. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/exceptions.py +0 -0
  227. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/module.py +0 -0
  228. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/protocols.py +0 -0
  229. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/py.typed +0 -0
  230. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/mapping/types.py +0 -0
  231. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/builtins/__init__.py +0 -0
  232. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/builtins/di.py +0 -0
  233. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/builtins/observability.py +0 -0
  234. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/builtins/resilience.py +0 -0
  235. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/core/__init__.py +0 -0
  236. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/core/chain.py +0 -0
  237. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/core/exception_filters.py +0 -0
  238. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/core/registry.py +0 -0
  239. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/di/__init__.py +0 -0
  240. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/di/provider.py +0 -0
  241. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/exceptions.py +0 -0
  242. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/module.py +0 -0
  243. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/middleware/types.py +0 -0
  244. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/module.py +0 -0
  245. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/observability/__init__.py +0 -0
  246. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/observability/core.py +0 -0
  247. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/observability/di/__init__.py +0 -0
  248. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/observability/di/sub_providers/__init__.py +0 -0
  249. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/observability/di/sub_providers/observability.py +0 -0
  250. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/plugins/__init__.py +0 -0
  251. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/plugins/discovery.py +0 -0
  252. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/plugins/engine.py +0 -0
  253. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/plugins/exceptions.py +0 -0
  254. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/plugins/module.py +0 -0
  255. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/plugins/state.py +0 -0
  256. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/__init__.py +0 -0
  257. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/builder.py +0 -0
  258. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/clock.py +0 -0
  259. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/constants.py +0 -0
  260. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/context.py +0 -0
  261. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/context_keys.py +0 -0
  262. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/context_registry.py +0 -0
  263. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/data.py +0 -0
  264. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/di/__init__.py +0 -0
  265. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/di/provider.py +0 -0
  266. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/exceptions.py +0 -0
  267. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/lazy.py +0 -0
  268. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/pipeline.py +0 -0
  269. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/protocols.py +0 -0
  270. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/registry/__init__.py +0 -0
  271. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/registry/core.py +0 -0
  272. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/registry/introspection.py +0 -0
  273. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/trusted_html.py +0 -0
  274. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/types.py +0 -0
  275. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/primitives/typing.py +0 -0
  276. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/py.typed +0 -0
  277. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/reactive/__init__.py +0 -0
  278. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/reactive/core.py +0 -0
  279. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/reactive/exceptions.py +0 -0
  280. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/reactive/operators/__init__.py +0 -0
  281. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/reactive/operators/control.py +0 -0
  282. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/reactive/operators/time_ops.py +0 -0
  283. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/reactive/operators/transform.py +0 -0
  284. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/reactive/retry.py +0 -0
  285. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/reactive/subjects.py +0 -0
  286. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/result/__init__.py +0 -0
  287. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/result/_pipeline.py +0 -0
  288. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/result/errors.py +0 -0
  289. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/result/types.py +0 -0
  290. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/result/utils.py +0 -0
  291. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/saga/__init__.py +0 -0
  292. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/saga/base.py +0 -0
  293. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/saga/canonical_json.py +0 -0
  294. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/saga/content_addressed.py +0 -0
  295. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/__init__.py +0 -0
  296. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/constants.py +0 -0
  297. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/decorators.py +0 -0
  298. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/encryption/__init__.py +0 -0
  299. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/encryption/service.py +0 -0
  300. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/events.py +0 -0
  301. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/exceptions.py +0 -0
  302. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/guards/__init__.py +0 -0
  303. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/guards/chain.py +0 -0
  304. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/guards/decorator.py +0 -0
  305. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/hashing/__init__.py +0 -0
  306. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/hashing/ambient.py +0 -0
  307. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/hashing/digest.py +0 -0
  308. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/hashing/kdf.py +0 -0
  309. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/hooks.py +0 -0
  310. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/provider.py +0 -0
  311. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/py.typed +0 -0
  312. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/sanitization/__init__.py +0 -0
  313. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/sanitization/filename.py +0 -0
  314. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/sanitization/html.py +0 -0
  315. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/sanitization/url.py +0 -0
  316. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/secrets/__init__.py +0 -0
  317. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/secrets/rotation.py +0 -0
  318. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/secrets/store.py +0 -0
  319. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/secrets/types.py +0 -0
  320. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/security/types.py +0 -0
  321. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/__init__.py +0 -0
  322. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/backends/__init__.py +0 -0
  323. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/backends/json.py +0 -0
  324. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/backends/py.typed +0 -0
  325. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/config.py +0 -0
  326. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/constants.py +0 -0
  327. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/di/__init__.py +0 -0
  328. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/di/provider.py +0 -0
  329. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/di/py.typed +0 -0
  330. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/domain/__init__.py +0 -0
  331. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/domain/domain.py +0 -0
  332. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/domain/py.typed +0 -0
  333. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/exceptions.py +0 -0
  334. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/module.py +0 -0
  335. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/py.typed +0 -0
  336. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/registry/__init__.py +0 -0
  337. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/registry/py.typed +0 -0
  338. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/registry/registry.py +0 -0
  339. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/schema/__init__.py +0 -0
  340. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/schema/py.typed +0 -0
  341. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/schema/schema.py +0 -0
  342. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/serialization/types.py +0 -0
  343. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/types.py +0 -0
  344. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/__init__.py +0 -0
  345. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/config.py +0 -0
  346. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/constants.py +0 -0
  347. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/decorators.py +0 -0
  348. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/engine/__init__.py +0 -0
  349. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/engine/coercion.py +0 -0
  350. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/engine/py.typed +0 -0
  351. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/engine/validator.py +0 -0
  352. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/exceptions.py +0 -0
  353. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/module.py +0 -0
  354. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/py.typed +0 -0
  355. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/rules/__init__.py +0 -0
  356. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/rules/py.typed +0 -0
  357. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/rules/rules.py +0 -0
  358. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/schema/__init__.py +0 -0
  359. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/schema/fields.py +0 -0
  360. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/schema/introspection.py +0 -0
  361. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/schema/py.typed +0 -0
  362. {quadkit-0.0.3 → quadkit-0.0.41}/src/quadkit/validation/types.py +0 -0
  363. {quadkit-0.0.3 → quadkit-0.0.41}/tests/conftest.py +0 -0
  364. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/__init__.py +0 -0
  365. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/__init__.py +0 -0
  366. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/_fixtures.py +0 -0
  367. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/conftest.py +0 -0
  368. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/test_boot_level.py +0 -0
  369. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/test_cross_method.py +0 -0
  370. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/test_dependency_chain.py +0 -0
  371. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/test_exports.py +0 -0
  372. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/test_importers.py +0 -0
  373. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/test_module_health_integration.py +0 -0
  374. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/test_module_lifecycle_integration.py +0 -0
  375. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/test_name_lookup.py +0 -0
  376. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/module/test_stub_enforcement_integration.py +0 -0
  377. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/di/test_visibility_enforcement_e2e.py +0 -0
  378. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/mapping/test_mapping_lifecycle.py +0 -0
  379. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/middleware/test_middleware_lifecycle.py +0 -0
  380. {quadkit-0.0.3 → quadkit-0.0.41}/tests/integration/test_full_pipeline.py +0 -0
  381. {quadkit-0.0.3 → quadkit-0.0.41}/tests/test.md +0 -0
  382. {quadkit-0.0.3 → quadkit-0.0.41}/tests/test_import_diagnostic.py +0 -0
  383. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/__init__.py +0 -0
  384. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/aop/test_interceptor_timeout.py +0 -0
  385. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/clock/test_clock.py +0 -0
  386. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/codegen/__init__.py +0 -0
  387. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/codegen/test_generator_base.py +0 -0
  388. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/codegen/test_staged_generation.py +0 -0
  389. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/codegen/test_template_overrides.py +0 -0
  390. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/conftest.py +0 -0
  391. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_bounded_channel.py +0 -0
  392. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_channel.py +0 -0
  393. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_exceptions.py +0 -0
  394. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_parallel.py +0 -0
  395. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_provider_config.py +0 -0
  396. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_concurrency_rwlock.py +0 -0
  397. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_dispatcher.py +0 -0
  398. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_sync_bridge.py +0 -0
  399. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_task_manager.py +0 -0
  400. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/concurrency/test_task_utils.py +0 -0
  401. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_config_constants_new.py +0 -0
  402. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_config_protocols.py +0 -0
  403. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_config_sources.py +0 -0
  404. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_env_interpolation.py +0 -0
  405. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_loader_fail_fast.py +0 -0
  406. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_logging_redaction_config.py +0 -0
  407. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_logging_sampling.py +0 -0
  408. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_profile_overlay.py +0 -0
  409. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_scoping.py +0 -0
  410. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_secrets_validator.py +0 -0
  411. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_strict_bool_env.py +0 -0
  412. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/config/test_strict_sections.py +0 -0
  413. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/core/test_context_correlation.py +0 -0
  414. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/core/test_core_constants.py +0 -0
  415. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/core/test_core_types.py +0 -0
  416. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/core/test_request_context_di.py +0 -0
  417. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/core/test_typing.py +0 -0
  418. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/core/validation/test_protocols.py +0 -0
  419. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/__init__.py +0 -0
  420. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/integration/test_provider.py +0 -0
  421. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/__init__.py +0 -0
  422. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/conftest.py +0 -0
  423. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_compiler.py +0 -0
  424. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_decorator.py +0 -0
  425. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_dynamic.py +0 -0
  426. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_errors.py +0 -0
  427. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_global.py +0 -0
  428. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_graph_reflection.py +0 -0
  429. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_health_graph.py +0 -0
  430. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_integration.py +0 -0
  431. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_introspection.py +0 -0
  432. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_lifecycle.py +0 -0
  433. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_module_lifecycle.py +0 -0
  434. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_reexport.py +0 -0
  435. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_registry.py +0 -0
  436. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_stub_compiler.py +0 -0
  437. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_stub_decorator.py +0 -0
  438. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/module/test_visibility.py +0 -0
  439. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_advanced_features.py +0 -0
  440. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_container_basics.py +0 -0
  441. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_container_builder.py +0 -0
  442. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_container_freeze.py +0 -0
  443. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_container_hardening.py +0 -0
  444. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_decorators.py +0 -0
  445. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_descriptor.py +0 -0
  446. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_di_constants_new.py +0 -0
  447. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_di_decorators.py +0 -0
  448. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_diagnostics.py +0 -0
  449. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_extensions_discovery.py +0 -0
  450. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_extensions_validator.py +0 -0
  451. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_function_provider_boot.py +0 -0
  452. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_graph_validator.py +0 -0
  453. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_interceptor_registry.py +0 -0
  454. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_invoker_unit.py +0 -0
  455. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_lifecycle_orchestrator.py +0 -0
  456. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_module_validation.py +0 -0
  457. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_module_visibility_boot.py +0 -0
  458. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_module_visibility_enforcement.py +0 -0
  459. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_named_binding.py +0 -0
  460. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_orchestrator_health.py +0 -0
  461. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_provider_basics.py +0 -0
  462. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_provider_config_injection.py +0 -0
  463. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_provider_conformance.py +0 -0
  464. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_provider_orchestration.py +0 -0
  465. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_provider_reset_state.py +0 -0
  466. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_provider_utils.py +0 -0
  467. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_scope_concurrency.py +0 -0
  468. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_scope_manager.py +0 -0
  469. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_service_store.py +0 -0
  470. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_type_hints.py +0 -0
  471. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/di/test_validation.py +0 -0
  472. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/domain/conftest.py +0 -0
  473. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/domain/test_aggregates.py +0 -0
  474. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/domain/test_domain.py +0 -0
  475. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/domain/test_domain_constants.py +0 -0
  476. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/domain/test_domain_exceptions.py +0 -0
  477. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/domain/test_domain_init.py +0 -0
  478. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/domain/test_domain_model_strict.py +0 -0
  479. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/domain/test_domain_module.py +0 -0
  480. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/domain/test_models_factory.py +0 -0
  481. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/domain/test_value_object.py +0 -0
  482. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/identity/test_identity.py +0 -0
  483. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/logging/test_logging_constants_new.py +0 -0
  484. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/mapping/conftest.py +0 -0
  485. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/mapping/test_auto_map.py +0 -0
  486. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/mapping/test_exceptions.py +0 -0
  487. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/mapping/test_mapping_constants_new.py +0 -0
  488. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/mapping/test_mapping_exceptions.py +0 -0
  489. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/mapping/test_mapping_mapper.py +0 -0
  490. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/mapping/test_mapping_module.py +0 -0
  491. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/mapping/test_mapping_types.py +0 -0
  492. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/mapping/test_protocol.py +0 -0
  493. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/mapping/test_registry.py +0 -0
  494. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/conftest.py +0 -0
  495. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_builtins.py +0 -0
  496. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_chain.py +0 -0
  497. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_config_alignment.py +0 -0
  498. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_exception_filters.py +0 -0
  499. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_chain.py +0 -0
  500. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_ep_discovery.py +0 -0
  501. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_exceptions.py +0 -0
  502. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_module.py +0 -0
  503. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_routing.py +0 -0
  504. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_middleware_types.py +0 -0
  505. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_p2_retry_traceback.py +0 -0
  506. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_registry_defaults.py +0 -0
  507. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/middleware/test_registry_with_resilience.py +0 -0
  508. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/plugins/test_discovery.py +0 -0
  509. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/plugins/test_engine.py +0 -0
  510. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/plugins/test_state.py +0 -0
  511. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/plugins/test_state_hardening.py +0 -0
  512. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/plugins/test_validation.py +0 -0
  513. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/primitives/test_primitives_constants.py +0 -0
  514. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/primitives/test_registry_advanced.py +0 -0
  515. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/primitives/test_registry_introspection.py +0 -0
  516. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/primitives/test_trusted_html.py +0 -0
  517. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/reactive/test_control.py +0 -0
  518. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/reactive/test_core.py +0 -0
  519. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/reactive/test_facade.py +0 -0
  520. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/reactive/test_retry.py +0 -0
  521. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/reactive/test_subjects.py +0 -0
  522. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/reactive/test_time_ops.py +0 -0
  523. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/reactive/test_transform.py +0 -0
  524. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/__init__.py +0 -0
  525. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_exceptions.py +0 -0
  526. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_guards.py +0 -0
  527. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_hashing.py +0 -0
  528. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_package_hooks_p2.py +0 -0
  529. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_secret_rotation_policy.py +0 -0
  530. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_secrets_rotation.py +0 -0
  531. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_secrets_store.py +0 -0
  532. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_security_api.py +0 -0
  533. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_security_constants.py +0 -0
  534. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_security_exceptions.py +0 -0
  535. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/security/test_security_types.py +0 -0
  536. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/serialization/conftest.py +0 -0
  537. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/serialization/test_schema.py +0 -0
  538. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_constants.py +0 -0
  539. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_di_provider.py +0 -0
  540. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_domain.py +0 -0
  541. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_init.py +0 -0
  542. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_json.py +0 -0
  543. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_registry.py +0 -0
  544. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/serialization/test_serialization_types.py +0 -0
  545. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_app_boot_validation.py +0 -0
  546. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_app_config_and_misc.py +0 -0
  547. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_app_constants.py +0 -0
  548. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_app_discovery.py +0 -0
  549. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_app_health_baseline.py +0 -0
  550. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_app_health_config.py +0 -0
  551. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_app_runner_and_lifespan.py +0 -0
  552. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_app_types.py +0 -0
  553. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_app_validation_and_misc.py +0 -0
  554. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_application.py +0 -0
  555. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_application_base.py +0 -0
  556. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_application_lifecycle.py +0 -0
  557. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_clock_and_pipeline_primitives.py +0 -0
  558. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_codegen.py +0 -0
  559. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_compiler_graph_utils.py +0 -0
  560. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_component_exceptions.py +0 -0
  561. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_concurrency_exceptions.py +0 -0
  562. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_config.py +0 -0
  563. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_config_constants.py +0 -0
  564. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_config_hardening.py +0 -0
  565. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_config_quadkit.py +0 -0
  566. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_config_requirements.py +0 -0
  567. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_config_sources.py +0 -0
  568. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_config_types.py +0 -0
  569. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_config_watcher.py +0 -0
  570. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_container_exceptions.py +0 -0
  571. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_container_introspection.py +0 -0
  572. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_container_override.py +0 -0
  573. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_container_resolver_impl.py +0 -0
  574. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_container_runtime_mixin.py +0 -0
  575. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_context_registry.py +0 -0
  576. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_contract_completeness.py +0 -0
  577. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_core_builder.py +0 -0
  578. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_core_constants.py +0 -0
  579. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_core_lazy.py +0 -0
  580. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_core_module.py +0 -0
  581. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_core_pipeline.py +0 -0
  582. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_dependency_injector.py +0 -0
  583. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_di_constants.py +0 -0
  584. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_di_descriptor.py +0 -0
  585. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_di_module_constants.py +0 -0
  586. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_domain_constants.py +0 -0
  587. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_domain_exceptions.py +0 -0
  588. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_domain_model_base.py +0 -0
  589. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_dynamic_module.py +0 -0
  590. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_events_security_exceptions.py +0 -0
  591. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_execution_result.py +0 -0
  592. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_hatch_build_targets.py +0 -0
  593. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_health_probes.py +0 -0
  594. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_hook_registry.py +0 -0
  595. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_hook_registry_edge_cases.py +0 -0
  596. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_hook_registry_introspection.py +0 -0
  597. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_hook_registry_scenarios.py +0 -0
  598. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_identity_generators_and_ambient.py +0 -0
  599. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_infra_exceptions.py +0 -0
  600. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_input_sanitizers.py +0 -0
  601. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_interceptors.py +0 -0
  602. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_json_serialization_backend.py +0 -0
  603. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_logging_apply_redaction.py +0 -0
  604. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_logging_bridging.py +0 -0
  605. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_logging_constants.py +0 -0
  606. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_logging_debug.py +0 -0
  607. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_logging_di_provider.py +0 -0
  608. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_logging_factory.py +0 -0
  609. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_logging_init.py +0 -0
  610. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_logging_redaction_compound.py +0 -0
  611. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_logging_types.py +0 -0
  612. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_m13_m14_verification.py +0 -0
  613. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_mapper.py +0 -0
  614. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_mapper_enhanced.py +0 -0
  615. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_mapping.py +0 -0
  616. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_middleware_enhancements.py +0 -0
  617. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_middleware_exceptions.py +0 -0
  618. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_middleware_new.py +0 -0
  619. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_module_decorator.py +0 -0
  620. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_module_scan_and_provide.py +0 -0
  621. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_module_system.py +0 -0
  622. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_no_db_imports.py +0 -0
  623. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_observability.py +0 -0
  624. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_orchestrator_parallel.py +0 -0
  625. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_p2_scope_log_level.py +0 -0
  626. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_primitives_context.py +0 -0
  627. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_primitives_data.py +0 -0
  628. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_primitives_registry.py +0 -0
  629. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_provider_boot_enhanced.py +0 -0
  630. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_provider_decorator.py +0 -0
  631. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_quadkit_constants.py +0 -0
  632. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_quadkit_exceptions.py +0 -0
  633. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_repr_helpers.py +0 -0
  634. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_resilience_exceptions.py +0 -0
  635. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_result_combinators.py +0 -0
  636. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_result_core.py +0 -0
  637. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_result_pipeline.py +0 -0
  638. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_result_pipeline_and_utils.py +0 -0
  639. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_result_types_new.py +0 -0
  640. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_result_utils.py +0 -0
  641. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_round22_hardening.py +0 -0
  642. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_round41_hardening.py +0 -0
  643. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_saga_primitives.py +0 -0
  644. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_sampling_and_config.py +0 -0
  645. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_secret_stores_and_rotation.py +0 -0
  646. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_serialization_constants.py +0 -0
  647. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_serialization_exceptions.py +0 -0
  648. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_service_descriptor.py +0 -0
  649. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_structured_logging.py +0 -0
  650. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_time_ops.py +0 -0
  651. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_types.py +0 -0
  652. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_validation_coercion.py +0 -0
  653. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_validation_exceptions.py +0 -0
  654. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_validation_rules.py +0 -0
  655. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/test_validation_validator_engine.py +0 -0
  656. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/__init__.py +0 -0
  657. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/conftest.py +0 -0
  658. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_async_validator.py +0 -0
  659. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_coercion.py +0 -0
  660. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_helpers.py +0 -0
  661. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_validation.py +0 -0
  662. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_validation_constants.py +0 -0
  663. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_validation_constants_new.py +0 -0
  664. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_validation_fields.py +0 -0
  665. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_validation_fields_extended.py +0 -0
  666. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_validation_init.py +0 -0
  667. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_validation_introspection.py +0 -0
  668. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_validation_module.py +0 -0
  669. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_validation_types.py +0 -0
  670. {quadkit-0.0.3 → quadkit-0.0.41}/tests/unit/validation/test_validator.py +0 -0
@@ -0,0 +1,270 @@
1
+ Metadata-Version: 2.5
2
+ Name: quadkit
3
+ Version: 0.0.41
4
+ Summary: Async-first DI/IoC framework for Python — core package
5
+ Project-URL: Homepage, https://dbtinoy-.github.io/quadkit/
6
+ Project-URL: Repository, https://github.com/dbtinoy-/quadkit
7
+ Project-URL: Documentation, https://dbtinoy-.github.io/quadkit/
8
+ Project-URL: Issues, https://github.com/dbtinoy-/quadkit/issues
9
+ Project-URL: Changelog, https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md
10
+ Author-email: Quadkit Framework Team <team@quadkit.dev>
11
+ Maintainer-email: Quadkit Framework Team <team@quadkit.dev>
12
+ License: Apache-2.0
13
+ License-File: LICENSE
14
+ License-File: NOTICE
15
+ Keywords: async,dependency-injection,framework,ioc,provider-pattern
16
+ Classifier: Development Status :: 3 - Alpha
17
+ Classifier: Framework :: AsyncIO
18
+ Classifier: Intended Audience :: Developers
19
+ Classifier: License :: OSI Approved :: Apache Software License
20
+ Classifier: Operating System :: OS Independent
21
+ Classifier: Programming Language :: Python :: 3
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Programming Language :: Python :: 3.13
25
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
26
+ Classifier: Typing :: Typed
27
+ Requires-Python: >=3.11
28
+ Requires-Dist: orjson<4,>=3.0.0
29
+ Requires-Dist: pydantic<3,>=2.10.0
30
+ Requires-Dist: quadkit-contracts>=0.0.2
31
+ Requires-Dist: structlog<27,>=25.1.0
32
+ Provides-Extra: codegen
33
+ Requires-Dist: jinja2<4,>=3.1.0; extra == 'codegen'
34
+ Provides-Extra: dev
35
+ Requires-Dist: mypy<3,>=1.0.0; extra == 'dev'
36
+ Requires-Dist: pre-commit<5,>=3.0.0; extra == 'dev'
37
+ Requires-Dist: ruff<1,>=0.16.4; extra == 'dev'
38
+ Provides-Extra: docs
39
+ Requires-Dist: mkdocs-material<10,>=9.0.0; extra == 'docs'
40
+ Requires-Dist: mkdocs<2,>=1.4.0; extra == 'docs'
41
+ Provides-Extra: security
42
+ Requires-Dist: cryptography<52,>=41.0.0; extra == 'security'
43
+ Provides-Extra: test
44
+ Requires-Dist: pytest-asyncio<2,>=0.21.0; extra == 'test'
45
+ Requires-Dist: pytest-cov<8,>=4.0.0; extra == 'test'
46
+ Requires-Dist: pytest-mock<4,>=3.10.0; extra == 'test'
47
+ Requires-Dist: pytest<10,>=8.0.0; extra == 'test'
48
+ Provides-Extra: web
49
+ Requires-Dist: quadkit-web[granian]>=0.0.2; extra == 'web'
50
+ Description-Content-Type: text/markdown
51
+
52
+ # quadkit
53
+
54
+ ![Quadkit](https://raw.githubusercontent.com/dbtinoy-/quadkit/main/banner.jpg)
55
+
56
+ [![PyPI](https://img.shields.io/pypi/v/quadkit?color=%2322c55e&label=pypi)](https://pypi.org/project/quadkit/)
57
+ [![Python](https://img.shields.io/pypi/pyversions/quadkit?color=%2322c55e)](https://pypi.org/project/quadkit/)
58
+ [![License](https://img.shields.io/pypi/l/quadkit?color=%2322c55e)](https://github.com/dbtinoy-/quadkit/blob/main/LICENSE)
59
+
60
+ Async-first application framework for Python: dependency-injection
61
+ container, application lifecycle, typed configuration, and the `Result`
62
+ error model. This is the core package; everything else published from
63
+ this repository builds on it.
64
+
65
+ For application developers — write providers and modules, bind
66
+ contracts, and let one container boot them in order.
67
+
68
+ What's in the box:
69
+
70
+ - **DI container** — singleton, scoped, and transient bindings, async
71
+ factories, override support for tests; the graph resolves once, at
72
+ boot.
73
+ - **Provider & module system** — providers register bindings, boot
74
+ resources, and shut them down in reverse order; modules compose
75
+ providers into reusable units.
76
+ - **Typed configuration** — `application.yaml` validated against
77
+ dataclass models at boot (unknown keys fail fast), every key
78
+ overridable via `QK_*` environment variables, profiles via `QK_PROFILE`.
79
+ - **The `Result` model** — expected failures are values
80
+ (`Ok`/`Err`), not exceptions; `ResultPipeline` chains them fluently
81
+ while keeping the error type visible to mypy.
82
+ - **Structured logging** — `get_logger()` gives every service a
83
+ keyed, structlog-style logger out of the box.
84
+ - **Domain primitives** — `AggregateRoot`, `Entity`, `DomainEvent`,
85
+ `AbstractUnitOfWork` for DDD-style modelling without a framework
86
+ tax.
87
+
88
+ ## The quadkit family
89
+
90
+ | Package | Role |
91
+ | --- | --- |
92
+ | [`quadkit-contracts`](https://pypi.org/project/quadkit-contracts/) | zero-dependency protocols, types, exception hierarchy |
93
+ | [`quadkit`](https://pypi.org/project/quadkit/) | the framework core — DI container, modules, config, logging, `Result` |
94
+ | [`quadkit-web`](https://pypi.org/project/quadkit-web/) | ASGI layer — controllers, routing, middleware, OpenAPI docs |
95
+ | [`quadkit-cli`](https://pypi.org/project/quadkit-cli/) | project scaffolding and code generators |
96
+ | [`quadkit-testing`](https://pypi.org/project/quadkit-testing/) | in-process test beds, fakes, fixtures |
97
+
98
+ ## Installation
99
+
100
+ ```bash
101
+ uv add quadkit
102
+ # batteries-included web stack:
103
+ uv add "quadkit[web]"
104
+ ```
105
+
106
+ Requires **Python >= 3.11**.
107
+
108
+ ## Minimal working example
109
+
110
+ ```python
111
+ import asyncio
112
+
113
+ from quadkit import Application
114
+ from quadkit.contracts.core.di import ContainerRegistrarProtocol
115
+ from quadkit.di.provider import Provider
116
+
117
+
118
+ class Settings:
119
+ greeting = "hello, quadkit"
120
+
121
+
122
+ class SettingsProvider(Provider):
123
+ async def register(self, container: ContainerRegistrarProtocol) -> None:
124
+ container.singleton(Settings, instance=Settings())
125
+
126
+
127
+ async def main() -> None:
128
+ app = Application()
129
+ app.add_provider(SettingsProvider())
130
+ await app.start()
131
+ try:
132
+ settings = await app.container.resolve(Settings)
133
+ print(settings.greeting)
134
+ finally:
135
+ await app.stop()
136
+
137
+
138
+ asyncio.run(main())
139
+ ```
140
+
141
+ For the web quickstart (a real endpoint in minutes), see
142
+ [the docs](https://dbtinoy-.github.io/quadkit/getting-started/first-app/).
143
+
144
+ ## Expected failures are values
145
+
146
+ `Result[T, E]` keeps the happy path and the failure path in the type
147
+ system — `pipeline()` chains fallible steps without `try/except`
148
+ pyramids, and `mypy` sees the error type at every step:
149
+
150
+ ```python
151
+ from quadkit.result import Err, Ok, pipeline
152
+
153
+
154
+ def parse_port(raw: str):
155
+ try:
156
+ port = int(raw)
157
+ except ValueError as exc:
158
+ return Err(exc)
159
+ if not 1 <= port <= 65535:
160
+ return Err(ValueError(f"port out of range: {port}"))
161
+ return Ok(port)
162
+
163
+
164
+ result = (
165
+ pipeline("8080") # infallible start
166
+ .then(parse_port) # Result[int, ValueError]
167
+ .map(lambda port: f"listening on :{port}")
168
+ .finalize() # Result[str, ValueError]
169
+ )
170
+ ```
171
+
172
+ In controllers, returning an `Err` renders as an RFC 7807 problem
173
+ response automatically — see the
174
+ [error-handling guide](https://dbtinoy-.github.io/quadkit/guides/error-handling/).
175
+
176
+ ## Optional extras
177
+
178
+ | Extra | Contents |
179
+ | --- | --- |
180
+ | `quadkit[web]` | `quadkit-web[granian]` — the full web stack |
181
+ | `quadkit[test]` | `pytest`, `pytest-asyncio`, `pytest-cov`, `pytest-mock` |
182
+ | `quadkit[security]` | `cryptography` (signing/token helpers) |
183
+ | `quadkit[codegen]` | code generation toolchain |
184
+ | `quadkit[docs]` / `[dev]` | documentation / development tooling |
185
+
186
+ ## Public API entry points
187
+
188
+ ```python
189
+ from quadkit import Application, Result, Ok, Err
190
+ from quadkit.di.provider import Provider
191
+ from quadkit.di.container import Container
192
+ from quadkit.config import BaseConfig, ConfigLoader
193
+ from quadkit.logging import get_logger
194
+ from quadkit.domain import AggregateRoot, Entity, DomainEvent, AbstractUnitOfWork
195
+ from quadkit.contracts.core.di import (
196
+ ContainerRegistrarProtocol,
197
+ ContainerResolverProtocol,
198
+ )
199
+ ```
200
+
201
+ Providers can also define an async `boot()` (acquire resources) and
202
+ `shutdown()` (release them, in reverse registration order) — the
203
+ container drives the whole lifecycle.
204
+
205
+ Concepts: [contracts](https://dbtinoy-.github.io/quadkit/concepts/contracts/) ·
206
+ [dependency injection](https://dbtinoy-.github.io/quadkit/concepts/dependency-injection/) ·
207
+ [modules](https://dbtinoy-.github.io/quadkit/concepts/modules/) ·
208
+ [lifecycle](https://dbtinoy-.github.io/quadkit/concepts/lifecycle/) ·
209
+ [async model](https://dbtinoy-.github.io/quadkit/concepts/async-model/).
210
+
211
+ ## Configuration
212
+
213
+ `application.yaml` at the working directory, validated against typed
214
+ config models at boot (unknown keys fail fast); application metadata
215
+ lives at the root (`name`, `version`, `description`); every typed key
216
+ overrides from the environment with `QK_<SECTION>__<KEY>`. Use
217
+ `QK_PROFILE` to select a profile.
218
+
219
+ ```bash
220
+ QK_QUADKIT__LOGGING__LEVEL=DEBUG # fold into the root `logging` section
221
+ QK_PROFILE=production # select a profile block
222
+ ```
223
+
224
+ See
225
+ [configuration](https://dbtinoy-.github.io/quadkit/getting-started/configuration/).
226
+
227
+ ## Error handling
228
+
229
+ `Result[T, E]` for expected domain failures; the
230
+ `quadkit-contracts` exception hierarchy (`QuadkitError → DomainError →
231
+ NotFoundError`, `ValidationError`, `ConflictError`, ...) for everything
232
+ else. The web layer renders both as problem responses — see
233
+ [error handling](https://dbtinoy-.github.io/quadkit/guides/error-handling/).
234
+
235
+ ## Testing
236
+
237
+ Pair with `quadkit-testing`: `AppTestBed.from_factory(create_app)` boots
238
+ your application in-process (with `overrides={Contract: fake}` for test
239
+ doubles), no server required. See
240
+ [testing](https://dbtinoy-.github.io/quadkit/getting-started/testing/).
241
+
242
+ ## Security
243
+
244
+ Never put secrets in `application.yaml` — pass them through `QK_*`
245
+ environment variables or a secret store. Unexpected exceptions never
246
+ leak internals to clients. See
247
+ [secure configuration](https://dbtinoy-.github.io/quadkit/security/secure-configuration/) and
248
+ report vulnerabilities privately per
249
+ [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md).
250
+
251
+ ## Stability
252
+
253
+ Version `0.0.3` in the `0.x` series, released in lockstep with the
254
+ other four distributions; APIs may change between minor versions until
255
+ 1.0 — pin an exact version
256
+ (`quadkit==0.0.3`) or a tight range (`>=0.0.3,<0.1.0`). Full policy:
257
+ [stability and compatibility](https://dbtinoy-.github.io/quadkit/reference/stability/).
258
+
259
+ ## Links
260
+
261
+ - **Documentation** — <https://dbtinoy-.github.io/quadkit/>
262
+ - **Getting started** — <https://dbtinoy-.github.io/quadkit/getting-started/installation/>
263
+ - **Changelog** — <https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md>
264
+ - **Issues** — <https://github.com/dbtinoy-/quadkit/issues>
265
+ - **Security** — report privately per [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md)
266
+ - **Contributing** — [CONTRIBUTING.md](https://github.com/dbtinoy-/quadkit/blob/main/CONTRIBUTING.md)
267
+
268
+ Apache-2.0 — see [LICENSE](https://github.com/dbtinoy-/quadkit/blob/main/LICENSE). "Quadkit" and the
269
+ Quadkit logo are trademarks of the project — see
270
+ [TRADEMARK.md](https://github.com/dbtinoy-/quadkit/blob/main/TRADEMARK.md).
@@ -0,0 +1,219 @@
1
+ # quadkit
2
+
3
+ ![Quadkit](https://raw.githubusercontent.com/dbtinoy-/quadkit/main/banner.jpg)
4
+
5
+ [![PyPI](https://img.shields.io/pypi/v/quadkit?color=%2322c55e&label=pypi)](https://pypi.org/project/quadkit/)
6
+ [![Python](https://img.shields.io/pypi/pyversions/quadkit?color=%2322c55e)](https://pypi.org/project/quadkit/)
7
+ [![License](https://img.shields.io/pypi/l/quadkit?color=%2322c55e)](https://github.com/dbtinoy-/quadkit/blob/main/LICENSE)
8
+
9
+ Async-first application framework for Python: dependency-injection
10
+ container, application lifecycle, typed configuration, and the `Result`
11
+ error model. This is the core package; everything else published from
12
+ this repository builds on it.
13
+
14
+ For application developers — write providers and modules, bind
15
+ contracts, and let one container boot them in order.
16
+
17
+ What's in the box:
18
+
19
+ - **DI container** — singleton, scoped, and transient bindings, async
20
+ factories, override support for tests; the graph resolves once, at
21
+ boot.
22
+ - **Provider & module system** — providers register bindings, boot
23
+ resources, and shut them down in reverse order; modules compose
24
+ providers into reusable units.
25
+ - **Typed configuration** — `application.yaml` validated against
26
+ dataclass models at boot (unknown keys fail fast), every key
27
+ overridable via `QK_*` environment variables, profiles via `QK_PROFILE`.
28
+ - **The `Result` model** — expected failures are values
29
+ (`Ok`/`Err`), not exceptions; `ResultPipeline` chains them fluently
30
+ while keeping the error type visible to mypy.
31
+ - **Structured logging** — `get_logger()` gives every service a
32
+ keyed, structlog-style logger out of the box.
33
+ - **Domain primitives** — `AggregateRoot`, `Entity`, `DomainEvent`,
34
+ `AbstractUnitOfWork` for DDD-style modelling without a framework
35
+ tax.
36
+
37
+ ## The quadkit family
38
+
39
+ | Package | Role |
40
+ | --- | --- |
41
+ | [`quadkit-contracts`](https://pypi.org/project/quadkit-contracts/) | zero-dependency protocols, types, exception hierarchy |
42
+ | [`quadkit`](https://pypi.org/project/quadkit/) | the framework core — DI container, modules, config, logging, `Result` |
43
+ | [`quadkit-web`](https://pypi.org/project/quadkit-web/) | ASGI layer — controllers, routing, middleware, OpenAPI docs |
44
+ | [`quadkit-cli`](https://pypi.org/project/quadkit-cli/) | project scaffolding and code generators |
45
+ | [`quadkit-testing`](https://pypi.org/project/quadkit-testing/) | in-process test beds, fakes, fixtures |
46
+
47
+ ## Installation
48
+
49
+ ```bash
50
+ uv add quadkit
51
+ # batteries-included web stack:
52
+ uv add "quadkit[web]"
53
+ ```
54
+
55
+ Requires **Python >= 3.11**.
56
+
57
+ ## Minimal working example
58
+
59
+ ```python
60
+ import asyncio
61
+
62
+ from quadkit import Application
63
+ from quadkit.contracts.core.di import ContainerRegistrarProtocol
64
+ from quadkit.di.provider import Provider
65
+
66
+
67
+ class Settings:
68
+ greeting = "hello, quadkit"
69
+
70
+
71
+ class SettingsProvider(Provider):
72
+ async def register(self, container: ContainerRegistrarProtocol) -> None:
73
+ container.singleton(Settings, instance=Settings())
74
+
75
+
76
+ async def main() -> None:
77
+ app = Application()
78
+ app.add_provider(SettingsProvider())
79
+ await app.start()
80
+ try:
81
+ settings = await app.container.resolve(Settings)
82
+ print(settings.greeting)
83
+ finally:
84
+ await app.stop()
85
+
86
+
87
+ asyncio.run(main())
88
+ ```
89
+
90
+ For the web quickstart (a real endpoint in minutes), see
91
+ [the docs](https://dbtinoy-.github.io/quadkit/getting-started/first-app/).
92
+
93
+ ## Expected failures are values
94
+
95
+ `Result[T, E]` keeps the happy path and the failure path in the type
96
+ system — `pipeline()` chains fallible steps without `try/except`
97
+ pyramids, and `mypy` sees the error type at every step:
98
+
99
+ ```python
100
+ from quadkit.result import Err, Ok, pipeline
101
+
102
+
103
+ def parse_port(raw: str):
104
+ try:
105
+ port = int(raw)
106
+ except ValueError as exc:
107
+ return Err(exc)
108
+ if not 1 <= port <= 65535:
109
+ return Err(ValueError(f"port out of range: {port}"))
110
+ return Ok(port)
111
+
112
+
113
+ result = (
114
+ pipeline("8080") # infallible start
115
+ .then(parse_port) # Result[int, ValueError]
116
+ .map(lambda port: f"listening on :{port}")
117
+ .finalize() # Result[str, ValueError]
118
+ )
119
+ ```
120
+
121
+ In controllers, returning an `Err` renders as an RFC 7807 problem
122
+ response automatically — see the
123
+ [error-handling guide](https://dbtinoy-.github.io/quadkit/guides/error-handling/).
124
+
125
+ ## Optional extras
126
+
127
+ | Extra | Contents |
128
+ | --- | --- |
129
+ | `quadkit[web]` | `quadkit-web[granian]` — the full web stack |
130
+ | `quadkit[test]` | `pytest`, `pytest-asyncio`, `pytest-cov`, `pytest-mock` |
131
+ | `quadkit[security]` | `cryptography` (signing/token helpers) |
132
+ | `quadkit[codegen]` | code generation toolchain |
133
+ | `quadkit[docs]` / `[dev]` | documentation / development tooling |
134
+
135
+ ## Public API entry points
136
+
137
+ ```python
138
+ from quadkit import Application, Result, Ok, Err
139
+ from quadkit.di.provider import Provider
140
+ from quadkit.di.container import Container
141
+ from quadkit.config import BaseConfig, ConfigLoader
142
+ from quadkit.logging import get_logger
143
+ from quadkit.domain import AggregateRoot, Entity, DomainEvent, AbstractUnitOfWork
144
+ from quadkit.contracts.core.di import (
145
+ ContainerRegistrarProtocol,
146
+ ContainerResolverProtocol,
147
+ )
148
+ ```
149
+
150
+ Providers can also define an async `boot()` (acquire resources) and
151
+ `shutdown()` (release them, in reverse registration order) — the
152
+ container drives the whole lifecycle.
153
+
154
+ Concepts: [contracts](https://dbtinoy-.github.io/quadkit/concepts/contracts/) ·
155
+ [dependency injection](https://dbtinoy-.github.io/quadkit/concepts/dependency-injection/) ·
156
+ [modules](https://dbtinoy-.github.io/quadkit/concepts/modules/) ·
157
+ [lifecycle](https://dbtinoy-.github.io/quadkit/concepts/lifecycle/) ·
158
+ [async model](https://dbtinoy-.github.io/quadkit/concepts/async-model/).
159
+
160
+ ## Configuration
161
+
162
+ `application.yaml` at the working directory, validated against typed
163
+ config models at boot (unknown keys fail fast); application metadata
164
+ lives at the root (`name`, `version`, `description`); every typed key
165
+ overrides from the environment with `QK_<SECTION>__<KEY>`. Use
166
+ `QK_PROFILE` to select a profile.
167
+
168
+ ```bash
169
+ QK_QUADKIT__LOGGING__LEVEL=DEBUG # fold into the root `logging` section
170
+ QK_PROFILE=production # select a profile block
171
+ ```
172
+
173
+ See
174
+ [configuration](https://dbtinoy-.github.io/quadkit/getting-started/configuration/).
175
+
176
+ ## Error handling
177
+
178
+ `Result[T, E]` for expected domain failures; the
179
+ `quadkit-contracts` exception hierarchy (`QuadkitError → DomainError →
180
+ NotFoundError`, `ValidationError`, `ConflictError`, ...) for everything
181
+ else. The web layer renders both as problem responses — see
182
+ [error handling](https://dbtinoy-.github.io/quadkit/guides/error-handling/).
183
+
184
+ ## Testing
185
+
186
+ Pair with `quadkit-testing`: `AppTestBed.from_factory(create_app)` boots
187
+ your application in-process (with `overrides={Contract: fake}` for test
188
+ doubles), no server required. See
189
+ [testing](https://dbtinoy-.github.io/quadkit/getting-started/testing/).
190
+
191
+ ## Security
192
+
193
+ Never put secrets in `application.yaml` — pass them through `QK_*`
194
+ environment variables or a secret store. Unexpected exceptions never
195
+ leak internals to clients. See
196
+ [secure configuration](https://dbtinoy-.github.io/quadkit/security/secure-configuration/) and
197
+ report vulnerabilities privately per
198
+ [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md).
199
+
200
+ ## Stability
201
+
202
+ Version `0.0.3` in the `0.x` series, released in lockstep with the
203
+ other four distributions; APIs may change between minor versions until
204
+ 1.0 — pin an exact version
205
+ (`quadkit==0.0.3`) or a tight range (`>=0.0.3,<0.1.0`). Full policy:
206
+ [stability and compatibility](https://dbtinoy-.github.io/quadkit/reference/stability/).
207
+
208
+ ## Links
209
+
210
+ - **Documentation** — <https://dbtinoy-.github.io/quadkit/>
211
+ - **Getting started** — <https://dbtinoy-.github.io/quadkit/getting-started/installation/>
212
+ - **Changelog** — <https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md>
213
+ - **Issues** — <https://github.com/dbtinoy-/quadkit/issues>
214
+ - **Security** — report privately per [SECURITY.md](https://github.com/dbtinoy-/quadkit/blob/main/SECURITY.md)
215
+ - **Contributing** — [CONTRIBUTING.md](https://github.com/dbtinoy-/quadkit/blob/main/CONTRIBUTING.md)
216
+
217
+ Apache-2.0 — see [LICENSE](https://github.com/dbtinoy-/quadkit/blob/main/LICENSE). "Quadkit" and the
218
+ Quadkit logo are trademarks of the project — see
219
+ [TRADEMARK.md](https://github.com/dbtinoy-/quadkit/blob/main/TRADEMARK.md).
@@ -119,9 +119,6 @@ concurrency:
119
119
  # Default capacity for BoundedChannel instances.
120
120
  default_channel_capacity: 100
121
121
 
122
- # Default semaphore acquisition timeout (seconds).
123
- default_semaphore_timeout: 30.0
124
-
125
122
  # Number of worker threads for the thread pool executor.
126
123
  worker_threads: 4
127
124
 
@@ -132,8 +129,6 @@ concurrency:
132
129
  dispatcher:
133
130
  max_concurrent_tasks: 100
134
131
  queue_timeout: 30.0
135
- retry_failed_tasks: true
136
- max_retries: 3
137
132
 
138
133
  pool:
139
134
  min_size: 1
@@ -185,9 +180,6 @@ middleware:
185
180
  default_retry_count: 3
186
181
  default_retry_delay: 1.0
187
182
 
188
- # HTTP header for correlation ID propagation.
189
- correlation_header: "X-Correlation-ID"
190
-
191
183
  # Default timeout for TimeoutMiddleware (seconds).
192
184
  default_timeout: 30.0
193
185
 
@@ -203,15 +195,6 @@ middleware:
203
195
  # Rate limiter: window duration in seconds.
204
196
  rate_limit_window: 60.0
205
197
 
206
- # -- Domain ----------------------------------------------------------------
207
-
208
- domain:
209
- # Raise at runtime when code mutates a frozen ValueObject.
210
- strict_immutability: false
211
-
212
- # Prefix prepended to auto-generated entity IDs (deprecated -- use identity.prefix_map).
213
- id_prefix: ""
214
-
215
198
  # -- Mapping ---------------------------------------------------------------
216
199
 
217
200
  mapping:
@@ -27,7 +27,7 @@ build-backend = "hatchling.build"
27
27
 
28
28
  [project]
29
29
  name = "quadkit"
30
- version = "0.0.3"
30
+ version = "0.0.41"
31
31
  description = "Async-first DI/IoC framework for Python — core package"
32
32
  readme = "README.md"
33
33
  requires-python = ">=3.11"
@@ -68,9 +68,9 @@ maintainers = [
68
68
 
69
69
  dependencies = [
70
70
  "quadkit-contracts>=0.0.2",
71
- "orjson>=3.0.0",
71
+ "orjson>=3.0.0,<4",
72
72
  "structlog>=25.1.0,<27", # Structured logging foundation
73
- "pydantic>=2.10.0", # Required: used unconditionally by config, validation
73
+ "pydantic>=2.10.0,<3", # Required: used unconditionally by config, validation
74
74
  ]
75
75
 
76
76
  # =============================================================================
@@ -85,33 +85,33 @@ dependencies = [
85
85
  # ── Development ────────────────────────────────────────────────────────
86
86
 
87
87
  dev = [
88
- "ruff>=0.16.4",
89
- "mypy>=1.0.0",
90
- "pre-commit>=3.0.0",
88
+ "ruff>=0.16.4,<1",
89
+ "mypy>=1.0.0,<3",
90
+ "pre-commit>=3.0.0,<5",
91
91
  ]
92
92
 
93
93
  # Codegen extra — opt-in template engine for quadkit.codegen scaffolders.
94
94
  # The base classes import jinja2 lazily; only template rendering needs it.
95
95
  codegen = [
96
- "jinja2>=3.1.0",
96
+ "jinja2>=3.1.0,<4",
97
97
  ]
98
98
 
99
99
  test = [
100
- "pytest>=8.0.0",
101
- "pytest-asyncio>=0.21.0",
102
- "pytest-cov>=4.0.0",
103
- "pytest-mock>=3.10.0",
100
+ "pytest>=8.0.0,<10",
101
+ "pytest-asyncio>=0.21.0,<2",
102
+ "pytest-cov>=4.0.0,<8",
103
+ "pytest-mock>=3.10.0,<4",
104
104
  ]
105
105
 
106
106
  docs = [
107
- "mkdocs>=1.4.0",
108
- "mkdocs-material>=9.0.0",
107
+ "mkdocs>=1.4.0,<2",
108
+ "mkdocs-material>=9.0.0,<10",
109
109
  ]
110
110
 
111
111
  # Security extras — opt-in deps for quadkit.security.* implementations
112
112
  # Encryption requires cryptography.
113
113
  security = [
114
- "cryptography>=41.0.0",
114
+ "cryptography>=41.0.0,<52",
115
115
  ]
116
116
 
117
117
  # ── Extension Convenience Groups ──────────────────────────────────────
@@ -135,9 +135,9 @@ web = [
135
135
  # =============================================================================
136
136
 
137
137
  [project.urls]
138
- Homepage = "https://quadkit.dev"
138
+ Homepage = "https://dbtinoy-.github.io/quadkit/"
139
139
  Repository = "https://github.com/dbtinoy-/quadkit"
140
- Documentation = "https://quadkit.dev"
140
+ Documentation = "https://dbtinoy-.github.io/quadkit/"
141
141
  Issues = "https://github.com/dbtinoy-/quadkit/issues"
142
142
  Changelog = "https://github.com/dbtinoy-/quadkit/blob/main/CHANGELOG.md"
143
143
 
@@ -283,5 +283,3 @@ show_missing = true
283
283
 
284
284
  [tool.uv.sources]
285
285
  quadkit-contracts = { workspace = true }
286
-
287
-
@@ -13,7 +13,6 @@ from dataclasses import dataclass, field
13
13
  from quadkit.concurrency.constants import (
14
14
  DEFAULT_CHANNEL_CAPACITY,
15
15
  DEFAULT_DISPATCHER_SHUTDOWN_TIMEOUT,
16
- DEFAULT_SEMAPHORE_TIMEOUT,
17
16
  DEFAULT_WORKER_THREADS,
18
17
  )
19
18
 
@@ -98,11 +97,6 @@ class DispatcherConfig:
98
97
  Attributes:
99
98
  max_concurrent_tasks: Maximum number of concurrent tasks (>= 1).
100
99
  queue_timeout: Queue timeout in seconds (>= 0).
101
- retry_failed_tasks: Reserved: DispatcherImpl propagates task
102
- exceptions today (retrying non-idempotent tasks silently would be
103
- unsafe); will gate automatic retries when implemented.
104
- max_retries: Maximum number of retries (>= 0); only meaningful
105
- together with retry_failed_tasks (see above).
106
100
  pool: Worker pool configuration.
107
101
  cpu_pool: CPU-bound thread pool configuration.
108
102
  io_pool: I/O-bound thread pool configuration.
@@ -110,8 +104,6 @@ class DispatcherConfig:
110
104
 
111
105
  max_concurrent_tasks: int = 100
112
106
  queue_timeout: float = 30.0
113
- retry_failed_tasks: bool = True
114
- max_retries: int = 3
115
107
  pool: PoolConfig = field(default_factory=PoolConfig)
116
108
  cpu_pool: ThreadPoolConfig = field(default_factory=ThreadPoolConfig)
117
109
  io_pool: ThreadPoolConfig = field(default_factory=ThreadPoolConfig)
@@ -123,8 +115,6 @@ class DispatcherConfig:
123
115
  )
124
116
  if self.queue_timeout < 0:
125
117
  raise ValueError(f"queue_timeout must be >= 0, got {self.queue_timeout}")
126
- if self.max_retries < 0:
127
- raise ValueError(f"max_retries must be >= 0, got {self.max_retries}")
128
118
 
129
119
  def get_cpu_pool_config(self) -> ThreadPoolConfig:
130
120
  """Return the CPU-bound thread pool configuration.
@@ -156,11 +146,6 @@ class ConcurrencyConfig:
156
146
  # consumed by: ConcurrencyProvider.boot() -> BoundedChannel.configure();
157
147
  # channels created without an explicit capacity pick this up (explicit
158
148
  # ``capacity=0`` still means unbounded).
159
- default_semaphore_timeout: float = DEFAULT_SEMAPHORE_TIMEOUT
160
- # reserved: core dispatch uses ``asyncio.Semaphore`` with no default
161
- # acquisition timeout; applying one would convert unbounded waits in
162
- # saturated batch workloads into timeouts. Wire when a dedicated
163
- # Semaphore primitive lands.
164
149
  worker_threads: int = DEFAULT_WORKER_THREADS
165
150
  # consumed by: thread pool executor in ConcurrencyProvider.register()
166
151
  dispatcher_shutdown_timeout: float = DEFAULT_DISPATCHER_SHUTDOWN_TIMEOUT
@@ -25,9 +25,6 @@ ENV_NESTED_DELIMITER: str = "__"
25
25
  DEFAULT_CHANNEL_CAPACITY: int = 100
26
26
  """Default bounded-channel buffer size; consumed by: Channel.__init__."""
27
27
 
28
- DEFAULT_SEMAPHORE_TIMEOUT: float = 30.0
29
- """Default semaphore acquisition timeout in seconds; consumed by: Semaphore default."""
30
-
31
28
  DEFAULT_WORKER_THREADS: int = 4
32
29
  """Default thread-pool size; consumed by: thread pool executor in Dispatcher."""
33
30
 
@@ -37,7 +34,6 @@ DEFAULT_DISPATCHER_SHUTDOWN_TIMEOUT: float = 10.0
37
34
  __all__ = [
38
35
  "DEFAULT_CHANNEL_CAPACITY",
39
36
  "DEFAULT_DISPATCHER_SHUTDOWN_TIMEOUT",
40
- "DEFAULT_SEMAPHORE_TIMEOUT",
41
37
  "DEFAULT_WORKER_THREADS",
42
38
  "ENV_NESTED_DELIMITER",
43
39
  "ENV_PREFIX",