quadkit 0.0.3__tar.gz → 0.0.4__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 (685) hide show
  1. quadkit-0.0.4/.gitignore +183 -0
  2. quadkit-0.0.4/PKG-INFO +270 -0
  3. quadkit-0.0.4/README.md +219 -0
  4. quadkit-0.0.4/docs/ARCHITECTURE.md +252 -0
  5. quadkit-0.0.4/docs/CONFIGURATION.md +126 -0
  6. quadkit-0.0.4/docs/GUIDE.md +451 -0
  7. quadkit-0.0.4/docs/HOWTOS.md +275 -0
  8. quadkit-0.0.4/docs/QUICKSTART.md +91 -0
  9. quadkit-0.0.4/docs/SECURITY.md +165 -0
  10. quadkit-0.0.4/docs/TROUBLESHOOTING.md +217 -0
  11. quadkit-0.0.4/docs/gifs/hero/app.py +455 -0
  12. quadkit-0.0.4/docs/gifs/hero/hero.tape +71 -0
  13. quadkit-0.0.4/docs/gifs/hero/quadkit-hero.gif +0 -0
  14. quadkit-0.0.4/docs/plugins.md +54 -0
  15. {quadkit-0.0.3 → quadkit-0.0.4}/example.yaml +2 -19
  16. {quadkit-0.0.3 → quadkit-0.0.4}/pyproject.toml +20 -19
  17. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/module.py +1 -1
  18. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/config.py +0 -15
  19. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/constants.py +0 -4
  20. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/executors/dispatcher.py +5 -4
  21. quadkit-0.0.4/src/quadkit/di/container/container.py +281 -0
  22. quadkit-0.0.4/src/quadkit/di/container/container_resolution.py +292 -0
  23. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/extensions/discovery.py +1 -1
  24. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/phases/collect.py +2 -1
  25. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/errors.py +6 -4
  26. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/__init__.py +0 -5
  27. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/unit_of_work.py +1 -1
  28. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/configurator.py +1 -1
  29. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/factory.py +2 -1
  30. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/redaction.py +11 -0
  31. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/__init__.py +0 -1
  32. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/builtins/caching.py +3 -1
  33. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/builtins/resilience.py +1 -1
  34. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/builtins/routing.py +5 -2
  35. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/builtins/validation.py +5 -3
  36. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/config.py +2 -15
  37. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/constants.py +0 -4
  38. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/observability/core.py +1 -1
  39. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/pipeline.py +1 -1
  40. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/registry/introspection.py +1 -1
  41. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/config.py +1 -1
  42. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/sanitization/sanitizer.py +27 -8
  43. quadkit-0.0.4/tests/integration/test_corrected_patterns_integration.py +254 -0
  44. quadkit-0.0.4/tests/integration/test_database_integration.py +256 -0
  45. quadkit-0.0.4/tests/integration/test_monitor_config_integration.py +22 -0
  46. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_concurrency_config.py +0 -6
  47. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_concurrency_constants.py +0 -5
  48. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_concurrency_constants_new.py +0 -4
  49. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_config_pool.py +0 -15
  50. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_container_visibility.py +38 -0
  51. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_di_provider_config_wiring.py +1 -1
  52. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_middleware_constants.py +0 -7
  53. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_middleware_constants_new.py +0 -4
  54. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_security_components_p2.py +3 -3
  55. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_base_and_misc_exceptions.py +2 -1
  56. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_concurrency_constants.py +3 -13
  57. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_logging_redaction.py +79 -5
  58. quadkit-0.0.3/.gitignore +0 -24
  59. quadkit-0.0.3/PKG-INFO +0 -179
  60. quadkit-0.0.3/README.md +0 -128
  61. quadkit-0.0.3/src/quadkit/di/container/container.py +0 -526
  62. quadkit-0.0.3/src/quadkit/domain/config.py +0 -38
  63. quadkit-0.0.3/src/quadkit/security/protocols.py +0 -15
  64. {quadkit-0.0.3 → quadkit-0.0.4}/CHANGELOG.md +0 -0
  65. {quadkit-0.0.3 → quadkit-0.0.4}/LICENSE +0 -0
  66. {quadkit-0.0.3 → quadkit-0.0.4}/NOTICE +0 -0
  67. {quadkit-0.0.3 → quadkit-0.0.4}/src/import_error.txt +0 -0
  68. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/__init__.py +0 -0
  69. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/__init__.py +0 -0
  70. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/asgi_lifespan.py +0 -0
  71. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/base.py +0 -0
  72. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/config/__init__.py +0 -0
  73. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/config/discovery.py +0 -0
  74. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/config/models.py +0 -0
  75. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/config_validation.py +0 -0
  76. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/constants.py +0 -0
  77. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/di/__init__.py +0 -0
  78. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/di/provider.py +0 -0
  79. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/discovery.py +0 -0
  80. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/events.py +0 -0
  81. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/exceptions.py +0 -0
  82. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/factory.py +0 -0
  83. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/health_probes.py +0 -0
  84. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/injectable_provider.py +0 -0
  85. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/invoker.py +0 -0
  86. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/lifecycle.py +0 -0
  87. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/pipeline.py +0 -0
  88. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/protocols.py +0 -0
  89. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/py.typed +0 -0
  90. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/runner.py +0 -0
  91. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/secrets.py +0 -0
  92. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/standard.py +0 -0
  93. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/app/types.py +0 -0
  94. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/codegen/__init__.py +0 -0
  95. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/codegen/base.py +0 -0
  96. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/__init__.py +0 -0
  97. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/bridges/__init__.py +0 -0
  98. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/bridges/py.typed +0 -0
  99. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/bridges/sync_bridge.py +0 -0
  100. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/channels/__init__.py +0 -0
  101. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/channels/channel.py +0 -0
  102. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/channels/py.typed +0 -0
  103. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/di/__init__.py +0 -0
  104. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/di/provider.py +0 -0
  105. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/di/py.typed +0 -0
  106. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/exceptions.py +0 -0
  107. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/executors/__init__.py +0 -0
  108. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/executors/parallel.py +0 -0
  109. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/executors/py.typed +0 -0
  110. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/executors/task_manager.py +0 -0
  111. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/locks/__init__.py +0 -0
  112. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/locks/py.typed +0 -0
  113. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/locks/rwlock.py +0 -0
  114. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/module.py +0 -0
  115. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/py.typed +0 -0
  116. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/concurrency/task_utils.py +0 -0
  117. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/__init__.py +0 -0
  118. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/base.py +0 -0
  119. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/constants.py +0 -0
  120. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/di/__init__.py +0 -0
  121. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/di/provider.py +0 -0
  122. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/exceptions.py +0 -0
  123. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/lib/__init__.py +0 -0
  124. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/lib/merge.py +0 -0
  125. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/lib/registry.py +0 -0
  126. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/lib/sources.py +0 -0
  127. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/lib/validation.py +0 -0
  128. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/lib/watcher.py +0 -0
  129. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/main.py +0 -0
  130. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/protocols.py +0 -0
  131. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/secrets.py +0 -0
  132. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/config/types.py +0 -0
  133. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/constants.py +0 -0
  134. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/__init__.py +0 -0
  135. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/_graph.py +0 -0
  136. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/builder.py +0 -0
  137. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/config/__init__.py +0 -0
  138. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/config/models.py +0 -0
  139. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/constants.py +0 -0
  140. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/container/__init__.py +0 -0
  141. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/container/container_introspection.py +0 -0
  142. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/container/container_runtime.py +0 -0
  143. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/container/registrar.py +0 -0
  144. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/container/resolver.py +0 -0
  145. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/container/scope.py +0 -0
  146. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/container/validation.py +0 -0
  147. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/context.py +0 -0
  148. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/decorators.py +0 -0
  149. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/exceptions.py +0 -0
  150. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/extensions/__init__.py +0 -0
  151. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/extensions/aop_interceptors.py +0 -0
  152. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/extensions/interceptors.py +0 -0
  153. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/extensions/strategies.py +0 -0
  154. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/extensions/validator.py +0 -0
  155. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/function_provider.py +0 -0
  156. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/integration/__init__.py +0 -0
  157. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/integration/provider.py +0 -0
  158. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/markers.py +0 -0
  159. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/__init__.py +0 -0
  160. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/base.py +0 -0
  161. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/__init__.py +0 -0
  162. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/_graph_utils.py +0 -0
  163. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/compiler.py +0 -0
  164. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/context.py +0 -0
  165. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/phases/__init__.py +0 -0
  166. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/phases/detect_cycles.py +0 -0
  167. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/phases/expand.py +0 -0
  168. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/phases/order.py +0 -0
  169. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/phases/protocol.py +0 -0
  170. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/phases/validate.py +0 -0
  171. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/compiler/phases/visibility.py +0 -0
  172. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/constants.py +0 -0
  173. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/decorator.py +0 -0
  174. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/dynamic.py +0 -0
  175. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/graph.py +0 -0
  176. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/introspection.py +0 -0
  177. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/metadata.py +0 -0
  178. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/module/registry.py +0 -0
  179. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/orchestrator/__init__.py +0 -0
  180. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/orchestrator/events.py +0 -0
  181. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/orchestrator/health.py +0 -0
  182. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/orchestrator/lifecycle.py +0 -0
  183. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/orchestrator/orchestrator.py +0 -0
  184. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/orchestrator/registry.py +0 -0
  185. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/protocols.py +0 -0
  186. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/provider.py +0 -0
  187. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/provider_utils.py +0 -0
  188. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/py.typed +0 -0
  189. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/__init__.py +0 -0
  190. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/context.py +0 -0
  191. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/descriptor.py +0 -0
  192. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/diagnostics.py +0 -0
  193. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/injector.py +0 -0
  194. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/invoker.py +0 -0
  195. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/registry.py +0 -0
  196. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/resolver.py +0 -0
  197. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/store.py +0 -0
  198. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/type_hints.py +0 -0
  199. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/resolution/validator.py +0 -0
  200. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/di/types.py +0 -0
  201. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/constants.py +0 -0
  202. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/exceptions.py +0 -0
  203. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/models/__init__.py +0 -0
  204. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/models/aggregate.py +0 -0
  205. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/models/base.py +0 -0
  206. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/models/coercion.py +0 -0
  207. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/models/entity.py +0 -0
  208. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/models/factory.py +0 -0
  209. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/models/py.typed +0 -0
  210. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/models/value_object.py +0 -0
  211. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/module.py +0 -0
  212. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/py.typed +0 -0
  213. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/domain/types.py +0 -0
  214. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/exceptions.py +0 -0
  215. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/hooks/__init__.py +0 -0
  216. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/hooks/ambient.py +0 -0
  217. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/hooks/registry.py +0 -0
  218. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/hooks/types.py +0 -0
  219. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/identity/__init__.py +0 -0
  220. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/identity/ambient.py +0 -0
  221. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/identity/config.py +0 -0
  222. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/identity/constants.py +0 -0
  223. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/identity/di/__init__.py +0 -0
  224. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/identity/di/provider.py +0 -0
  225. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/identity/generator.py +0 -0
  226. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/README.md +0 -0
  227. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/__init__.py +0 -0
  228. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/config/__init__.py +0 -0
  229. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/config/models.py +0 -0
  230. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/config/redaction.py +0 -0
  231. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/config/sampling.py +0 -0
  232. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/constants.py +0 -0
  233. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/debug.py +0 -0
  234. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/di/__init__.py +0 -0
  235. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/di/provider.py +0 -0
  236. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/processors.py +0 -0
  237. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/logging/types.py +0 -0
  238. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/__init__.py +0 -0
  239. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/config.py +0 -0
  240. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/constants.py +0 -0
  241. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/core/__init__.py +0 -0
  242. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/core/mapper.py +0 -0
  243. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/di/__init__.py +0 -0
  244. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/di/provider.py +0 -0
  245. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/exceptions.py +0 -0
  246. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/module.py +0 -0
  247. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/protocols.py +0 -0
  248. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/py.typed +0 -0
  249. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/mapping/types.py +0 -0
  250. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/builtins/__init__.py +0 -0
  251. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/builtins/di.py +0 -0
  252. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/builtins/observability.py +0 -0
  253. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/core/__init__.py +0 -0
  254. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/core/chain.py +0 -0
  255. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/core/exception_filters.py +0 -0
  256. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/core/registry.py +0 -0
  257. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/di/__init__.py +0 -0
  258. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/di/provider.py +0 -0
  259. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/exceptions.py +0 -0
  260. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/module.py +0 -0
  261. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/middleware/types.py +0 -0
  262. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/module.py +0 -0
  263. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/observability/__init__.py +0 -0
  264. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/observability/di/__init__.py +0 -0
  265. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/observability/di/sub_providers/__init__.py +0 -0
  266. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/observability/di/sub_providers/observability.py +0 -0
  267. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/plugins/__init__.py +0 -0
  268. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/plugins/discovery.py +0 -0
  269. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/plugins/engine.py +0 -0
  270. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/plugins/exceptions.py +0 -0
  271. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/plugins/module.py +0 -0
  272. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/plugins/state.py +0 -0
  273. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/__init__.py +0 -0
  274. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/builder.py +0 -0
  275. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/clock.py +0 -0
  276. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/constants.py +0 -0
  277. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/context.py +0 -0
  278. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/context_keys.py +0 -0
  279. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/context_registry.py +0 -0
  280. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/data.py +0 -0
  281. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/di/__init__.py +0 -0
  282. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/di/provider.py +0 -0
  283. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/exceptions.py +0 -0
  284. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/lazy.py +0 -0
  285. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/protocols.py +0 -0
  286. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/registry/__init__.py +0 -0
  287. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/registry/core.py +0 -0
  288. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/trusted_html.py +0 -0
  289. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/types.py +0 -0
  290. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/primitives/typing.py +0 -0
  291. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/py.typed +0 -0
  292. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/reactive/__init__.py +0 -0
  293. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/reactive/core.py +0 -0
  294. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/reactive/exceptions.py +0 -0
  295. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/reactive/operators/__init__.py +0 -0
  296. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/reactive/operators/control.py +0 -0
  297. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/reactive/operators/time_ops.py +0 -0
  298. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/reactive/operators/transform.py +0 -0
  299. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/reactive/retry.py +0 -0
  300. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/reactive/subjects.py +0 -0
  301. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/result/__init__.py +0 -0
  302. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/result/_pipeline.py +0 -0
  303. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/result/errors.py +0 -0
  304. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/result/types.py +0 -0
  305. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/result/utils.py +0 -0
  306. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/saga/__init__.py +0 -0
  307. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/saga/base.py +0 -0
  308. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/saga/canonical_json.py +0 -0
  309. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/saga/content_addressed.py +0 -0
  310. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/__init__.py +0 -0
  311. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/constants.py +0 -0
  312. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/decorators.py +0 -0
  313. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/encryption/__init__.py +0 -0
  314. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/encryption/service.py +0 -0
  315. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/events.py +0 -0
  316. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/exceptions.py +0 -0
  317. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/guards/__init__.py +0 -0
  318. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/guards/chain.py +0 -0
  319. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/guards/decorator.py +0 -0
  320. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/hashing/__init__.py +0 -0
  321. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/hashing/ambient.py +0 -0
  322. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/hashing/digest.py +0 -0
  323. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/hashing/kdf.py +0 -0
  324. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/hooks.py +0 -0
  325. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/provider.py +0 -0
  326. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/py.typed +0 -0
  327. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/sanitization/__init__.py +0 -0
  328. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/sanitization/filename.py +0 -0
  329. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/sanitization/html.py +0 -0
  330. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/sanitization/url.py +0 -0
  331. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/secrets/__init__.py +0 -0
  332. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/secrets/rotation.py +0 -0
  333. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/secrets/store.py +0 -0
  334. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/secrets/types.py +0 -0
  335. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/security/types.py +0 -0
  336. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/__init__.py +0 -0
  337. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/backends/__init__.py +0 -0
  338. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/backends/json.py +0 -0
  339. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/backends/py.typed +0 -0
  340. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/config.py +0 -0
  341. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/constants.py +0 -0
  342. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/di/__init__.py +0 -0
  343. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/di/provider.py +0 -0
  344. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/di/py.typed +0 -0
  345. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/domain/__init__.py +0 -0
  346. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/domain/domain.py +0 -0
  347. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/domain/py.typed +0 -0
  348. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/exceptions.py +0 -0
  349. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/module.py +0 -0
  350. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/py.typed +0 -0
  351. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/registry/__init__.py +0 -0
  352. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/registry/py.typed +0 -0
  353. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/registry/registry.py +0 -0
  354. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/schema/__init__.py +0 -0
  355. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/schema/py.typed +0 -0
  356. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/schema/schema.py +0 -0
  357. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/serialization/types.py +0 -0
  358. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/types.py +0 -0
  359. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/__init__.py +0 -0
  360. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/config.py +0 -0
  361. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/constants.py +0 -0
  362. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/decorators.py +0 -0
  363. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/engine/__init__.py +0 -0
  364. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/engine/coercion.py +0 -0
  365. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/engine/py.typed +0 -0
  366. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/engine/validator.py +0 -0
  367. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/exceptions.py +0 -0
  368. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/module.py +0 -0
  369. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/py.typed +0 -0
  370. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/rules/__init__.py +0 -0
  371. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/rules/py.typed +0 -0
  372. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/rules/rules.py +0 -0
  373. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/schema/__init__.py +0 -0
  374. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/schema/fields.py +0 -0
  375. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/schema/introspection.py +0 -0
  376. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/schema/py.typed +0 -0
  377. {quadkit-0.0.3 → quadkit-0.0.4}/src/quadkit/validation/types.py +0 -0
  378. {quadkit-0.0.3 → quadkit-0.0.4}/tests/conftest.py +0 -0
  379. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/__init__.py +0 -0
  380. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/__init__.py +0 -0
  381. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/_fixtures.py +0 -0
  382. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/conftest.py +0 -0
  383. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/test_boot_level.py +0 -0
  384. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/test_cross_method.py +0 -0
  385. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/test_dependency_chain.py +0 -0
  386. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/test_exports.py +0 -0
  387. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/test_importers.py +0 -0
  388. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/test_module_health_integration.py +0 -0
  389. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/test_module_lifecycle_integration.py +0 -0
  390. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/test_name_lookup.py +0 -0
  391. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/module/test_stub_enforcement_integration.py +0 -0
  392. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/di/test_visibility_enforcement_e2e.py +0 -0
  393. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/mapping/test_mapping_lifecycle.py +0 -0
  394. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/middleware/test_middleware_lifecycle.py +0 -0
  395. {quadkit-0.0.3 → quadkit-0.0.4}/tests/integration/test_full_pipeline.py +0 -0
  396. {quadkit-0.0.3 → quadkit-0.0.4}/tests/test.md +0 -0
  397. {quadkit-0.0.3 → quadkit-0.0.4}/tests/test_import_diagnostic.py +0 -0
  398. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/__init__.py +0 -0
  399. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/aop/test_interceptor_timeout.py +0 -0
  400. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/clock/test_clock.py +0 -0
  401. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/codegen/__init__.py +0 -0
  402. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/codegen/test_generator_base.py +0 -0
  403. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/codegen/test_staged_generation.py +0 -0
  404. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/codegen/test_template_overrides.py +0 -0
  405. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/conftest.py +0 -0
  406. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_bounded_channel.py +0 -0
  407. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_channel.py +0 -0
  408. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_concurrency_exceptions.py +0 -0
  409. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_concurrency_parallel.py +0 -0
  410. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_concurrency_provider_config.py +0 -0
  411. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_concurrency_rwlock.py +0 -0
  412. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_dispatcher.py +0 -0
  413. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_sync_bridge.py +0 -0
  414. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_task_manager.py +0 -0
  415. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/concurrency/test_task_utils.py +0 -0
  416. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_config_constants_new.py +0 -0
  417. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_config_protocols.py +0 -0
  418. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_config_sources.py +0 -0
  419. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_env_interpolation.py +0 -0
  420. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_loader_fail_fast.py +0 -0
  421. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_logging_redaction_config.py +0 -0
  422. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_logging_sampling.py +0 -0
  423. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_profile_overlay.py +0 -0
  424. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_scoping.py +0 -0
  425. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_secrets_validator.py +0 -0
  426. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_strict_bool_env.py +0 -0
  427. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/config/test_strict_sections.py +0 -0
  428. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/core/test_context_correlation.py +0 -0
  429. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/core/test_core_constants.py +0 -0
  430. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/core/test_core_types.py +0 -0
  431. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/core/test_request_context_di.py +0 -0
  432. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/core/test_typing.py +0 -0
  433. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/core/validation/test_protocols.py +0 -0
  434. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/__init__.py +0 -0
  435. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/integration/test_provider.py +0 -0
  436. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/__init__.py +0 -0
  437. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/conftest.py +0 -0
  438. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_compiler.py +0 -0
  439. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_decorator.py +0 -0
  440. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_dynamic.py +0 -0
  441. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_errors.py +0 -0
  442. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_global.py +0 -0
  443. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_graph_reflection.py +0 -0
  444. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_health_graph.py +0 -0
  445. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_integration.py +0 -0
  446. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_introspection.py +0 -0
  447. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_lifecycle.py +0 -0
  448. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_module_lifecycle.py +0 -0
  449. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_reexport.py +0 -0
  450. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_registry.py +0 -0
  451. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_stub_compiler.py +0 -0
  452. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_stub_decorator.py +0 -0
  453. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/module/test_visibility.py +0 -0
  454. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_advanced_features.py +0 -0
  455. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_container_basics.py +0 -0
  456. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_container_builder.py +0 -0
  457. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_container_freeze.py +0 -0
  458. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_container_hardening.py +0 -0
  459. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_decorators.py +0 -0
  460. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_descriptor.py +0 -0
  461. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_di_constants_new.py +0 -0
  462. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_di_decorators.py +0 -0
  463. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_diagnostics.py +0 -0
  464. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_extensions_discovery.py +0 -0
  465. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_extensions_validator.py +0 -0
  466. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_function_provider_boot.py +0 -0
  467. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_graph_validator.py +0 -0
  468. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_interceptor_registry.py +0 -0
  469. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_invoker_unit.py +0 -0
  470. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_lifecycle_orchestrator.py +0 -0
  471. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_module_validation.py +0 -0
  472. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_module_visibility_boot.py +0 -0
  473. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_module_visibility_enforcement.py +0 -0
  474. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_named_binding.py +0 -0
  475. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_orchestrator_health.py +0 -0
  476. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_provider_basics.py +0 -0
  477. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_provider_config_injection.py +0 -0
  478. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_provider_conformance.py +0 -0
  479. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_provider_orchestration.py +0 -0
  480. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_provider_reset_state.py +0 -0
  481. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_provider_utils.py +0 -0
  482. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_scope_concurrency.py +0 -0
  483. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_scope_manager.py +0 -0
  484. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_service_store.py +0 -0
  485. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_type_hints.py +0 -0
  486. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/di/test_validation.py +0 -0
  487. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/domain/conftest.py +0 -0
  488. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/domain/test_aggregates.py +0 -0
  489. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/domain/test_domain.py +0 -0
  490. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/domain/test_domain_constants.py +0 -0
  491. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/domain/test_domain_exceptions.py +0 -0
  492. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/domain/test_domain_init.py +0 -0
  493. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/domain/test_domain_model_strict.py +0 -0
  494. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/domain/test_domain_module.py +0 -0
  495. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/domain/test_models_factory.py +0 -0
  496. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/domain/test_value_object.py +0 -0
  497. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/identity/test_identity.py +0 -0
  498. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/logging/test_logging_constants_new.py +0 -0
  499. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/mapping/conftest.py +0 -0
  500. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/mapping/test_auto_map.py +0 -0
  501. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/mapping/test_exceptions.py +0 -0
  502. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/mapping/test_mapping_constants_new.py +0 -0
  503. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/mapping/test_mapping_exceptions.py +0 -0
  504. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/mapping/test_mapping_mapper.py +0 -0
  505. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/mapping/test_mapping_module.py +0 -0
  506. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/mapping/test_mapping_types.py +0 -0
  507. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/mapping/test_protocol.py +0 -0
  508. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/mapping/test_registry.py +0 -0
  509. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/conftest.py +0 -0
  510. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_builtins.py +0 -0
  511. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_chain.py +0 -0
  512. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_config_alignment.py +0 -0
  513. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_exception_filters.py +0 -0
  514. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_middleware_chain.py +0 -0
  515. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_middleware_ep_discovery.py +0 -0
  516. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_middleware_exceptions.py +0 -0
  517. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_middleware_module.py +0 -0
  518. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_middleware_routing.py +0 -0
  519. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_middleware_types.py +0 -0
  520. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_p2_retry_traceback.py +0 -0
  521. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_registry_defaults.py +0 -0
  522. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/middleware/test_registry_with_resilience.py +0 -0
  523. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/plugins/test_discovery.py +0 -0
  524. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/plugins/test_engine.py +0 -0
  525. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/plugins/test_state.py +0 -0
  526. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/plugins/test_state_hardening.py +0 -0
  527. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/plugins/test_validation.py +0 -0
  528. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/primitives/test_primitives_constants.py +0 -0
  529. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/primitives/test_registry_advanced.py +0 -0
  530. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/primitives/test_registry_introspection.py +0 -0
  531. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/primitives/test_trusted_html.py +0 -0
  532. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/reactive/test_control.py +0 -0
  533. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/reactive/test_core.py +0 -0
  534. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/reactive/test_facade.py +0 -0
  535. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/reactive/test_retry.py +0 -0
  536. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/reactive/test_subjects.py +0 -0
  537. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/reactive/test_time_ops.py +0 -0
  538. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/reactive/test_transform.py +0 -0
  539. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/__init__.py +0 -0
  540. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_exceptions.py +0 -0
  541. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_guards.py +0 -0
  542. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_hashing.py +0 -0
  543. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_package_hooks_p2.py +0 -0
  544. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_secret_rotation_policy.py +0 -0
  545. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_secrets_rotation.py +0 -0
  546. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_secrets_store.py +0 -0
  547. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_security_api.py +0 -0
  548. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_security_constants.py +0 -0
  549. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_security_exceptions.py +0 -0
  550. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/security/test_security_types.py +0 -0
  551. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/serialization/conftest.py +0 -0
  552. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/serialization/test_schema.py +0 -0
  553. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/serialization/test_serialization_constants.py +0 -0
  554. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/serialization/test_serialization_di_provider.py +0 -0
  555. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/serialization/test_serialization_domain.py +0 -0
  556. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/serialization/test_serialization_init.py +0 -0
  557. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/serialization/test_serialization_json.py +0 -0
  558. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/serialization/test_serialization_registry.py +0 -0
  559. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/serialization/test_serialization_types.py +0 -0
  560. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_app_boot_validation.py +0 -0
  561. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_app_config_and_misc.py +0 -0
  562. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_app_constants.py +0 -0
  563. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_app_discovery.py +0 -0
  564. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_app_health_baseline.py +0 -0
  565. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_app_health_config.py +0 -0
  566. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_app_runner_and_lifespan.py +0 -0
  567. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_app_types.py +0 -0
  568. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_app_validation_and_misc.py +0 -0
  569. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_application.py +0 -0
  570. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_application_base.py +0 -0
  571. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_application_lifecycle.py +0 -0
  572. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_clock_and_pipeline_primitives.py +0 -0
  573. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_codegen.py +0 -0
  574. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_compiler_graph_utils.py +0 -0
  575. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_component_exceptions.py +0 -0
  576. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_concurrency_exceptions.py +0 -0
  577. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_config.py +0 -0
  578. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_config_constants.py +0 -0
  579. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_config_hardening.py +0 -0
  580. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_config_quadkit.py +0 -0
  581. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_config_requirements.py +0 -0
  582. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_config_sources.py +0 -0
  583. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_config_types.py +0 -0
  584. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_config_watcher.py +0 -0
  585. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_container_exceptions.py +0 -0
  586. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_container_introspection.py +0 -0
  587. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_container_override.py +0 -0
  588. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_container_resolver_impl.py +0 -0
  589. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_container_runtime_mixin.py +0 -0
  590. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_context_registry.py +0 -0
  591. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_contract_completeness.py +0 -0
  592. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_core_builder.py +0 -0
  593. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_core_constants.py +0 -0
  594. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_core_lazy.py +0 -0
  595. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_core_module.py +0 -0
  596. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_core_pipeline.py +0 -0
  597. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_dependency_injector.py +0 -0
  598. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_di_constants.py +0 -0
  599. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_di_descriptor.py +0 -0
  600. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_di_module_constants.py +0 -0
  601. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_domain_constants.py +0 -0
  602. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_domain_exceptions.py +0 -0
  603. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_domain_model_base.py +0 -0
  604. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_dynamic_module.py +0 -0
  605. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_events_security_exceptions.py +0 -0
  606. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_execution_result.py +0 -0
  607. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_hatch_build_targets.py +0 -0
  608. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_health_probes.py +0 -0
  609. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_hook_registry.py +0 -0
  610. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_hook_registry_edge_cases.py +0 -0
  611. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_hook_registry_introspection.py +0 -0
  612. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_hook_registry_scenarios.py +0 -0
  613. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_identity_generators_and_ambient.py +0 -0
  614. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_infra_exceptions.py +0 -0
  615. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_input_sanitizers.py +0 -0
  616. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_interceptors.py +0 -0
  617. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_json_serialization_backend.py +0 -0
  618. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_logging_apply_redaction.py +0 -0
  619. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_logging_bridging.py +0 -0
  620. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_logging_constants.py +0 -0
  621. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_logging_debug.py +0 -0
  622. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_logging_di_provider.py +0 -0
  623. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_logging_factory.py +0 -0
  624. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_logging_init.py +0 -0
  625. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_logging_redaction_compound.py +0 -0
  626. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_logging_types.py +0 -0
  627. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_m13_m14_verification.py +0 -0
  628. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_mapper.py +0 -0
  629. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_mapper_enhanced.py +0 -0
  630. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_mapping.py +0 -0
  631. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_middleware_enhancements.py +0 -0
  632. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_middleware_exceptions.py +0 -0
  633. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_middleware_new.py +0 -0
  634. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_module_decorator.py +0 -0
  635. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_module_scan_and_provide.py +0 -0
  636. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_module_system.py +0 -0
  637. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_no_db_imports.py +0 -0
  638. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_observability.py +0 -0
  639. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_orchestrator_parallel.py +0 -0
  640. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_p2_scope_log_level.py +0 -0
  641. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_primitives_context.py +0 -0
  642. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_primitives_data.py +0 -0
  643. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_primitives_registry.py +0 -0
  644. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_provider_boot_enhanced.py +0 -0
  645. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_provider_decorator.py +0 -0
  646. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_quadkit_constants.py +0 -0
  647. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_quadkit_exceptions.py +0 -0
  648. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_repr_helpers.py +0 -0
  649. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_resilience_exceptions.py +0 -0
  650. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_result_combinators.py +0 -0
  651. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_result_core.py +0 -0
  652. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_result_pipeline.py +0 -0
  653. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_result_pipeline_and_utils.py +0 -0
  654. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_result_types_new.py +0 -0
  655. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_result_utils.py +0 -0
  656. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_round22_hardening.py +0 -0
  657. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_round41_hardening.py +0 -0
  658. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_saga_primitives.py +0 -0
  659. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_sampling_and_config.py +0 -0
  660. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_secret_stores_and_rotation.py +0 -0
  661. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_serialization_constants.py +0 -0
  662. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_serialization_exceptions.py +0 -0
  663. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_service_descriptor.py +0 -0
  664. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_structured_logging.py +0 -0
  665. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_time_ops.py +0 -0
  666. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_types.py +0 -0
  667. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_validation_coercion.py +0 -0
  668. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_validation_exceptions.py +0 -0
  669. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_validation_rules.py +0 -0
  670. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/test_validation_validator_engine.py +0 -0
  671. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/__init__.py +0 -0
  672. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/conftest.py +0 -0
  673. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_async_validator.py +0 -0
  674. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_coercion.py +0 -0
  675. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_helpers.py +0 -0
  676. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_validation.py +0 -0
  677. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_validation_constants.py +0 -0
  678. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_validation_constants_new.py +0 -0
  679. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_validation_fields.py +0 -0
  680. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_validation_fields_extended.py +0 -0
  681. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_validation_init.py +0 -0
  682. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_validation_introspection.py +0 -0
  683. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_validation_module.py +0 -0
  684. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_validation_types.py +0 -0
  685. {quadkit-0.0.3 → quadkit-0.0.4}/tests/unit/validation/test_validator.py +0 -0
