python-ddd-framework 0.7.0__tar.gz → 0.7.2__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 (459) hide show
  1. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/PKG-INFO +16 -2
  2. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/README.md +15 -1
  3. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/pyproject.toml +1 -1
  4. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/pyproject.toml.orig +1 -1
  5. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/adapter.py +25 -10
  6. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/filters.py +9 -1
  7. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/health.py +20 -11
  8. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/parameters.py +2 -1
  9. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/routing.py +1 -1
  10. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/callables.py +31 -19
  11. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/dispatcher.py +2 -1
  12. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/execution.py +14 -3
  13. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/interception.py +11 -2
  14. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/managed_services.py +28 -11
  15. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/methods.py +63 -12
  16. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/migration.py +17 -1
  17. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/LICENSE +0 -0
  18. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/__init__.py +0 -0
  19. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application/__init__.py +0 -0
  20. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application/build_spec.py +0 -0
  21. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application/builder.py +0 -0
  22. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application/composition.py +0 -0
  23. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application/runtime.py +0 -0
  24. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application/runtime_hooks.py +0 -0
  25. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application/state.py +0 -0
  26. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application_services/__init__.py +0 -0
  27. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application_services/bindings.py +0 -0
  28. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application_services/catalog.py +0 -0
  29. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application_services/contracts.py +0 -0
  30. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application_services/dispatcher.py +0 -0
  31. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application_services/errors.py +0 -0
  32. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application_services/invocation.py +0 -0
  33. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application_services/module.py +0 -0
  34. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/application_services/pagination.py +0 -0
  35. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/auditing/__init__.py +0 -0
  36. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/auditing/contracts.py +0 -0
  37. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/auditing/control.py +0 -0
  38. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/auditing/module.py +0 -0
  39. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/auditing/sqlalchemy/__init__.py +0 -0
  40. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/auditing/sqlalchemy/migrations/0001_auditing.py +0 -0
  41. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/auditing/sqlalchemy/migrations/__init__.py +0 -0
  42. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/auditing/sqlalchemy/models.py +0 -0
  43. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/auditing/sqlalchemy/module.py +0 -0
  44. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/auditing/sqlalchemy/store.py +0 -0
  45. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/authorization/__init__.py +0 -0
  46. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/authorization/catalog.py +0 -0
  47. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/authorization/checking.py +0 -0
  48. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/authorization/contracts.py +0 -0
  49. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/authorization/definition_discovery.py +0 -0
  50. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/authorization/definitions.py +0 -0
  51. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/authorization/errors.py +0 -0
  52. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/authorization/module.py +0 -0
  53. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/authorization/options.py +0 -0
  54. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/__init__.py +0 -0
  55. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/application.py +0 -0
  56. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/child.py +0 -0
  57. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/contracts.py +0 -0
  58. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/declarations.py +0 -0
  59. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/lifecycle.py +0 -0
  60. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/local.py +0 -0
  61. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/locks.py +0 -0
  62. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/management.py +0 -0
  63. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/module.py +0 -0
  64. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/permissions.py +0 -0
  65. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_execution/processes.py +0 -0
  66. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/__init__.py +0 -0
  67. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/catalog.py +0 -0
  68. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/contracts.py +0 -0
  69. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/declaration.py +0 -0
  70. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/errors.py +0 -0
  71. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/execution.py +0 -0
  72. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/pgqueuer/UPSTREAM_LICENSE.txt +0 -0
  73. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/pgqueuer/__init__.py +0 -0
  74. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/pgqueuer/enqueue.py +0 -0
  75. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/0001_pgqueuer_1_3_2.py +0 -0
  76. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/__init__.py +0 -0
  77. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/pgqueuer/module.py +0 -0
  78. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/pgqueuer/options.py +0 -0
  79. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/pgqueuer/runtime.py +0 -0
  80. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/pgqueuer/sql/pgqueuer_1_3_2_install.sql +0 -0
  81. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_jobs/pgqueuer/supervision.py +0 -0
  82. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_workers/__init__.py +0 -0
  83. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_workers/catalog.py +0 -0
  84. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_workers/contracts.py +0 -0
  85. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_workers/errors.py +0 -0
  86. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_workers/execution.py +0 -0
  87. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/background_workers/runtime.py +0 -0
  88. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/caching/__init__.py +0 -0
  89. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/caching/contracts.py +0 -0
  90. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/caching/errors.py +0 -0
  91. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/caching/module.py +0 -0
  92. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/caching/naming.py +0 -0
  93. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/caching/options.py +0 -0
  94. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/caching/unit_of_work.py +0 -0
  95. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/cli/__init__.py +0 -0
  96. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/cli/development.py +0 -0
  97. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/cli/errors.py +0 -0
  98. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/cli/inspection.py +0 -0
  99. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/cli/project.py +0 -0
  100. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/cli/runtime.py +0 -0
  101. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/__init__.py +0 -0
  102. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/composition.py +0 -0
  103. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/contracts.py +0 -0
  104. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/dotenv_source.py +0 -0
  105. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/environment_source.py +0 -0
  106. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/immutability.py +0 -0
  107. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/input_shape.py +0 -0
  108. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/merge.py +0 -0
  109. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/root.py +0 -0
  110. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/sources.py +0 -0
  111. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/values.py +0 -0
  112. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/configuration/yaml_source.py +0 -0
  113. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/__init__.py +0 -0
  114. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/generation.py +0 -0
  115. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/project_metadata.py +0 -0
  116. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/publication.py +0 -0
  117. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/source.py +0 -0
  118. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/basic/cookiecutter.json +0 -0
  119. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/README.md +0 -0
  120. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
  121. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/__init__.py.jinja +0 -0
  122. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/conversion_service.py.jinja +0 -0
  123. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/module.py.jinja +0 -0
  124. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/__init__.py.jinja +0 -0
  125. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/default_conversion_service.py.jinja +0 -0
  126. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/cookiecutter.json +0 -0
  127. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/README.md +0 -0
  128. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
  129. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/__init__.py.jinja +0 -0
  130. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/__init__.py.jinja +0 -0
  131. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/__init__.py.jinja +0 -0
  132. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/__init__.py.jinja +0 -0
  133. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers/__init__.py.jinja +0 -0
  134. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/__init__.py.jinja +0 -0
  135. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services/__init__.py.jinja +0 -0
  136. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors/__init__.py.jinja +0 -0
  137. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/module.py.jinja +0 -0
  138. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options/__init__.py.jinja +0 -0
  139. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/__init__.py.jinja +0 -0
  140. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers/__init__.py.jinja +0 -0
  141. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/__init__.py.jinja +0 -0
  142. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/__init__.py.jinja +0 -0
  143. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services/__init__.py.jinja +0 -0
  144. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/module.py.jinja +0 -0
  145. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/__init__.py.jinja +0 -0
  146. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/__init__.py.jinja +0 -0
  147. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/__init__.py.jinja +0 -0
  148. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities/__init__.py.jinja +0 -0
  149. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events/__init__.py.jinja +0 -0
  150. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/module.py.jinja +0 -0
  151. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories/__init__.py.jinja +0 -0
  152. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding/__init__.py.jinja +0 -0
  153. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services/__init__.py.jinja +0 -0
  154. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings/__init__.py.jinja +0 -0
  155. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects/__init__.py.jinja +0 -0
  156. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/__init__.py.jinja +0 -0
  157. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants/__init__.py.jinja +0 -0
  158. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums/__init__.py.jinja +0 -0
  159. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors/__init__.py.jinja +0 -0
  160. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/__init__.py.jinja +0 -0
  161. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/module.py.jinja +0 -0
  162. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/__init__.py.jinja +0 -0
  163. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/value_objects/__init__.py.jinja +0 -0
  164. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/__init__.py.jinja +0 -0
  165. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters/__init__.py.jinja +0 -0
  166. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models/__init__.py.jinja +0 -0
  167. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/module.py.jinja +0 -0
  168. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers/__init__.py.jinja +0 -0
  169. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets/__init__.py.jinja +0 -0
  170. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/__init__.py.jinja +0 -0
  171. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/migrations/__init__.py.jinja +0 -0
  172. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/__init__.py.jinja +0 -0
  173. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/base.py.jinja +0 -0
  174. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/module.py.jinja +0 -0
  175. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/__init__.py.jinja +0 -0
  176. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/__init__.py.jinja +0 -0
  177. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/cookiecutter.json +0 -0
  178. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/AGENTS.md +0 -0
  179. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/README.md +0 -0
  180. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.dockerignore +0 -0
  181. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.gitignore +0 -0
  182. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.python-version +0 -0
  183. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/Dockerfile +0 -0
  184. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/app.development.yaml.jinja +0 -0
  185. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/compose.dev.yaml.jinja +0 -0
  186. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/compose.production.yaml.jinja +0 -0
  187. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/pyproject.toml.jinja +0 -0
  188. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/__init__.py.jinja +0 -0
  189. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/main.py.jinja +0 -0
  190. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/module.py.jinja +0 -0
  191. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/tests/conftest.py.jinja +0 -0
  192. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/tests/host/test_http.py.jinja +0 -0
  193. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/architecture.md +0 -0
  194. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/development.md +0 -0
  195. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/scripts/.gitkeep +0 -0
  196. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/developer_kit/wiring.py +0 -0
  197. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/diagnostics/__init__.py +0 -0
  198. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/diagnostics/journal.py +0 -0
  199. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/diagnostics/model.py +0 -0
  200. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/diagnostics/source.py +0 -0
  201. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/distributed_lock/__init__.py +0 -0
  202. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/distributed_lock/contracts.py +0 -0
  203. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/distributed_lock/options.py +0 -0
  204. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/domain/__init__.py +0 -0
  205. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/domain/aggregates.py +0 -0
  206. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/domain/entities.py +0 -0
  207. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/domain/errors.py +0 -0
  208. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/domain/event_values.py +0 -0
  209. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/domain/services.py +0 -0
  210. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/domain/value_objects.py +0 -0
  211. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/errors/__init__.py +0 -0
  212. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/errors/base.py +0 -0
  213. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/errors/business.py +0 -0
  214. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/errors/configuration.py +0 -0
  215. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/errors/diagnostics.py +0 -0
  216. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/errors/lifecycle.py +0 -0
  217. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/errors/modularity.py +0 -0
  218. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/errors/services.py +0 -0
  219. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/__init__.py +0 -0
  220. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/aggregate.py +0 -0
  221. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/catalog.py +0 -0
  222. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/contracts.py +0 -0
  223. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/contribution.py +0 -0
  224. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/discovery.py +0 -0
  225. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/entities.py +0 -0
  226. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/errors.py +0 -0
  227. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/module.py +0 -0
  228. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/runtime.py +0 -0
  229. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/subscription.py +0 -0
  230. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/events/unit_of_work.py +0 -0
  231. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/extensions/__init__.py +0 -0
  232. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/extensions/catalog.py +0 -0
  233. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/extensions/contracts.py +0 -0
  234. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/extensions/models.py +0 -0
  235. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/extensions/module.py +0 -0
  236. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/__init__.py +0 -0
  237. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/access.py +0 -0
  238. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/access_options.py +0 -0
  239. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/action.py +0 -0
  240. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/application_services.py +0 -0
  241. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/background.py +0 -0
  242. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/contracts.py +0 -0
  243. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/error_handlers.py +0 -0
  244. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/errors.py +0 -0
  245. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/http.py +0 -0
  246. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/http_router.py +0 -0
  247. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/manual_action.py +0 -0
  248. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/middleware.py +0 -0
  249. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/module.py +0 -0
  250. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/realtime/__init__.py +0 -0
  251. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/realtime/authentication.py +0 -0
  252. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/realtime/connection.py +0 -0
  253. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/realtime/module.py +0 -0
  254. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/realtime/options.py +0 -0
  255. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/realtime/runtime.py +0 -0
  256. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/request_context.py +0 -0
  257. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/route_integrity.py +0 -0
  258. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/server.py +0 -0
  259. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/service_endpoints.py +0 -0
  260. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/service_routes.py +0 -0
  261. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/settings.py +0 -0
  262. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/streaming.py +0 -0
  263. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/tracing.py +0 -0
  264. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/transfer.py +0 -0
  265. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/upload_limits.py +0 -0
  266. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/fastapi/uploads.py +0 -0
  267. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosted_services/__init__.py +0 -0
  268. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosted_services/bridge.py +0 -0
  269. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosted_services/catalog.py +0 -0
  270. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosted_services/contracts.py +0 -0
  271. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosted_services/declarations.py +0 -0
  272. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosted_services/errors.py +0 -0
  273. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosted_services/module.py +0 -0
  274. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosted_services/options.py +0 -0
  275. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosted_services/runtime.py +0 -0
  276. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosted_services/state.py +0 -0
  277. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosting/__init__.py +0 -0
  278. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/hosting/instance.py +0 -0
  279. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/__init__.py +0 -0
  280. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/application.py +0 -0
  281. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/contracts.py +0 -0
  282. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/domain_rules.py +0 -0
  283. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/dtos.py +0 -0
  284. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/errors.py +0 -0
  285. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/extensions.py +0 -0
  286. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/http_api.py +0 -0
  287. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/management.py +0 -0
  288. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/models.py +0 -0
  289. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/module.py +0 -0
  290. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/options.py +0 -0
  291. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/passwords.py +0 -0
  292. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/permissions.py +0 -0
  293. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/seeding.py +0 -0
  294. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/services.py +0 -0
  295. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/__init__.py +0 -0
  296. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/migrations/0001_identity.py +0 -0
  297. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/migrations/0002_physical_delete.py +0 -0
  298. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/migrations/0003_extra_properties.py +0 -0
  299. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/migrations/0004_concurrency_version.py +0 -0
  300. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/migrations/__init__.py +0 -0
  301. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/models.py +0 -0
  302. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/module.py +0 -0
  303. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/repository.py +0 -0
  304. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/session_security.py +0 -0
  305. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/sqlalchemy/stores.py +0 -0
  306. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/stores.py +0 -0
  307. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/identity/tokens.py +0 -0
  308. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/__init__.py +0 -0
  309. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/arguments.py +0 -0
  310. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/contracts.py +0 -0
  311. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/contribution.py +0 -0
  312. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/entries.py +0 -0
  313. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/entrypoints.py +0 -0
  314. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/function_runtime.py +0 -0
  315. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/interceptors.py +0 -0
  316. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/managed_proxy.py +0 -0
  317. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/module.py +0 -0
  318. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/policies.py +0 -0
  319. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/runtime.py +0 -0
  320. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/scopes.py +0 -0
  321. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/signature.py +0 -0
  322. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/invocation/validation.py +0 -0
  323. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/lifecycle/__init__.py +0 -0
  324. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/lifecycle/composition.py +0 -0
  325. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/lifecycle/context.py +0 -0
  326. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/lifecycle/participants.py +0 -0
  327. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/lifecycle/runtime.py +0 -0
  328. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/lifecycle/state.py +0 -0
  329. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/messaging/__init__.py +0 -0
  330. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/messaging/channel.py +0 -0
  331. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/messaging/contracts.py +0 -0
  332. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/messaging/module.py +0 -0
  333. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/messaging/options.py +0 -0
  334. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/messaging/receipt.py +0 -0
  335. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/messaging/runtime.py +0 -0
  336. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/modularity/__init__.py +0 -0
  337. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/modularity/contracts.py +0 -0
  338. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/modularity/discovery.py +0 -0
  339. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/modularity/graph.py +0 -0
  340. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/modularity/registry.py +0 -0
  341. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/modularity/selection.py +0 -0
  342. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/notifications/__init__.py +0 -0
  343. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/notifications/catalog.py +0 -0
  344. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/notifications/contracts.py +0 -0
  345. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/notifications/declarations.py +0 -0
  346. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/notifications/module.py +0 -0
  347. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/observability/__init__.py +0 -0
  348. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/observability/context.py +0 -0
  349. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/observability/export.py +0 -0
  350. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/observability/formatting.py +0 -0
  351. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/observability/logging.py +0 -0
  352. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/observability/options.py +0 -0
  353. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/observability/tracing.py +0 -0
  354. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/options/__init__.py +0 -0
  355. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/options/aliases.py +0 -0
  356. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/options/contribution.py +0 -0
  357. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/options/immutability.py +0 -0
  358. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/options/input_keys.py +0 -0
  359. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/options/issues.py +0 -0
  360. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/options/models.py +0 -0
  361. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/options/registry.py +0 -0
  362. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/options/schema.py +0 -0
  363. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/options/validation.py +0 -0
  364. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/py.typed +0 -0
  365. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/realtime/__init__.py +0 -0
  366. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/realtime/contracts.py +0 -0
  367. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/realtime/diagnostics.py +0 -0
  368. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/realtime/messages.py +0 -0
  369. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/redis/__init__.py +0 -0
  370. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/redis/cache.py +0 -0
  371. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/redis/cache_scripts.py +0 -0
  372. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/redis/distributed_lock.py +0 -0
  373. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/redis/lease_lock.py +0 -0
  374. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/redis/module.py +0 -0
  375. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/redis/notification_runtime.py +0 -0
  376. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/redis/notifications.py +0 -0
  377. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/redis/options.py +0 -0
  378. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/redis/runtime.py +0 -0
  379. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/seeding/__init__.py +0 -0
  380. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/seeding/contracts.py +0 -0
  381. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/seeding/module.py +0 -0
  382. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/seeding/runtime.py +0 -0
  383. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/__init__.py +0 -0
  384. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/arbitration.py +0 -0
  385. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/binding.py +0 -0
  386. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/composition.py +0 -0
  387. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/contribution.py +0 -0
  388. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/convention.py +0 -0
  389. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/convention_contracts.py +0 -0
  390. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/exposure.py +0 -0
  391. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/fixed_lifetime.py +0 -0
  392. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/framework_provider.py +0 -0
  393. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/native_graph.py +0 -0
  394. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/provider.py +0 -0
  395. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/registration.py +0 -0
  396. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/relocation.py +0 -0
  397. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/repository.py +0 -0
  398. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/services/runtime.py +0 -0
  399. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/__init__.py +0 -0
  400. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/application.py +0 -0
  401. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/binding.py +0 -0
  402. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/catalog.py +0 -0
  403. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/changes.py +0 -0
  404. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/contracts.py +0 -0
  405. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/declarations.py +0 -0
  406. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/definition_discovery.py +0 -0
  407. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/definitions.py +0 -0
  408. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/errors.py +0 -0
  409. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/handlers.py +0 -0
  410. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/management.py +0 -0
  411. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/manager.py +0 -0
  412. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/module.py +0 -0
  413. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/notifications.py +0 -0
  414. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/permissions.py +0 -0
  415. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/provider.py +0 -0
  416. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/refresh.py +0 -0
  417. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/refresh_module.py +0 -0
  418. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/sqlalchemy/__init__.py +0 -0
  419. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/sqlalchemy/migrations/0001_settings.py +0 -0
  420. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/sqlalchemy/migrations/0002_physical_delete.py +0 -0
  421. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/sqlalchemy/migrations/0003_version_tokens.py +0 -0
  422. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/sqlalchemy/migrations/__init__.py +0 -0
  423. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/sqlalchemy/models.py +0 -0
  424. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/sqlalchemy/module.py +0 -0
  425. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/sqlalchemy/store.py +0 -0
  426. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/store.py +0 -0
  427. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/settings/values.py +0 -0
  428. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/__init__.py +0 -0
  429. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/alembic_runtime/__init__.py +0 -0
  430. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/alembic_runtime/env.py +0 -0
  431. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/alembic_runtime/script.py.mako +0 -0
  432. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/auditing.py +0 -0
  433. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/errors.py +0 -0
  434. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/extensions.py +0 -0
  435. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/metadata.py +0 -0
  436. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/metadata_builder.py +0 -0
  437. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/metadata_fingerprint.py +0 -0
  438. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/metadata_ownership.py +0 -0
  439. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/migration_operations.py +0 -0
  440. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/migration_options.py +0 -0
  441. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/migration_sources.py +0 -0
  442. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/module.py +0 -0
  443. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/module_migration.py +0 -0
  444. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/options.py +0 -0
  445. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/repository.py +0 -0
  446. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/runtime.py +0 -0
  447. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/session_provider.py +0 -0
  448. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/sqlalchemy/unit_of_work.py +0 -0
  449. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/testing/__init__.py +0 -0
  450. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/testing/runtime.py +0 -0
  451. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/unit_of_work/__init__.py +0 -0
  452. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/unit_of_work/contracts.py +0 -0
  453. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/unit_of_work/errors.py +0 -0
  454. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/unit_of_work/lifecycle.py +0 -0
  455. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/unit_of_work/manager.py +0 -0
  456. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/unit_of_work/module.py +0 -0
  457. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/unit_of_work/options.py +0 -0
  458. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/validation/__init__.py +0 -0
  459. {python_ddd_framework-0.7.0 → python_ddd_framework-0.7.2}/src/python_ddd_framework/validation/models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-ddd-framework
3
- Version: 0.7.0
3
+ Version: 0.7.2
4
4
  Summary: Modular DDD application framework with project CLI and bundled templates
5
5
  License-Expression: LicenseRef-Proprietary
6
6
  License-File: LICENSE
@@ -304,6 +304,20 @@ The image uses `python -m host.main` without development reload. Runtime install
304
304
 
305
305
  New `ddd` modules contain the full responsibility directories and necessary composition, with no preset business code or tests. `basic` is unchanged. This affects subsequent generation only: upgrades do not delete or rewrite existing consumers' order code. Keep existing business contracts and data under their application owners. The former order implementation and its existing domain test now live in [the independent example](examples/order_management/README.md); its initializer uses the official CLI, requires a new destination, and is not bundled in the runtime wheel. No CLI parameter or dependency has been added.
306
306
 
307
+ ## HTTP lifecycle and global migration checks (0.7.1)
308
+
309
+ - Health endpoints now read their Application from request-local access to the FastAPI instance state. Adapter rollback and lifespan cleanup release the binding; rejected duplicate or concurrent lifespan entry preserves the active lifespan's binding and readiness. Health URLs, responses and readiness semantics are unchanged.
310
+ - Replace Owner filtering used solely to exclude empty ORM skeletons with one `await SqlAlchemyMigrator(application).check_current_heads()` call. Global checks and upgrades waive missing revisions only for ordinary ORM sources whose metadata and revision history are both empty. Sources with tables, historical revisions, migration-only declarations or extensions retain their checks, including unknown database history.
311
+ - Keep the Host's startup orchestration and cleanup. Run the check while the Application is COMPOSED, before starting it; there is no automatic startup check or new configuration. Explicit module operations and first-revision authoring keep their existing behavior.
312
+
313
+ See the [migration guide](docs/development.md#数据库聚合与迁移) and [verification record](docs/status.md#http-回收与迁移来源判定未发布).
314
+
315
+ ## Invocation performance (0.7.2)
316
+
317
+ Function calls avoid regenerating DI wrappers, empty extension chains skip unnecessary work, and completed filter/interceptor chains release execution references sooner. Managed declaration checks continue to detect dynamic method and policy changes.
318
+
319
+ Public APIs, DI scopes, authorization, validation, Unit of Work, exception and cancellation behavior are unchanged. No application-code, configuration or data migration is required. Follow the existing [upgrade procedure](#upgrading); validation evidence and performance limits are recorded in [release status](docs/status.md#当前发布).
320
+
307
321
  <a id="streaming-and-access-migration-07-unreleased"></a>
308
322
 
309
323
  ## Streaming and access migration (0.7)
@@ -546,7 +560,7 @@ Do not remove durable job payload versions merely because their Python APIs were
546
560
  <details>
547
561
  <summary>For maintainers: publishing a changed version</summary>
548
562
 
549
- Routine code and documentation commits may retain the current version. Pull requests to `main` run build, static checks, and short architecture/typing/release-intent checks with read-only permissions. Pushes to `main` run the full release gates, including locked, lowest-direct, and highest allowed dependency samples, but skip publication unless the version increased across the push; initial creation of `main` publishes its current version. Manual workflow runs validate only. A failed run may be retried, but a later same-version push does not resume publication: changed contents require another version bump. Follow [release operations](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#发布操作) for publisher setup and retry boundaries. Dependency samples and current API/type checks do not establish backward compatibility or a cross-version upgrade guarantee.
563
+ Routine code and documentation commits may retain the current version. Pushes to `main` run the full release gates, including locked, lowest-direct, and highest allowed dependency samples, but skip publication unless the version increased across the push; initial creation of `main` publishes its current version. Manual workflow runs validate only. A failed run may be retried, but a later same-version push does not resume publication: changed contents require another version bump. Follow [release operations](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#发布操作) for publisher setup and retry boundaries. Dependency samples and current API/type checks do not establish backward compatibility or a cross-version upgrade guarantee.
550
564
 
551
565
  </details>
552
566
 
@@ -260,6 +260,20 @@ The image uses `python -m host.main` without development reload. Runtime install
260
260
 
261
261
  New `ddd` modules contain the full responsibility directories and necessary composition, with no preset business code or tests. `basic` is unchanged. This affects subsequent generation only: upgrades do not delete or rewrite existing consumers' order code. Keep existing business contracts and data under their application owners. The former order implementation and its existing domain test now live in [the independent example](examples/order_management/README.md); its initializer uses the official CLI, requires a new destination, and is not bundled in the runtime wheel. No CLI parameter or dependency has been added.
262
262
 
263
+ ## HTTP lifecycle and global migration checks (0.7.1)
264
+
265
+ - Health endpoints now read their Application from request-local access to the FastAPI instance state. Adapter rollback and lifespan cleanup release the binding; rejected duplicate or concurrent lifespan entry preserves the active lifespan's binding and readiness. Health URLs, responses and readiness semantics are unchanged.
266
+ - Replace Owner filtering used solely to exclude empty ORM skeletons with one `await SqlAlchemyMigrator(application).check_current_heads()` call. Global checks and upgrades waive missing revisions only for ordinary ORM sources whose metadata and revision history are both empty. Sources with tables, historical revisions, migration-only declarations or extensions retain their checks, including unknown database history.
267
+ - Keep the Host's startup orchestration and cleanup. Run the check while the Application is COMPOSED, before starting it; there is no automatic startup check or new configuration. Explicit module operations and first-revision authoring keep their existing behavior.
268
+
269
+ See the [migration guide](docs/development.md#数据库聚合与迁移) and [verification record](docs/status.md#http-回收与迁移来源判定未发布).
270
+
271
+ ## Invocation performance (0.7.2)
272
+
273
+ Function calls avoid regenerating DI wrappers, empty extension chains skip unnecessary work, and completed filter/interceptor chains release execution references sooner. Managed declaration checks continue to detect dynamic method and policy changes.
274
+
275
+ Public APIs, DI scopes, authorization, validation, Unit of Work, exception and cancellation behavior are unchanged. No application-code, configuration or data migration is required. Follow the existing [upgrade procedure](#upgrading); validation evidence and performance limits are recorded in [release status](docs/status.md#当前发布).
276
+
263
277
  <a id="streaming-and-access-migration-07-unreleased"></a>
264
278
 
265
279
  ## Streaming and access migration (0.7)
@@ -502,7 +516,7 @@ Do not remove durable job payload versions merely because their Python APIs were
502
516
  <details>
503
517
  <summary>For maintainers: publishing a changed version</summary>
504
518
 
505
- Routine code and documentation commits may retain the current version. Pull requests to `main` run build, static checks, and short architecture/typing/release-intent checks with read-only permissions. Pushes to `main` run the full release gates, including locked, lowest-direct, and highest allowed dependency samples, but skip publication unless the version increased across the push; initial creation of `main` publishes its current version. Manual workflow runs validate only. A failed run may be retried, but a later same-version push does not resume publication: changed contents require another version bump. Follow [release operations](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#发布操作) for publisher setup and retry boundaries. Dependency samples and current API/type checks do not establish backward compatibility or a cross-version upgrade guarantee.
519
+ Routine code and documentation commits may retain the current version. Pushes to `main` run the full release gates, including locked, lowest-direct, and highest allowed dependency samples, but skip publication unless the version increased across the push; initial creation of `main` publishes its current version. Manual workflow runs validate only. A failed run may be retried, but a later same-version push does not resume publication: changed contents require another version bump. Follow [release operations](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#发布操作) for publisher setup and retry boundaries. Dependency samples and current API/type checks do not establish backward compatibility or a cross-version upgrade guarantee.
506
520
 
507
521
  </details>
508
522
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-ddd-framework"
3
- version = "0.7.0"
3
+ version = "0.7.2"
4
4
  description = "Modular DDD application framework with project CLI and bundled templates"
5
5
  readme = "README.md"
6
6
  license = "LicenseRef-Proprietary"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-ddd-framework"
3
- version = "0.7.0"
3
+ version = "0.7.2"
4
4
  description = "Modular DDD application framework with project CLI and bundled templates"
5
5
  readme = "README.md"
6
6
  license = "LicenseRef-Proprietary"
@@ -15,7 +15,13 @@ from starlette.middleware import Middleware
15
15
  from ..application import Application
16
16
  from ..application_services import ApplicationServiceValidationError
17
17
  from ..authorization import PermissionDeniedError, UnauthenticatedError
18
- from ..errors import BusinessError, FrameworkError, ResourceConflictError, ResourceNotFoundError
18
+ from ..errors import (
19
+ BusinessError,
20
+ FrameworkError,
21
+ InvalidApplicationStateError,
22
+ ResourceConflictError,
23
+ ResourceNotFoundError,
24
+ )
19
25
  from ..lifecycle import ApplicationState
20
26
  from .contracts import RouterCatalog
21
27
  from .error_handlers import (
@@ -30,6 +36,7 @@ from .error_handlers import (
30
36
  )
31
37
  from .errors import FastApiAdapterError
32
38
  from .filters import ServiceFilter, _validate_filters
39
+ from .health import _APPLICATION_STATE_ATTRIBUTE
33
40
  from .middleware import DiMiddleware, _compile_middlewares
34
41
  from .module import FastApiModule
35
42
  from .realtime.runtime import _FastApiRealtimeRuntime
@@ -174,6 +181,7 @@ class FastApiAdapter:
174
181
  app.state.python_ddd_framework_filters = self._filters
175
182
  app.state.python_ddd_framework_upload_limits = self._upload_limits
176
183
  app.state.dishka_container = self._application._container_for_integration()
184
+ setattr(app.state, _APPLICATION_STATE_ATTRIBUTE, self._application)
177
185
  app.user_middleware = [*middlewares, Middleware(_RequestTaskMiddleware)]
178
186
  app.add_middleware(_RequestContextMiddleware, application=self._application)
179
187
  _install_tracing(self._application, app)
@@ -191,17 +199,19 @@ class FastApiAdapter:
191
199
  try:
192
200
  self._validate_start_target(app)
193
201
  except BaseException:
194
- if self._installed_app is app:
202
+ if self._installed_app is app and self._application.state is ApplicationState.COMPOSED:
195
203
  try:
196
- if self._application.state is ApplicationState.COMPOSED:
197
- await self._application.stop()
204
+ await self._application.stop()
198
205
  finally:
199
- self._clear_container_bridge(app)
206
+ self._clear_application_bridges(app)
200
207
  raise
201
208
  try:
202
209
  await self._application.start()
210
+ except InvalidApplicationStateError:
211
+ # Core 在取得转换 ownership 前拒绝重复/并发进入;不能撤销有效 lifespan 的桥。
212
+ raise
203
213
  except BaseException:
204
- self._clear_container_bridge(app)
214
+ self._clear_application_bridges(app)
205
215
  raise
206
216
 
207
217
  try:
@@ -214,7 +224,7 @@ class FastApiAdapter:
214
224
  await self._application.stop()
215
225
  finally:
216
226
  # Container 的 close 始终属于 Application;这里只撤销 Web 引用。
217
- self._clear_container_bridge(app)
227
+ self._clear_application_bridges(app)
218
228
 
219
229
  def _validate_install_target(self, app: FastAPI) -> None:
220
230
  if not isinstance(app, FastAPI):
@@ -225,6 +235,8 @@ class FastApiAdapter:
225
235
  raise FastApiAdapterError("FastAPI instance already has a Python DDD Framework adapter")
226
236
  if hasattr(app.state, _DISHKA_CONTAINER_BRIDGE):
227
237
  raise FastApiAdapterError("FastAPI instance already has a Dishka container bridge")
238
+ if hasattr(app.state, _APPLICATION_STATE_ATTRIBUTE):
239
+ raise FastApiAdapterError("FastAPI instance already has an Application binding")
228
240
  if app.middleware_stack is not None:
229
241
  raise FastApiAdapterError("FastAPI middleware stack was already built before install")
230
242
  if self._application.state is not ApplicationState.COMPOSED:
@@ -239,6 +251,8 @@ class FastApiAdapter:
239
251
  )
240
252
  if getattr(app.state, _INSTALLATION_MARKER, None) != str(self._application.id):
241
253
  raise FastApiAdapterError("FastAPI installation marker changed before startup")
254
+ if getattr(app.state, _APPLICATION_STATE_ATTRIBUTE, None) is not self._application:
255
+ raise FastApiAdapterError("FastAPI Application binding changed before startup")
242
256
  if app.state.python_ddd_framework_filters != self._filters:
243
257
  raise FastApiAdapterError("HTTP filters changed after adapter installation")
244
258
  if tuple(app.user_middleware) != self._installed_middleware:
@@ -258,9 +272,10 @@ class FastApiAdapter:
258
272
  raise FastApiAdapterError("Dishka container bridge changed before startup")
259
273
 
260
274
  @staticmethod
261
- def _clear_container_bridge(app: FastAPI) -> None:
262
- if hasattr(app.state, _DISHKA_CONTAINER_BRIDGE):
263
- delattr(app.state, _DISHKA_CONTAINER_BRIDGE)
275
+ def _clear_application_bridges(app: FastAPI) -> None:
276
+ for attribute in (_DISHKA_CONTAINER_BRIDGE, _APPLICATION_STATE_ATTRIBUTE):
277
+ if hasattr(app.state, attribute):
278
+ delattr(app.state, attribute)
264
279
 
265
280
  async def _shutdown_realtime(self) -> None:
266
281
  try:
@@ -87,7 +87,11 @@ async def _run_filters(
87
87
  context: ActionFilterContext,
88
88
  target: Callable[[], Awaitable[object]],
89
89
  ) -> object:
90
+ if not registrations:
91
+ return await target()
92
+
90
93
  async def invoke(index: int) -> object:
94
+ nonlocal invoke
91
95
  if index == len(registrations):
92
96
  return await target()
93
97
  instance = await container.get(registrations[index].filter_type)
@@ -97,7 +101,11 @@ async def _run_filters(
97
101
  finally:
98
102
  continuation.active = False
99
103
 
100
- return await invoke(0)
104
+ try:
105
+ return await invoke(0)
106
+ finally:
107
+ # 保留原失效检查,只解除已结束 filter 链对请求执行状态的引用。
108
+ del invoke
101
109
 
102
110
 
103
111
  def _validate_filters(registrations: Sequence[ServiceFilter], container: AsyncContainer) -> None:
@@ -2,10 +2,13 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from fastapi import APIRouter
5
+ from fastapi import APIRouter, Request
6
6
  from starlette.responses import JSONResponse
7
7
 
8
8
  from ..application import Application
9
+ from .errors import FastApiAdapterError
10
+
11
+ _APPLICATION_STATE_ATTRIBUTE = "_python_ddd_framework_application"
9
12
 
10
13
  HEALTH_LIVE_PATH = "/health/live"
11
14
  HEALTH_READY_PATH = "/health/ready"
@@ -13,18 +16,24 @@ HEALTH_LIVE_OPERATION_ID = "python_ddd_framework_health_live"
13
16
  HEALTH_READY_OPERATION_ID = "python_ddd_framework_health_ready"
14
17
 
15
18
 
16
- def _create_health_router(application: Application) -> APIRouter:
17
- router = APIRouter(tags=["health"])
19
+ async def live() -> JSONResponse:
20
+ return JSONResponse(status_code=200, content={"status": "live"})
21
+
22
+
23
+ async def ready(request: Request) -> JSONResponse:
24
+ # FastAPI 可长期缓存 callable;应用引用只在当前请求期间从实例状态取得。
25
+ application = getattr(request.app.state, _APPLICATION_STATE_ATTRIBUTE, None)
26
+ if not isinstance(application, Application):
27
+ raise FastApiAdapterError("FastAPI Application binding is unavailable")
28
+ is_ready = application.is_ready
29
+ return JSONResponse(
30
+ status_code=200 if is_ready else 503,
31
+ content={"status": "ready" if is_ready else "not_ready"},
32
+ )
18
33
 
19
- async def live() -> JSONResponse:
20
- return JSONResponse(status_code=200, content={"status": "live"})
21
34
 
22
- async def ready() -> JSONResponse:
23
- is_ready = application.is_ready
24
- return JSONResponse(
25
- status_code=200 if is_ready else 503,
26
- content={"status": "ready" if is_ready else "not_ready"},
27
- )
35
+ def _create_health_router() -> APIRouter:
36
+ router = APIRouter(tags=["health"])
28
37
 
29
38
  router.add_api_route(
30
39
  HEALTH_LIVE_PATH,
@@ -52,7 +52,8 @@ class _HttpParameterValidator:
52
52
  for name in self._validators:
53
53
  if name in actual:
54
54
  arguments = _InvocationArguments((actual[name],), {})
55
- arguments.mark_validated()
55
+ # HTTP Filter 会获得参数引用,始终保留独立于服务拦截链的改参快照。
56
+ arguments.mark_validated(capture_structure=True)
56
57
  arguments.exposed = True
57
58
  snapshots[name] = arguments
58
59
  return snapshots
@@ -135,7 +135,7 @@ def _build_route_plan(
135
135
  )
136
136
  )
137
137
 
138
- health_router = _create_health_router(application)
138
+ health_router = _create_health_router()
139
139
  health_route_start = len(preview.routes)
140
140
  preview.include_router(health_router)
141
141
  health_candidates = _route_candidates(
@@ -1,4 +1,4 @@
1
- """调用签名的 DI 分类与原生注入包装;作用域创建仍归各运行入口。"""
1
+ """调用签名的 DI 分类与参数装配;实例解析和作用域仍归原生容器。"""
2
2
 
3
3
  from __future__ import annotations
4
4
 
@@ -9,7 +9,7 @@ from types import MappingProxyType, SimpleNamespace
9
9
  from typing import Annotated, Any, TypeVar, get_args, get_origin, get_type_hints
10
10
 
11
11
  from dishka import AsyncContainer, BaseScope, DependencyKey
12
- from dishka.integrations.base import default_parse_dependency, wrap_injection
12
+ from dishka.integrations.base import default_parse_dependency
13
13
 
14
14
  _R = TypeVar("_R")
15
15
 
@@ -124,22 +124,8 @@ class _CallablePlan:
124
124
  # 先验证全部业务实参,再解析任何依赖,避免错误调用触发 resource factory。
125
125
  bound = self.signature.bind(*args, **kwargs)
126
126
  bound.apply_defaults()
127
-
128
- def parse(parameter: inspect.Parameter, hint: Any) -> DependencyKey | None:
129
- return self.dependencies.get(parameter.name)
130
-
131
- async def target(*args: object, **kwargs: object) -> _R:
132
- return await function(*args, **kwargs)
133
-
134
- # 原函数可能被多个 Application 共享;只给当前调用的 native wrapper 提供签名。
135
- target.__signature__ = inspect.signature(function) # type: ignore[attr-defined]
136
- target.__annotations__ = {}
137
- injected = wrap_injection(
138
- func=target,
139
- container_getter=lambda args, kwargs: container,
140
- is_async=True,
141
- parse_dependency=parse,
142
- )
127
+ # 编译与执行之间可能改变签名元数据;无 DI 的快路径也保留原生边界检查。
128
+ signature = inspect.signature(function)
143
129
  # DI 参数从签名移除后位置会变化;普通业务参数按名称交给原函数。
144
130
  positional = tuple(
145
131
  bound.arguments[name]
@@ -151,7 +137,33 @@ class _CallablePlan:
151
137
  for name, value in bound.arguments.items()
152
138
  if self.signature.parameters[name].kind is not inspect.Parameter.POSITIONAL_ONLY
153
139
  }
154
- return await injected(*positional, **named)
140
+ if not self.dependencies:
141
+ return await function(*positional, **named)
142
+
143
+ # 与原生注入一致,当前签名决定有效 DI 参数及解析顺序,分类仍来自编译计划。
144
+ dependencies = {
145
+ name: self.dependencies[name]
146
+ for name in signature.parameters
147
+ if name in self.dependencies
148
+ }
149
+ if dependencies:
150
+ # 保留原生注入剥离 DI 后的签名校验;畸形元数据须在资源获取前失败。
151
+ inspect.Signature(
152
+ parameters=[
153
+ parameter.replace(annotation=Any)
154
+ for name, parameter in signature.parameters.items()
155
+ if name not in dependencies
156
+ ],
157
+ return_annotation=signature.return_annotation,
158
+ )
159
+ for name, dependency in dependencies.items():
160
+ # 原生常量直接提供值,不触发同 key 的 Provider;其余依赖仍由容器拥有。
161
+ named[name] = (
162
+ dependency.get_const_value()
163
+ if dependency.is_const()
164
+ else await container.get(dependency.type_hint, dependency.component)
165
+ )
166
+ return await function(*positional, **named)
155
167
 
156
168
 
157
169
  async def _call_in_scope(
@@ -204,7 +204,8 @@ class _MethodDispatcher:
204
204
  ),
205
205
  ),
206
206
  ) from None
207
- arguments.mark_validated()
207
+ # 没有拦截器时参数不会被公开给扩展;有任一扩展就保留快照,覆盖后期首次改参。
208
+ arguments.mark_validated(capture_structure=any(pipeline.steps.values()))
208
209
 
209
210
  async def _write_audit(
210
211
  self,
@@ -41,8 +41,13 @@ class _InterceptorPipeline:
41
41
  callback: Callable[[], Awaitable[object]],
42
42
  ) -> object:
43
43
  registrations = self.steps[stage]
44
+ # 空扩展链仍执行原阶段逻辑;不创建自引用的递归闭包,避免把回调
45
+ # 及其 scope 状态留到循环 GC 才释放。
46
+ if not registrations:
47
+ return await callback()
44
48
 
45
49
  async def proceed(index: int) -> object:
50
+ nonlocal proceed
46
51
  if index == len(registrations):
47
52
  return await callback()
48
53
  interceptor = await container.get(registrations[index].interceptor)
@@ -52,7 +57,11 @@ class _InterceptorPipeline:
52
57
  finally:
53
58
  invocation._close()
54
59
 
55
- return await proceed(0)
60
+ try:
61
+ return await proceed(0)
62
+ finally:
63
+ # continuation 已失效;解除递归 cell,避免旧 invocation 继续持有执行回调。
64
+ del proceed
56
65
 
57
66
 
58
67
  @dataclass(slots=True)
@@ -80,12 +89,14 @@ class _InvocationArguments:
80
89
  or (self.exposed and self._structure([]) != self._validated_structure)
81
90
  )
82
91
 
83
- def mark_validated(self) -> None:
92
+ def mark_validated(self, *, capture_structure: bool) -> None:
84
93
  # 只在验证成功后记录规范化结果;快照与调用共同归属当前 pipeline。
85
94
  self._validated_args = self.args
86
95
  self._validated_kwargs = dict(self.kwargs)
87
96
  self._validated_nodes = []
88
- self._validated_structure = self._structure(self._validated_nodes)
97
+ self._validated_structure = (
98
+ self._structure(self._validated_nodes) if capture_structure else None
99
+ )
89
100
  # 不重置 exposed:早期扩展可能保留参数引用,并在后续阶段原地修改同一对象。
90
101
 
91
102
  def _structure(self, retained: list[object]) -> object:
@@ -220,15 +220,24 @@ class _EntryInterceptionCatalog:
220
220
  )
221
221
 
222
222
  stages = tuple(
223
- stage for stage in InterceptionStage if stage is not InterceptionStage.METHOD
223
+ stage
224
+ for stage in InterceptionStage
225
+ if stage is not InterceptionStage.METHOD and entry.steps[stage]
224
226
  )
227
+ if not stages:
228
+ return await boundary()
225
229
 
226
230
  async def run(index: int) -> object:
231
+ nonlocal run
227
232
  if index == len(stages):
228
233
  return await boundary()
229
234
  return await pipeline.run(stages[index], container, lambda: run(index + 1))
230
235
 
231
- return await run(0)
236
+ try:
237
+ return await run(0)
238
+ finally:
239
+ # 各阶段已退出;不让递归编排额外保留参数、scope 和事务边界回调。
240
+ del run
232
241
 
233
242
 
234
243
  async def _invoke_managed_entry(
@@ -25,6 +25,7 @@ from ..unit_of_work.options import (
25
25
  )
26
26
  from .managed_proxy import _ManagedServiceProxy
27
27
  from .methods import (
28
+ _class_policy_fingerprint,
28
29
  _compile_method,
29
30
  _CompiledMethod,
30
31
  _policy_fingerprint,
@@ -42,25 +43,41 @@ def _managed_names(candidate: type[object]) -> tuple[str, ...]:
42
43
  )
43
44
  names: list[str] = []
44
45
  # 类级标记覆盖公开方法;显式方法标记即使位于非公开方法也必须接受形态校验。
45
- members = {
46
- name: value for base in reversed(candidate.__mro__) for name, value in vars(base).items()
47
- }
48
- public = _public_method_names(candidate, is_contract=False)
46
+ members: dict[str, object] = {}
47
+ for base in reversed(candidate.__mro__):
48
+ members.update(vars(base))
49
+ # 原生 object 成员不携带策略;按身份移除未覆盖项,保留用户声明及其顺序。
50
+ for name, value in vars(object).items():
51
+ if name in members and members[name] is value:
52
+ del members[name]
53
+ public = set(_public_method_names(candidate, is_contract=False)) if class_marked else set()
49
54
  for name, value in members.items():
50
- targets = (
51
- (value, value.__func__) if isinstance(value, (staticmethod, classmethod)) else (value,)
52
- )
53
- marked = any(hasattr(target, attribute) for target in targets for attribute in attributes)
54
- if marked or (class_marked and name in public):
55
+ # 类标记已覆盖公开方法时,无需再逐属性判断该方法是否显式标记。
56
+ marked = name in public
57
+ if not marked:
58
+ targets = (
59
+ (value, value.__func__)
60
+ if isinstance(value, (staticmethod, classmethod))
61
+ else (value,)
62
+ )
63
+ marked = any(
64
+ hasattr(target, attribute) for target in targets for attribute in attributes
65
+ )
66
+ if marked:
55
67
  _require_async_instance_method(candidate, name, role="managed service")
56
68
  names.append(name)
57
69
  return tuple(names)
58
70
 
59
71
 
60
72
  def _assert_methods(candidate: type[object], methods: Mapping[str, _CompiledMethod]) -> None:
61
- if tuple(methods) != _managed_names(candidate) or any(
73
+ names = _managed_names(candidate)
74
+ # 每次解析仍读取当前声明;同一类的策略只在本次同步核对内共用,
75
+ # 不跨请求缓存,后续类级/继承策略修改仍会与编译值发生差异。
76
+ class_policy = _class_policy_fingerprint(candidate)
77
+ if tuple(methods) != names or any(
62
78
  getattr(candidate, name) is not method.implementation_method
63
- or _policy_fingerprint(candidate, method.implementation_method) != method.policy_fingerprint
79
+ or _policy_fingerprint(candidate, method.implementation_method, class_policy=class_policy)
80
+ != method.policy_fingerprint
64
81
  for name, method in methods.items()
65
82
  ):
66
83
  raise ApplicationServiceDefinitionError(
@@ -3,9 +3,10 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import inspect
6
+ import keyword
6
7
  from collections.abc import Awaitable, Callable, Mapping
7
8
  from dataclasses import dataclass, field, replace
8
- from types import MappingProxyType
9
+ from types import FunctionType, MappingProxyType
9
10
  from typing import Any, cast, get_type_hints
10
11
 
11
12
  from pydantic import ConfigDict, TypeAdapter, validate_call
@@ -199,15 +200,36 @@ _POLICY_ATTRIBUTES = (
199
200
  _AUDITING_ATTRIBUTE,
200
201
  )
201
202
 
203
+ _PolicyRows = tuple[tuple[object, ...], ...]
204
+ _ClassPolicyFingerprint = tuple[bool, _PolicyRows]
202
205
 
203
- def _policy_fingerprint(implementation: type[object], method: object) -> tuple[object, ...]:
206
+
207
+ def _policy_values(target: object) -> _PolicyRows:
208
+ namespace = vars(target)
209
+ if any(attribute in namespace for attribute in _POLICY_ATTRIBUTES):
210
+ return (tuple(namespace.get(attribute) for attribute in _POLICY_ATTRIBUTES),)
211
+ return ()
212
+
213
+
214
+ def _class_policy_fingerprint(implementation: type[object]) -> _ClassPolicyFingerprint:
204
215
  return (
205
216
  issubclass(implementation, ValidationEnabled),
206
- tuple(
207
- tuple(vars(target).get(attribute) for attribute in _POLICY_ATTRIBUTES)
208
- for target in (*implementation.__mro__, method)
209
- if any(attribute in vars(target) for attribute in _POLICY_ATTRIBUTES)
210
- ),
217
+ tuple(row for target in implementation.__mro__ for row in _policy_values(target)),
218
+ )
219
+
220
+
221
+ def _policy_fingerprint(
222
+ implementation: type[object],
223
+ method: object,
224
+ *,
225
+ class_policy: _ClassPolicyFingerprint | None = None,
226
+ ) -> tuple[object, ...]:
227
+ validation, rows = (
228
+ _class_policy_fingerprint(implementation) if class_policy is None else class_policy
229
+ )
230
+ return (
231
+ validation,
232
+ (*rows, *_policy_values(method)),
211
233
  )
212
234
 
213
235
 
@@ -278,11 +300,7 @@ def _require_async_instance_method(
278
300
  symbol=symbol,
279
301
  reason=f"public {role} methods must use async def",
280
302
  )
281
- parameters = tuple(inspect.signature(method).parameters.values())
282
- if not parameters or parameters[0].kind not in (
283
- inspect.Parameter.POSITIONAL_ONLY,
284
- inspect.Parameter.POSITIONAL_OR_KEYWORD,
285
- ):
303
+ if not _has_positional_receiver(method):
286
304
  # Catalog 与 HTTP generator 都会剥离 receiver;缺少首个位置参数时不能伪装成实例方法。
287
305
  raise ApplicationServiceDefinitionError(
288
306
  symbol=symbol,
@@ -291,6 +309,39 @@ def _require_async_instance_method(
291
309
  return cast(Callable[..., Awaitable[object]], method)
292
310
 
293
311
 
312
+ def _has_positional_receiver(method: FunctionType) -> bool:
313
+ # 普通 Python 函数的位置参数由 code 直接声明;完整签名/类型仍在编译时解析。
314
+ # 包装、自定义签名和惰性注解沿用 inspect,不能从包装函数的 *args 推断 receiver。
315
+ code = method.__code__
316
+ count = code.co_argcount + code.co_kwonlyargcount
317
+ count += bool(code.co_flags & inspect.CO_VARARGS) + bool(code.co_flags & inspect.CO_VARKEYWORDS)
318
+ names = code.co_varnames[:count]
319
+ special = any(
320
+ hasattr(method, name)
321
+ for name in (
322
+ "__wrapped__",
323
+ "__signature__",
324
+ "__text_signature__",
325
+ "_partialmethod",
326
+ "__partialmethod__",
327
+ "__annotate__",
328
+ )
329
+ )
330
+ if (
331
+ special
332
+ or len(set(names)) != len(names)
333
+ or any(not name.isidentifier() or keyword.iskeyword(name) for name in names)
334
+ or len(method.__defaults__ or ()) > code.co_argcount
335
+ ):
336
+ # 手工替换 code 的非法参数及特殊声明仍由原生 Signature 报告,不能静默放行。
337
+ parameters = tuple(inspect.signature(method).parameters.values())
338
+ return bool(parameters) and parameters[0].kind in (
339
+ inspect.Parameter.POSITIONAL_ONLY,
340
+ inspect.Parameter.POSITIONAL_OR_KEYWORD,
341
+ )
342
+ return code.co_argcount > 0
343
+
344
+
294
345
  def _resolved_signature(
295
346
  method: Callable[..., Awaitable[object]],
296
347
  ) -> tuple[inspect.Signature, dict[str, object]]:
@@ -332,6 +332,11 @@ def _validate_revision_graph(
332
332
  # walk_revisions 强制 Alembic 在任何 engine 创建前加载并校验组合 graph/depends_on。
333
333
  script = ScriptDirectory.from_config(config)
334
334
  revisions = tuple(script.walk_revisions())
335
+ empty_model_sources = {
336
+ (item.owner, item.registration.branch_label, item.migration_path)
337
+ for item in models.for_connection(connection_name)
338
+ if not item.registration.metadata.tables
339
+ }
335
340
  for source in migration_sources:
336
341
  if source.extension is not None:
337
342
  _validate_extension_prerequisites(models, connection_name, source, script)
@@ -341,7 +346,18 @@ def _validate_revision_graph(
341
346
  if Path(revision.path).resolve().parent == source.migration_path
342
347
  )
343
348
  if not owned_revisions:
344
- if (owner is not None and source.owner != owner) or allow_empty:
349
+ # 仅全局操作豁免纯 ORM 骨架的缺失 revision;不跳过图或数据库 heads 检查。
350
+ # 同一 owner 可贡献多个来源,判定必须限定当前 connection 与具体分支/目录。
351
+ if (
352
+ (owner is not None and source.owner != owner)
353
+ or allow_empty
354
+ or (
355
+ owner is None
356
+ and source.extension is None
357
+ and (source.owner, source.branch_label, source.migration_path)
358
+ in empty_model_sources
359
+ )
360
+ ):
345
361
  continue
346
362
  raise SqlAlchemyModelRegistrationError(
347
363
  owner=str(source.owner),