@@ -0,0 +1,183 @@
1
+ *
2
+ !tests/
3
+ !tests/**
4
+ !README.md
5
+ !AGENTS.md
6
+ !DEVELOPMENT.md
7
+ !QUICKGUIDE.md
8
+ !MILESTONE*.md
9
+ !TESTS*.md
10
+ !CHANGELOG.md
11
+ !AUDIT*.md
12
+ !REF*.md
13
+ !AUDIT*.json
14
+ !LICENSE
15
+ !LICENSE-MIT.txt
16
+ !NOTICE
17
+ !TRADEMARK.md
18
+ !conftest.py
19
+ !CONTRIBUTING.md
20
+ !CODE_OF_CONDUCT.md
21
+ !SECURITY.md
22
+ !GOVERNANCE.md
23
+ !pyproject.toml
24
+ !uv.lock
25
+ !docker-compose.yml
26
+ !.env.example
27
+ !.env.full.example
28
+ !.importlinter
29
+ !.superpowers/
30
+ !.superpowers/**
31
+ !.gitattributes
32
+ !.editorconfig
33
+ !Makefile
34
+ !docker-compose.test.yml
35
+ !quadkit.yaml.example
36
+ !.github/
37
+ !.github/workflows/
38
+ !.github/workflows/**
39
+ !.github/dependabot.yml
40
+ !.devcontainer/
41
+ !.devcontainer/**
42
+ !tools/
43
+ !tools/**
44
+ !*example.yaml
45
+
46
+ # Quadkit Packages
47
+ !quadkit*/
48
+ !quadkit*/pyproject.toml
49
+ !quadkit*/CHANGELOG.md
50
+ !quadkit*/README.md
51
+ !quadkit*/alembic.ini
52
+ !quadkit*/mypy.ini
53
+ !quadkit*/*.yaml.example
54
+ !quadkit*/src/
55
+ !quadkit*/src/**
56
+ !quadkit*/docs/
57
+ !quadkit*/docs/**
58
+ !quadkit*/tests/
59
+ !quadkit*/tests/**
60
+
61
+ # Keep quadkit docs
62
+ !/docs/
63
+ !docs/**
64
+
65
+ # Session / cutover plans at the repo root
66
+ !plans/
67
+ !plans/**
68
+
69
+ # Keep example files for README examples
70
+ !/examples/
71
+ !/examples/**
72
+
73
+ # Re-ignore these AFTER negations (last match wins)
74
+ *.tape
75
+ examples/*/runs/
76
+ __pycache__/
77
+ *.pyc
78
+ *.pyo
79
+ *.egg-info/
80
+ dist/
81
+ build/
82
+ .eggs/
83
+ *.egg
84
+ .pytest_cache/
85
+ .mypy_cache/
86
+ .ruff_cache/
87
+ htmlcov/
88
+ .coverage
89
+ coverage.xml
90
+ test.db
91
+ !quadkit*/tests/fixtures/test.db
92
+ *.log
93
+ *.tmp
94
+
95
+ # Company-specific files (keep private, do not commit)
96
+ .company/
97
+ COMPANY_*.md
98
+ company-config/
99
+ internal-docs/
100
+ # Editor swap files
101
+ *.swp
102
+
103
+ !core/
104
+ !packages/
105
+ !core/quadkit*/
106
+ !packages/quadkit*/
107
+ !core/quadkit*/pyproject.toml
108
+ !packages/quadkit*/pyproject.toml
109
+ !core/quadkit*/CHANGELOG.md
110
+ !packages/quadkit*/CHANGELOG.md
111
+ !core/quadkit*/README.md
112
+ !packages/quadkit*/README.md
113
+ !core/quadkit*/alembic.ini
114
+ !packages/quadkit*/alembic.ini
115
+ !core/quadkit*/mypy.ini
116
+ !packages/quadkit*/mypy.ini
117
+ !core/quadkit*/*.yaml.example
118
+ !packages/quadkit*/*.yaml.example
119
+ !core/quadkit*/src/
120
+ !core/quadkit*/src/**
121
+ !packages/quadkit*/src/
122
+ !packages/quadkit*/src/**
123
+ !core/quadkit*/tests/
124
+ !core/quadkit*/tests/**
125
+ !packages/quadkit*/tests/
126
+ !packages/quadkit*/tests/**
127
+ !core/quadkit*/docs/
128
+ !core/quadkit*/docs/**
129
+ !packages/quadkit*/docs/
130
+ !packages/quadkit*/docs/**
131
+
132
+ # dev/
133
+ !dev/
134
+ !dev/**
135
+
136
+ # Admin dev playground (committed dev asset; local SQLite files stay ignored)
137
+ !packages/quadkit-admin/playground/
138
+ !packages/quadkit-admin/playground/serve.py
139
+
140
+ # gatewai apps
141
+ !apps/
142
+ !apps/**
143
+ !apps/gatewai/
144
+ !apps/gatewai/**
145
+ apps/**/node_modules/
146
+ apps/**/dist/
147
+ apps/**/__pycache__/
148
+ apps/**/*.pyc
149
+ apps/**/*.db
150
+ apps/**/*.db-wal
151
+ apps/**/*.db-shm
152
+
153
+ # Re-exclude private content under the tiered paths.
154
+ # MUST come after the !...docs/** negations above — last match wins.
155
+ core/quadkit*/docs/plans/
156
+ packages/quadkit*/docs/plans/
157
+ core/quadkit*/docs/**/
158
+ packages/quadkit*/docs/**/
159
+
160
+ # Re-exclude tooling artifacts under the tiered paths
161
+ __pycache__/
162
+ *.pyc
163
+ *.pyo
164
+ *.egg-info/
165
+ .pytest_cache/
166
+ .mypy_cache/
167
+ .ruff_cache/
168
+ htmlcov/
169
+ .coverage
170
+ coverage.xml
171
+ test.db
172
+ *.tmp
173
+ *.log
174
+ !core/quadkit*/tests/fixtures/test.db
175
+ !packages/quadkit*/tests/fixtures/test.db
176
+
177
+ # Allow the generated example gifs to be tracked (README hero images).
178
+ !core/quadkit*/docs/gifs/
179
+ !core/quadkit*/docs/gifs/**
180
+ !packages/*/quadkit*/docs/gifs/
181
+ !packages/*/quadkit*/docs/gifs/**
182
+ examples/*/screenshot.png
183
+ !banner*
quadkit-0.0.4/PKG-INFO ADDED
@@ -0,0 +1,270 @@
1
+ Metadata-Version: 2.5
2
+ Name: quadkit
3
+ Version: 0.0.4
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).