python-ddd-framework 0.8.0__tar.gz → 0.9.0__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 (460) hide show
  1. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/PKG-INFO +19 -3
  2. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/README.md +18 -2
  3. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/pyproject.toml +1 -1
  4. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/pyproject.toml.orig +1 -1
  5. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/__init__.py +0 -2
  6. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/README.md +6 -0
  7. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/AGENTS.md +1 -0
  8. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/README.md +6 -0
  9. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/module.py.jinja +0 -4
  10. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/architecture.md +6 -0
  11. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/development.md +62 -2
  12. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/__init__.py +1 -6
  13. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/application.py +4 -9
  14. python_ddd_framework-0.9.0/src/python_ddd_framework/settings/catalog.py +67 -0
  15. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/management.py +3 -13
  16. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/manager.py +9 -33
  17. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/module.py +3 -9
  18. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/values.py +0 -8
  19. python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/__init__.py.jinja +0 -1
  20. python_ddd_framework-0.8.0/src/python_ddd_framework/settings/catalog.py +0 -122
  21. python_ddd_framework-0.8.0/src/python_ddd_framework/settings/changes.py +0 -14
  22. python_ddd_framework-0.8.0/src/python_ddd_framework/settings/declarations.py +0 -18
  23. python_ddd_framework-0.8.0/src/python_ddd_framework/settings/handlers.py +0 -43
  24. python_ddd_framework-0.8.0/src/python_ddd_framework/settings/notifications.py +0 -41
  25. python_ddd_framework-0.8.0/src/python_ddd_framework/settings/refresh.py +0 -140
  26. python_ddd_framework-0.8.0/src/python_ddd_framework/settings/refresh_module.py +0 -52
  27. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/LICENSE +0 -0
  28. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application/__init__.py +0 -0
  29. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application/build_spec.py +0 -0
  30. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application/builder.py +0 -0
  31. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application/composition.py +0 -0
  32. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application/runtime.py +0 -0
  33. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application/runtime_hooks.py +0 -0
  34. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application/state.py +0 -0
  35. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application_services/__init__.py +0 -0
  36. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application_services/bindings.py +0 -0
  37. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application_services/catalog.py +0 -0
  38. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application_services/contracts.py +0 -0
  39. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application_services/dispatcher.py +0 -0
  40. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application_services/errors.py +0 -0
  41. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application_services/invocation.py +0 -0
  42. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application_services/module.py +0 -0
  43. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/application_services/pagination.py +0 -0
  44. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/auditing/__init__.py +0 -0
  45. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/auditing/contracts.py +0 -0
  46. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/auditing/control.py +0 -0
  47. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/auditing/module.py +0 -0
  48. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/auditing/sqlalchemy/__init__.py +0 -0
  49. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/auditing/sqlalchemy/migrations/0001_auditing.py +0 -0
  50. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/auditing/sqlalchemy/migrations/__init__.py +0 -0
  51. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/auditing/sqlalchemy/models.py +0 -0
  52. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/auditing/sqlalchemy/module.py +0 -0
  53. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/auditing/sqlalchemy/store.py +0 -0
  54. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/authorization/__init__.py +0 -0
  55. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/authorization/catalog.py +0 -0
  56. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/authorization/checking.py +0 -0
  57. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/authorization/contracts.py +0 -0
  58. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/authorization/definition_discovery.py +0 -0
  59. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/authorization/definitions.py +0 -0
  60. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/authorization/errors.py +0 -0
  61. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/authorization/module.py +0 -0
  62. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/authorization/options.py +0 -0
  63. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/__init__.py +0 -0
  64. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/application.py +0 -0
  65. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/child.py +0 -0
  66. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/contracts.py +0 -0
  67. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/declarations.py +0 -0
  68. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/lifecycle.py +0 -0
  69. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/local.py +0 -0
  70. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/locks.py +0 -0
  71. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/management.py +0 -0
  72. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/module.py +0 -0
  73. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/permissions.py +0 -0
  74. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_execution/processes.py +0 -0
  75. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/__init__.py +0 -0
  76. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/catalog.py +0 -0
  77. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/contracts.py +0 -0
  78. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/declaration.py +0 -0
  79. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/errors.py +0 -0
  80. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/execution.py +0 -0
  81. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/pgqueuer/UPSTREAM_LICENSE.txt +0 -0
  82. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/pgqueuer/__init__.py +0 -0
  83. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/pgqueuer/enqueue.py +0 -0
  84. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/0001_pgqueuer_1_3_2.py +0 -0
  85. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/__init__.py +0 -0
  86. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/pgqueuer/module.py +0 -0
  87. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/pgqueuer/options.py +0 -0
  88. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/pgqueuer/runtime.py +0 -0
  89. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/pgqueuer/sql/pgqueuer_1_3_2_install.sql +0 -0
  90. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_jobs/pgqueuer/supervision.py +0 -0
  91. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_workers/__init__.py +0 -0
  92. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_workers/catalog.py +0 -0
  93. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_workers/contracts.py +0 -0
  94. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_workers/errors.py +0 -0
  95. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_workers/execution.py +0 -0
  96. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/background_workers/runtime.py +0 -0
  97. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/caching/__init__.py +0 -0
  98. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/caching/contracts.py +0 -0
  99. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/caching/errors.py +0 -0
  100. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/caching/module.py +0 -0
  101. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/caching/naming.py +0 -0
  102. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/caching/options.py +0 -0
  103. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/caching/unit_of_work.py +0 -0
  104. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/cli/__init__.py +0 -0
  105. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/cli/development.py +0 -0
  106. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/cli/errors.py +0 -0
  107. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/cli/inspection.py +0 -0
  108. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/cli/project.py +0 -0
  109. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/cli/runtime.py +0 -0
  110. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/__init__.py +0 -0
  111. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/composition.py +0 -0
  112. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/contracts.py +0 -0
  113. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/dotenv_source.py +0 -0
  114. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/environment_source.py +0 -0
  115. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/immutability.py +0 -0
  116. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/input_shape.py +0 -0
  117. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/merge.py +0 -0
  118. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/root.py +0 -0
  119. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/sources.py +0 -0
  120. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/values.py +0 -0
  121. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/configuration/yaml_source.py +0 -0
  122. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/__init__.py +0 -0
  123. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/generation.py +0 -0
  124. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/project_metadata.py +0 -0
  125. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/publication.py +0 -0
  126. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/source.py +0 -0
  127. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/basic/cookiecutter.json +0 -0
  128. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/README.md +0 -0
  129. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
  130. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/__init__.py.jinja +0 -0
  131. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/conversion_service.py.jinja +0 -0
  132. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/module.py.jinja +0 -0
  133. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/__init__.py.jinja +0 -0
  134. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/default_conversion_service.py.jinja +0 -0
  135. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/cookiecutter.json +0 -0
  136. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
  137. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/__init__.py.jinja +0 -0
  138. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/__init__.py.jinja +0 -0
  139. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/__init__.py.jinja +0 -0
  140. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/__init__.py.jinja +0 -0
  141. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers/__init__.py.jinja +0 -0
  142. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/__init__.py.jinja +0 -0
  143. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services/__init__.py.jinja +0 -0
  144. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors/__init__.py.jinja +0 -0
  145. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/module.py.jinja +0 -0
  146. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options/__init__.py.jinja +0 -0
  147. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/__init__.py.jinja +0 -0
  148. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/__init__.py.jinja +0 -0
  149. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs}/__init__.py.jinja +0 -0
  150. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services}/__init__.py.jinja +0 -0
  151. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/module.py.jinja +0 -0
  152. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services}/__init__.py.jinja +0 -0
  153. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views}/__init__.py.jinja +0 -0
  154. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/__init__.py.jinja +0 -0
  155. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities}/__init__.py.jinja +0 -0
  156. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events}/__init__.py.jinja +0 -0
  157. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/module.py.jinja +0 -0
  158. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories}/__init__.py.jinja +0 -0
  159. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding}/__init__.py.jinja +0 -0
  160. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services}/__init__.py.jinja +0 -0
  161. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings}/__init__.py.jinja +0 -0
  162. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects}/__init__.py.jinja +0 -0
  163. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/__init__.py.jinja +0 -0
  164. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants}/__init__.py.jinja +0 -0
  165. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums}/__init__.py.jinja +0 -0
  166. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors}/__init__.py.jinja +0 -0
  167. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages}/__init__.py.jinja +0 -0
  168. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/module.py.jinja +0 -0
  169. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions}/__init__.py.jinja +0 -0
  170. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/value_objects/__init__.py.jinja +0 -0
  171. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/__init__.py.jinja +0 -0
  172. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters}/__init__.py.jinja +0 -0
  173. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models}/__init__.py.jinja +0 -0
  174. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/module.py.jinja +0 -0
  175. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers}/__init__.py.jinja +0 -0
  176. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets}/__init__.py.jinja +0 -0
  177. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/__init__.py.jinja +0 -0
  178. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/migrations/__init__.py.jinja +0 -0
  179. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/__init__.py.jinja +0 -0
  180. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/base.py.jinja +0 -0
  181. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/module.py.jinja +0 -0
  182. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/__init__.py.jinja +0 -0
  183. {python_ddd_framework-0.8.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets → python_ddd_framework-0.9.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests}/__init__.py.jinja +0 -0
  184. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/cookiecutter.json +0 -0
  185. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.dockerignore +0 -0
  186. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.gitignore +0 -0
  187. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.python-version +0 -0
  188. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/Dockerfile +0 -0
  189. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/app.development.yaml.jinja +0 -0
  190. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/compose.dev.yaml.jinja +0 -0
  191. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/compose.production.yaml.jinja +0 -0
  192. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/pyproject.toml.jinja +0 -0
  193. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/__init__.py.jinja +0 -0
  194. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/main.py.jinja +0 -0
  195. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/tests/conftest.py.jinja +0 -0
  196. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/tests/host/test_http.py.jinja +0 -0
  197. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/scripts/.gitkeep +0 -0
  198. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/developer_kit/wiring.py +0 -0
  199. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/diagnostics/__init__.py +0 -0
  200. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/diagnostics/journal.py +0 -0
  201. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/diagnostics/model.py +0 -0
  202. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/diagnostics/source.py +0 -0
  203. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/distributed_lock/__init__.py +0 -0
  204. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/distributed_lock/contracts.py +0 -0
  205. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/distributed_lock/options.py +0 -0
  206. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/domain/__init__.py +0 -0
  207. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/domain/aggregates.py +0 -0
  208. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/domain/entities.py +0 -0
  209. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/domain/errors.py +0 -0
  210. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/domain/event_values.py +0 -0
  211. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/domain/services.py +0 -0
  212. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/domain/value_objects.py +0 -0
  213. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/errors/__init__.py +0 -0
  214. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/errors/base.py +0 -0
  215. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/errors/business.py +0 -0
  216. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/errors/configuration.py +0 -0
  217. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/errors/diagnostics.py +0 -0
  218. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/errors/lifecycle.py +0 -0
  219. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/errors/modularity.py +0 -0
  220. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/errors/services.py +0 -0
  221. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/__init__.py +0 -0
  222. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/aggregate.py +0 -0
  223. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/catalog.py +0 -0
  224. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/contracts.py +0 -0
  225. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/contribution.py +0 -0
  226. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/discovery.py +0 -0
  227. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/entities.py +0 -0
  228. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/errors.py +0 -0
  229. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/module.py +0 -0
  230. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/runtime.py +0 -0
  231. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/subscription.py +0 -0
  232. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/events/unit_of_work.py +0 -0
  233. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/extensions/__init__.py +0 -0
  234. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/extensions/catalog.py +0 -0
  235. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/extensions/contracts.py +0 -0
  236. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/extensions/models.py +0 -0
  237. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/extensions/module.py +0 -0
  238. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/__init__.py +0 -0
  239. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/access.py +0 -0
  240. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/access_options.py +0 -0
  241. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/action.py +0 -0
  242. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/adapter.py +0 -0
  243. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/application_services.py +0 -0
  244. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/background.py +0 -0
  245. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/contracts.py +0 -0
  246. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/error_handlers.py +0 -0
  247. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/errors.py +0 -0
  248. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/filters.py +0 -0
  249. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/health.py +0 -0
  250. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/http.py +0 -0
  251. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/http_router.py +0 -0
  252. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/manual_action.py +0 -0
  253. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/middleware.py +0 -0
  254. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/module.py +0 -0
  255. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/parameters.py +0 -0
  256. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/realtime/__init__.py +0 -0
  257. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/realtime/authentication.py +0 -0
  258. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/realtime/connection.py +0 -0
  259. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/realtime/module.py +0 -0
  260. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/realtime/options.py +0 -0
  261. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/realtime/runtime.py +0 -0
  262. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/request_context.py +0 -0
  263. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/route_integrity.py +0 -0
  264. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/routing.py +0 -0
  265. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/server.py +0 -0
  266. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/service_endpoints.py +0 -0
  267. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/service_routes.py +0 -0
  268. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/settings.py +0 -0
  269. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/streaming.py +0 -0
  270. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/tracing.py +0 -0
  271. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/transfer.py +0 -0
  272. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/upload_limits.py +0 -0
  273. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/fastapi/uploads.py +0 -0
  274. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosted_services/__init__.py +0 -0
  275. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosted_services/bridge.py +0 -0
  276. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosted_services/catalog.py +0 -0
  277. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosted_services/contracts.py +0 -0
  278. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosted_services/declarations.py +0 -0
  279. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosted_services/errors.py +0 -0
  280. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosted_services/module.py +0 -0
  281. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosted_services/options.py +0 -0
  282. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosted_services/runtime.py +0 -0
  283. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosted_services/state.py +0 -0
  284. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosting/__init__.py +0 -0
  285. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/hosting/instance.py +0 -0
  286. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/__init__.py +0 -0
  287. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/application.py +0 -0
  288. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/contracts.py +0 -0
  289. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/domain_rules.py +0 -0
  290. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/dtos.py +0 -0
  291. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/errors.py +0 -0
  292. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/extensions.py +0 -0
  293. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/http_api.py +0 -0
  294. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/management.py +0 -0
  295. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/models.py +0 -0
  296. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/module.py +0 -0
  297. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/options.py +0 -0
  298. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/passwords.py +0 -0
  299. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/permissions.py +0 -0
  300. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/seeding.py +0 -0
  301. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/services.py +0 -0
  302. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/__init__.py +0 -0
  303. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0001_identity.py +0 -0
  304. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0002_physical_delete.py +0 -0
  305. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0003_extra_properties.py +0 -0
  306. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0004_concurrency_version.py +0 -0
  307. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/__init__.py +0 -0
  308. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/models.py +0 -0
  309. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/module.py +0 -0
  310. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/repository.py +0 -0
  311. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/session_security.py +0 -0
  312. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/sqlalchemy/stores.py +0 -0
  313. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/stores.py +0 -0
  314. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/identity/tokens.py +0 -0
  315. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/__init__.py +0 -0
  316. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/arguments.py +0 -0
  317. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/callables.py +0 -0
  318. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/contracts.py +0 -0
  319. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/contribution.py +0 -0
  320. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/dispatcher.py +0 -0
  321. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/entries.py +0 -0
  322. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/entrypoints.py +0 -0
  323. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/execution.py +0 -0
  324. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/function_runtime.py +0 -0
  325. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/interception.py +0 -0
  326. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/interceptors.py +0 -0
  327. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/managed_proxy.py +0 -0
  328. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/managed_services.py +0 -0
  329. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/methods.py +0 -0
  330. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/module.py +0 -0
  331. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/policies.py +0 -0
  332. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/runtime.py +0 -0
  333. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/scopes.py +0 -0
  334. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/signature.py +0 -0
  335. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/invocation/validation.py +0 -0
  336. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/lifecycle/__init__.py +0 -0
  337. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/lifecycle/composition.py +0 -0
  338. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/lifecycle/context.py +0 -0
  339. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/lifecycle/participants.py +0 -0
  340. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/lifecycle/runtime.py +0 -0
  341. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/lifecycle/state.py +0 -0
  342. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/messaging/__init__.py +0 -0
  343. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/messaging/channel.py +0 -0
  344. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/messaging/contracts.py +0 -0
  345. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/messaging/module.py +0 -0
  346. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/messaging/options.py +0 -0
  347. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/messaging/receipt.py +0 -0
  348. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/messaging/runtime.py +0 -0
  349. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/modularity/__init__.py +0 -0
  350. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/modularity/contracts.py +0 -0
  351. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/modularity/discovery.py +0 -0
  352. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/modularity/graph.py +0 -0
  353. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/modularity/registry.py +0 -0
  354. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/modularity/selection.py +0 -0
  355. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/notifications/__init__.py +0 -0
  356. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/notifications/catalog.py +0 -0
  357. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/notifications/contracts.py +0 -0
  358. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/notifications/declarations.py +0 -0
  359. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/notifications/module.py +0 -0
  360. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/observability/__init__.py +0 -0
  361. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/observability/context.py +0 -0
  362. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/observability/export.py +0 -0
  363. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/observability/formatting.py +0 -0
  364. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/observability/logging.py +0 -0
  365. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/observability/options.py +0 -0
  366. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/observability/tracing.py +0 -0
  367. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/options/__init__.py +0 -0
  368. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/options/aliases.py +0 -0
  369. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/options/contribution.py +0 -0
  370. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/options/immutability.py +0 -0
  371. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/options/input_keys.py +0 -0
  372. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/options/issues.py +0 -0
  373. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/options/models.py +0 -0
  374. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/options/registry.py +0 -0
  375. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/options/schema.py +0 -0
  376. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/options/validation.py +0 -0
  377. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/py.typed +0 -0
  378. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/realtime/__init__.py +0 -0
  379. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/realtime/contracts.py +0 -0
  380. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/realtime/diagnostics.py +0 -0
  381. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/realtime/messages.py +0 -0
  382. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/redis/__init__.py +0 -0
  383. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/redis/cache.py +0 -0
  384. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/redis/cache_scripts.py +0 -0
  385. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/redis/distributed_lock.py +0 -0
  386. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/redis/lease_lock.py +0 -0
  387. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/redis/module.py +0 -0
  388. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/redis/notification_runtime.py +0 -0
  389. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/redis/notifications.py +0 -0
  390. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/redis/options.py +0 -0
  391. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/redis/runtime.py +0 -0
  392. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/seeding/__init__.py +0 -0
  393. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/seeding/contracts.py +0 -0
  394. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/seeding/module.py +0 -0
  395. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/seeding/runtime.py +0 -0
  396. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/__init__.py +0 -0
  397. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/arbitration.py +0 -0
  398. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/binding.py +0 -0
  399. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/composition.py +0 -0
  400. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/contribution.py +0 -0
  401. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/convention.py +0 -0
  402. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/convention_contracts.py +0 -0
  403. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/exposure.py +0 -0
  404. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/fixed_lifetime.py +0 -0
  405. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/framework_provider.py +0 -0
  406. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/native_graph.py +0 -0
  407. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/provider.py +0 -0
  408. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/registration.py +0 -0
  409. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/relocation.py +0 -0
  410. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/repository.py +0 -0
  411. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/services/runtime.py +0 -0
  412. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/binding.py +0 -0
  413. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/contracts.py +0 -0
  414. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/definition_discovery.py +0 -0
  415. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/definitions.py +0 -0
  416. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/errors.py +0 -0
  417. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/permissions.py +0 -0
  418. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/provider.py +0 -0
  419. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/sqlalchemy/__init__.py +0 -0
  420. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0001_settings.py +0 -0
  421. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0002_physical_delete.py +0 -0
  422. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0003_version_tokens.py +0 -0
  423. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/__init__.py +0 -0
  424. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/sqlalchemy/models.py +0 -0
  425. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/sqlalchemy/module.py +0 -0
  426. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/sqlalchemy/store.py +0 -0
  427. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/settings/store.py +0 -0
  428. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/__init__.py +0 -0
  429. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/__init__.py +0 -0
  430. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/env.py +0 -0
  431. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/script.py.mako +0 -0
  432. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/auditing.py +0 -0
  433. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/errors.py +0 -0
  434. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/extensions.py +0 -0
  435. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/metadata.py +0 -0
  436. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/metadata_builder.py +0 -0
  437. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/metadata_fingerprint.py +0 -0
  438. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/metadata_ownership.py +0 -0
  439. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/migration.py +0 -0
  440. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/migration_operations.py +0 -0
  441. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/migration_options.py +0 -0
  442. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/migration_sources.py +0 -0
  443. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/module.py +0 -0
  444. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/module_migration.py +0 -0
  445. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/options.py +0 -0
  446. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/repository.py +0 -0
  447. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/runtime.py +0 -0
  448. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/session_provider.py +0 -0
  449. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/sqlalchemy/unit_of_work.py +0 -0
  450. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/testing/__init__.py +0 -0
  451. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/testing/runtime.py +0 -0
  452. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/unit_of_work/__init__.py +0 -0
  453. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/unit_of_work/contracts.py +0 -0
  454. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/unit_of_work/errors.py +0 -0
  455. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/unit_of_work/lifecycle.py +0 -0
  456. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/unit_of_work/manager.py +0 -0
  457. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/unit_of_work/module.py +0 -0
  458. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/unit_of_work/options.py +0 -0
  459. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/src/python_ddd_framework/validation/__init__.py +0 -0
  460. {python_ddd_framework-0.8.0 → python_ddd_framework-0.9.0}/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.8.0
3
+ Version: 0.9.0
4
4
  Summary: Modular DDD application framework with project CLI and bundled templates
5
5
  License-Expression: LicenseRef-Proprietary
6
6
  License-File: LICENSE
@@ -64,7 +64,7 @@ Python DDD Framework combines a module system with FastAPI, Dishka, Pydantic, SQ
64
64
  | HTTP APIs | Expose selected application services through FastAPI, or write explicit routers. Use OpenAPI, filters, file uploads, downloads, and streaming responses. |
65
65
  | Persistence and events | Use async SQLAlchemy repositories, explicit transaction boundaries, module-owned Alembic migrations, seed contributors, and local events before or after commit. |
66
66
  | Identity and permissions | Add JWT authentication, refresh sessions, users and roles, permission definitions, and authorization on service methods. |
67
- | Cache, settings, and locks | Use typed Redis caching, runtime settings with conditional updates and reset, settings refresh notifications, and explicit Redis-backed business locks. |
67
+ | Cache, settings, and locks | Use typed Redis caching, global runtime settings with conditional updates and reset, and explicit Redis-backed business locks. |
68
68
  | Background execution | Enqueue durable PostgreSQL jobs with typed payloads, schedule recurring work, run periodic workers, and select in-process or managed subprocess execution. |
69
69
  | Real-time communication | Add authenticated WebSocket connections, typed messages, and targeted notifications to connected clients. |
70
70
  | Hosting and observability | Manage long-lived integrations with `HostedService`, coordinate shutdown, and use structured logging, correlation, OpenTelemetry tracing, and lifecycle health endpoints. |
@@ -273,6 +273,12 @@ Edit `backend/app.development.yaml` for local connections, identity settings, lo
273
273
 
274
274
  Generated credentials are for local development. Production configuration is supplied separately in `app.production.yaml`. See [configuration](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#定义-module-与配置) and [background and logging configuration](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#settings后台与日志).
275
275
 
276
+ ### Use global settings
277
+
278
+ Declare a typed `SettingDefinition` and its scanned provider under the owning module's `domain/settings/`, then add `SettingsModule` to that module's dependencies. Inject `SettingProvider` to read values and `SettingManager` for conditional writes/reset. The generated Host already selects Settings persistence and management HTTP; apply its Settings migration before using the store for reads or writes.
279
+
280
+ Values resolve from runtime override, Host configuration, then definition default. Reset clears an override and resumes fallback. Management provides list/read/update/reset with visibility, permissions, and version checks; business code decides when to use the value. Follow the [complete project recipe](docs/development.md#settings-策略与使用) or the generated project's **Global settings** guide for declarations, configuration, permissions, and request bodies. The minimal contract starts with 0.9.0; see [migration notes](#minimal-settings-migration-090).
281
+
276
282
  ### Run application tests
277
283
 
278
284
  After completing local database setup, run from `backend/`:
@@ -314,6 +320,16 @@ New `ddd` modules contain the full responsibility directories and necessary comp
314
320
 
315
321
  See the [migration guide](docs/development.md#数据库聚合与迁移) and [verification record](docs/status.md#http-回收与迁移来源判定未发布).
316
322
 
323
+ ## Minimal Settings migration (0.9.0)
324
+
325
+ Settings now owns only global definitions, reads, writes, and clearing overrides. Modules own definitions, the Host selects storage, and business code decides when and how to use the values. Source order, source restrictions, management permissions, typed JSON, independent transactions, UUID concurrency tokens, and reset version records remain unchanged. No dependency, database schema, or migration change is required.
326
+
327
+ - Remove `SettingsRefreshModule`, `SettingsNotificationsModule`, `SettingHandlers`, `SettingHandlerDefinition`, and Settings refresh options from Host/module wiring. Remove settings observers and the dedicated `application/setting_handlers` directory. Read through `SettingProvider` where the business needs the value; the framework no longer coordinates application, polling, reconnect compensation, retries, or application status. Generic Notifications and HostedService remain available independently.
328
+ - `SettingManager.update/reset` returns `SettingSnapshot[T]` directly: replace `result.snapshot.value/version` with `result.value/version`. `SettingWriteOutcome`, notification feedback, and handler/application status exports are removed.
329
+ - HTTP update/reset returns the same `SettingView` shape as a read: `name`, `value`, `source`, and `version`. Replace `response.setting` with `response`; remove `saved`, `notification`, and `effect` handling. `SettingWriteResult` is removed. Success confirms persistence only, and stale versions still produce a conflict.
330
+
331
+ Current rules and examples are in the [Settings contract](docs/architecture.md#typed-cache-与-settings) and [usage guide](docs/development.md#settings-策略与使用). Validation and remaining limits are recorded in [status](docs/status.md#settings-最小化未发布).
332
+
317
333
  ## Settings policies (0.8.0)
318
334
 
319
335
  `SettingDefinition` now accepts `allowed_sources`, `management_access`, `read_permission`, and `write_permission`. Existing definitions retain their source order and management visibility. Generic update/reset now also require `settings.read`, in addition to `settings.write` and any declared per-setting permissions, because their responses contain the saved setting snapshot. Update roles that previously held only write permission.
@@ -351,7 +367,7 @@ Runnable examples: [HTTP generators](docs/development.md#http-生成器与持续
351
367
  Capability composition now uses the same `AppModule` model as customer modules. Existing applications must migrate their declarations together; there is no compatibility path.
352
368
 
353
369
  - Declare capability dependencies on the Module that uses them. Selecting a sibling provider in Host does not supply a missing business-module dependency. `ApplicationServicesModule` supplies the usual application-service capabilities; additional capabilities are explicit dependencies.
354
- - Wrap capability declarations with `NotificationDefinitions`, `HostedServices`, `BackgroundWorkers`, `BackgroundSchedules`, or `SettingHandlers` from their owning packages. Use native service registration for providers and `ServiceComposition` for capability discovery and final binding. Keep provider selection in Host.
370
+ - Wrap capability declarations with `NotificationDefinitions`, `HostedServices`, `BackgroundWorkers`, or `BackgroundSchedules` from their owning packages. Use native service registration for providers and `ServiceComposition` for capability discovery and final binding. Keep provider selection in Host.
355
371
  - Replace Application invocation methods with `invoke(application, Service.method, ...)`, `invoke_as(application, user, ...)`, `call(application, function, ...)`, and `call_as(application, user, ...)`. Register interception with `add_interceptor(context, ...)` and events with `subscribe_local_event(context, ...)`. Import these functions from `python_ddd_framework`.
356
372
  - Read capability catalogs from their Module instance through `application.modules.instance(ModuleType)` or the catalog's DI binding. Generic service diagnostics remain in `application.service_catalog`; readiness is `application.is_ready`.
357
373
  - `DataSeedContributor`, `DataSeeder`, and `DataSeedError` belong to `python_ddd_framework.seeding` and remain available from the root package. Domain Modules with contributors depend on `DataSeedingModule`; remove `@application_service` from contributors. Seed is no longer an ApplicationService or part of its catalog. Explicit seed commands retain contributor ordering, per-item UoW, module dependency selection, failure reporting, and cleanup.
@@ -20,7 +20,7 @@ Python DDD Framework combines a module system with FastAPI, Dishka, Pydantic, SQ
20
20
  | HTTP APIs | Expose selected application services through FastAPI, or write explicit routers. Use OpenAPI, filters, file uploads, downloads, and streaming responses. |
21
21
  | Persistence and events | Use async SQLAlchemy repositories, explicit transaction boundaries, module-owned Alembic migrations, seed contributors, and local events before or after commit. |
22
22
  | Identity and permissions | Add JWT authentication, refresh sessions, users and roles, permission definitions, and authorization on service methods. |
23
- | Cache, settings, and locks | Use typed Redis caching, runtime settings with conditional updates and reset, settings refresh notifications, and explicit Redis-backed business locks. |
23
+ | Cache, settings, and locks | Use typed Redis caching, global runtime settings with conditional updates and reset, and explicit Redis-backed business locks. |
24
24
  | Background execution | Enqueue durable PostgreSQL jobs with typed payloads, schedule recurring work, run periodic workers, and select in-process or managed subprocess execution. |
25
25
  | Real-time communication | Add authenticated WebSocket connections, typed messages, and targeted notifications to connected clients. |
26
26
  | Hosting and observability | Manage long-lived integrations with `HostedService`, coordinate shutdown, and use structured logging, correlation, OpenTelemetry tracing, and lifecycle health endpoints. |
@@ -229,6 +229,12 @@ Edit `backend/app.development.yaml` for local connections, identity settings, lo
229
229
 
230
230
  Generated credentials are for local development. Production configuration is supplied separately in `app.production.yaml`. See [configuration](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#定义-module-与配置) and [background and logging configuration](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#settings后台与日志).
231
231
 
232
+ ### Use global settings
233
+
234
+ Declare a typed `SettingDefinition` and its scanned provider under the owning module's `domain/settings/`, then add `SettingsModule` to that module's dependencies. Inject `SettingProvider` to read values and `SettingManager` for conditional writes/reset. The generated Host already selects Settings persistence and management HTTP; apply its Settings migration before using the store for reads or writes.
235
+
236
+ Values resolve from runtime override, Host configuration, then definition default. Reset clears an override and resumes fallback. Management provides list/read/update/reset with visibility, permissions, and version checks; business code decides when to use the value. Follow the [complete project recipe](docs/development.md#settings-策略与使用) or the generated project's **Global settings** guide for declarations, configuration, permissions, and request bodies. The minimal contract starts with 0.9.0; see [migration notes](#minimal-settings-migration-090).
237
+
232
238
  ### Run application tests
233
239
 
234
240
  After completing local database setup, run from `backend/`:
@@ -270,6 +276,16 @@ New `ddd` modules contain the full responsibility directories and necessary comp
270
276
 
271
277
  See the [migration guide](docs/development.md#数据库聚合与迁移) and [verification record](docs/status.md#http-回收与迁移来源判定未发布).
272
278
 
279
+ ## Minimal Settings migration (0.9.0)
280
+
281
+ Settings now owns only global definitions, reads, writes, and clearing overrides. Modules own definitions, the Host selects storage, and business code decides when and how to use the values. Source order, source restrictions, management permissions, typed JSON, independent transactions, UUID concurrency tokens, and reset version records remain unchanged. No dependency, database schema, or migration change is required.
282
+
283
+ - Remove `SettingsRefreshModule`, `SettingsNotificationsModule`, `SettingHandlers`, `SettingHandlerDefinition`, and Settings refresh options from Host/module wiring. Remove settings observers and the dedicated `application/setting_handlers` directory. Read through `SettingProvider` where the business needs the value; the framework no longer coordinates application, polling, reconnect compensation, retries, or application status. Generic Notifications and HostedService remain available independently.
284
+ - `SettingManager.update/reset` returns `SettingSnapshot[T]` directly: replace `result.snapshot.value/version` with `result.value/version`. `SettingWriteOutcome`, notification feedback, and handler/application status exports are removed.
285
+ - HTTP update/reset returns the same `SettingView` shape as a read: `name`, `value`, `source`, and `version`. Replace `response.setting` with `response`; remove `saved`, `notification`, and `effect` handling. `SettingWriteResult` is removed. Success confirms persistence only, and stale versions still produce a conflict.
286
+
287
+ Current rules and examples are in the [Settings contract](docs/architecture.md#typed-cache-与-settings) and [usage guide](docs/development.md#settings-策略与使用). Validation and remaining limits are recorded in [status](docs/status.md#settings-最小化未发布).
288
+
273
289
  ## Settings policies (0.8.0)
274
290
 
275
291
  `SettingDefinition` now accepts `allowed_sources`, `management_access`, `read_permission`, and `write_permission`. Existing definitions retain their source order and management visibility. Generic update/reset now also require `settings.read`, in addition to `settings.write` and any declared per-setting permissions, because their responses contain the saved setting snapshot. Update roles that previously held only write permission.
@@ -307,7 +323,7 @@ Runnable examples: [HTTP generators](docs/development.md#http-生成器与持续
307
323
  Capability composition now uses the same `AppModule` model as customer modules. Existing applications must migrate their declarations together; there is no compatibility path.
308
324
 
309
325
  - Declare capability dependencies on the Module that uses them. Selecting a sibling provider in Host does not supply a missing business-module dependency. `ApplicationServicesModule` supplies the usual application-service capabilities; additional capabilities are explicit dependencies.
310
- - Wrap capability declarations with `NotificationDefinitions`, `HostedServices`, `BackgroundWorkers`, `BackgroundSchedules`, or `SettingHandlers` from their owning packages. Use native service registration for providers and `ServiceComposition` for capability discovery and final binding. Keep provider selection in Host.
326
+ - Wrap capability declarations with `NotificationDefinitions`, `HostedServices`, `BackgroundWorkers`, or `BackgroundSchedules` from their owning packages. Use native service registration for providers and `ServiceComposition` for capability discovery and final binding. Keep provider selection in Host.
311
327
  - Replace Application invocation methods with `invoke(application, Service.method, ...)`, `invoke_as(application, user, ...)`, `call(application, function, ...)`, and `call_as(application, user, ...)`. Register interception with `add_interceptor(context, ...)` and events with `subscribe_local_event(context, ...)`. Import these functions from `python_ddd_framework`.
312
328
  - Read capability catalogs from their Module instance through `application.modules.instance(ModuleType)` or the catalog's DI binding. Generic service diagnostics remain in `application.service_catalog`; readiness is `application.is_ready`.
313
329
  - `DataSeedContributor`, `DataSeeder`, and `DataSeedError` belong to `python_ddd_framework.seeding` and remain available from the root package. Domain Modules with contributors depend on `DataSeedingModule`; remove `@application_service` from contributors. Seed is no longer an ApplicationService or part of its catalog. Explicit seed commands retain contributor ordering, per-item UoW, module dependency selection, failure reporting, and cleanup.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-ddd-framework"
3
- version = "0.8.0"
3
+ version = "0.9.0"
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.8.0"
3
+ version = "0.9.0"
4
4
  description = "Modular DDD application framework with project CLI and bundled templates"
5
5
  readme = "README.md"
6
6
  license = "LicenseRef-Proprietary"
@@ -284,7 +284,6 @@ from .settings import (
284
284
  SettingManager,
285
285
  SettingProvider,
286
286
  )
287
- from .settings.declarations import SettingHandlers
288
287
  from .settings.module import SettingsModule
289
288
  from .unit_of_work import (
290
289
  UnitOfWork,
@@ -528,7 +527,6 @@ __all__ = (
528
527
  "SettingDefinitionContext",
529
528
  "SettingDefinitionError",
530
529
  "SettingDefinitionProvider",
531
- "SettingHandlers",
532
530
  "SettingManagementAccess",
533
531
  "SettingManager",
534
532
  "SettingProvider",
@@ -32,6 +32,12 @@ All responsibility directories and package markers are retained for navigation.
32
32
  5. Conventional HTTP exposure can discover the new public service contracts. Add manual routers only where the transport requires them; keep use-case rules out of HTTP. Register workers, jobs, hosted services, schedules, or event handlers explicitly when required.
33
33
  6. Update this responsibility record and run the smallest relevant existing checks. New tests and infrastructure validation require the task's authorization; neither an empty test directory nor successful composition proves business correctness.
34
34
 
35
+ ## Global settings
36
+
37
+ When a use case requires a global setting, place its `SettingDefinition` and synchronous definition provider under `domain/settings`, add SettingsModule to the Domain Module dependencies, and include the package in discovery. Callers import the same definition and inject SettingProvider; authorized writes use SettingManager with the version read by the caller. Provider selection and database setup belong to the Host.
38
+
39
+ Follow the application's [Global settings recipe](../../../../docs/development.md#global-settings) for configuration fallback, management permissions, and update/reset requests. Record this module's actual setting names, business use, and effective timing here when implemented. The skeleton has no business settings or observers; reset clears an override, and the framework does not apply values to running components.
40
+
35
41
  ## Persistence and verification
36
42
 
37
43
  An empty skeleton retains model and migration registration but has no business tables or revisions. Migration commands still use the configured database; an empty registered Base is different from a module with no model registration. Add actual models before generating a business revision, and review it before applying:
@@ -23,6 +23,7 @@ Use the [official CLI entry points](docs/development.md#cli-operations) for oper
23
23
  ## Preserve ownership and contracts
24
24
 
25
25
  - The Host composes modules, selects providers, and supplies configuration. Keep business state and rules in their owning modules.
26
+ - Global Settings definitions belong to their Domain Module; services own when values are read and applied. Follow the project's [Settings contract](docs/architecture.md#global-settings-ownership) and [usage recipe](docs/development.md#global-settings), preserving source, authorization, and version rules. Do not assume a component-refresh or notification service exists.
26
27
  - Domain and application contracts stay independent of Host, HTTP, and persistence implementations. Cross-module calls use explicitly declared dependencies and public contracts; do not access another module's implementation, ORM models, or tables directly.
27
28
  - Use framework application services, repositories, Options, permissions, units of work, events, jobs, and lifecycle hooks before adding custom infrastructure. Do not introduce a parallel DI container, service locator, transaction manager, or wrapper without a missing business capability.
28
29
  - Keep public contracts, mutable state, orchestration, and external I/O under clear owners. Split for independent responsibilities, not a fixed line count. Avoid generic `common`, `utils`, or `helpers` collections and speculative abstractions.
@@ -87,6 +87,12 @@ pddd inspect --environment development
87
87
 
88
88
  Inspection composes and closes a new Application without starting it. It does not query an existing process, and its input snapshot is not the final Options view. Configuration, workers, jobs, real-time communication, and logging are covered in the [development guide](docs/development.md).
89
89
 
90
+ ## Use global settings
91
+
92
+ The Host includes Settings persistence and management HTTP. After database setup, define each required setting in its owning module and grant management read/write permissions to the intended identity. Follow the self-contained [Global settings recipe](docs/development.md#global-settings) for definition discovery, YAML/environment fallback, service injection, and HTTP read/update/reset.
93
+
94
+ Settings stores global values; business code decides when they take effect. Reset clears a runtime override and resumes configuration/default fallback. Source restrictions, visibility, authorization, and version checks remain enforced. No business settings or automatic component-refresh workflow are generated.
95
+
90
96
  ## Test and package
91
97
 
92
98
  ```sh
@@ -21,8 +21,6 @@ from python_ddd_framework.observability.logging import StructuredLoggingModule
21
21
  from python_ddd_framework.observability.tracing import TracingModule
22
22
  from python_ddd_framework.redis import RedisDistributedLockModule, RedisModule
23
23
  from python_ddd_framework.redis.notifications import RedisNotificationsModule
24
- from python_ddd_framework.settings.notifications import SettingsNotificationsModule
25
- from python_ddd_framework.settings.refresh_module import SettingsRefreshModule
26
24
  from python_ddd_framework.settings.sqlalchemy import SqlAlchemyRuntimeSettingsModule
27
25
 
28
26
 
@@ -36,8 +34,6 @@ class {{ cookiecutter.class_prefix }}HostModule(AppModule):
36
34
  RedisModule,
37
35
  RedisDistributedLockModule,
38
36
  RedisNotificationsModule,
39
- SettingsNotificationsModule,
40
- SettingsRefreshModule,
41
37
  PgQueuerBackgroundJobsModule,
42
38
  BackgroundManagementHttpApiModule,
43
39
  StructuredLoggingModule,
@@ -83,6 +83,12 @@ These constraints apply when a capability models aggregates. The module README o
83
83
  | Cross-aggregate consistency | Before implementing a write spanning aggregates, identify the participating owners, what commits atomically, and any later effects. Record concurrency, failure-after-commit, duplicate/retry, and idempotency behavior. A local UoW may coordinate multiple aggregates when that is the confirmed requirement; do not impose one aggregate per transaction mechanically. Cross-module collaboration still uses public contracts, and local events do not promise durable distributed delivery. |
84
84
  | Business evidence | For each changed invariant, the module README must identify its rule owner, business operation, and a concrete rejection example, linking the relevant source and verification. Record unverified cases and open decisions explicitly. Directory placement, type checks, and passing unrelated tests do not by themselves prove a business rule. |
85
85
 
86
+ ## Global settings ownership
87
+
88
+ Settings owns global definitions, reads, conditional writes, and clearing overrides. Domain Modules contribute definitions under `domain/settings`; the Host selects persistence and management HTTP. Business services decide when to read and apply values. Source precedence is runtime override, Host configuration, then definition default, filtered by the definition's allowed sources.
89
+
90
+ Management visibility and permissions govern the generic management service. Internal business services own their authorization; all writes still enforce definition ownership, value validation, and version checks. Settings commits independently of an outer business UoW, and reset retains a fresh version record. It does not own component refresh, notifications, reconciliation, retries, or application status. Follow the [usage recipe](development.md#global-settings) for concrete declarations and calls.
91
+
86
92
  ## Calls, scopes, and transactions
87
93
 
88
94
  A managed service call passes through authorization, validation, ACTION scope, unit-of-work handling, and the final implementation. HTTP and direct service invocation share this pipeline. Inject the public service contract; do not construct implementations to bypass it. A self-call is an ordinary Python call and does not re-enter the pipeline.
@@ -128,7 +128,7 @@ For `basic`, keep public interfaces in `contracts/` and implementations in `serv
128
128
  | `domain_shared` | `constants`, `enums`, `errors`, `permissions`, `messages`, `value_objects` |
129
129
  | `domain` | `entities`, `value_objects`, `services`, `repositories`, `events`, `settings`, `seeding` |
130
130
  | `application_contracts` | `services`, `integration_services`, `inputs`, `views` |
131
- | `application` | `services`, `integration_services`, `background_jobs`, `background_workers`, `hosted_services`, `event_handlers`, `interceptors`, `caching`, `options`, `setting_handlers` |
131
+ | `application` | `services`, `integration_services`, `background_jobs`, `background_workers`, `hosted_services`, `event_handlers`, `interceptors`, `caching`, `options` |
132
132
  | `sqlalchemy` | `models`, `repositories`, `migrations` |
133
133
  | `http_api` | `routers`, `filters`, `websockets`, `models` |
134
134
 
@@ -238,7 +238,67 @@ orders:
238
238
 
239
239
  The corresponding environment key is `PDDD_ORDERS__ALLOW_BACKGROUND_APPROVAL`. `PDDD_HTTP__API_PREFIX` changes the business API prefix. `{{ cookiecutter.host_environment_variable }}` selects the Host environment and is separate from business configuration. Values that affect composition require the framework's pre-configuration phase; do not read unbound Options during construction.
240
240
 
241
- Use runtime settings when a value must be changed while the application is running. Add definitions through a scanned `SettingDefinitionProvider`, read them through `SettingProvider`, and use `SettingManager` or the management API for conditional updates/reset with the queried version token. Application services can use `self.setting_provider` during managed invocation, not during construction. Setting definitions belong under `domain/settings/`; declare SettingsModule on the owner when introducing them.
241
+ ### Global settings
242
+
243
+ Settings defines, reads, writes, and clears global runtime overrides. The following is an illustrative recipe, not a generated business feature. Add a definition and its provider under the owning module's `domain/settings/worker_settings.py` only when the setting is required:
244
+
245
+ ```python
246
+ from python_ddd_framework.settings import (
247
+ SettingDefinition,
248
+ SettingDefinitionContext,
249
+ SettingDefinitionProvider,
250
+ )
251
+
252
+ WORKER_LIMIT = SettingDefinition("worker.limit", int, default=10)
253
+
254
+
255
+ class WorkerSettingDefinitionProvider(SettingDefinitionProvider):
256
+ def define(self, context: SettingDefinitionContext) -> None:
257
+ context.add(WORKER_LIMIT)
258
+ ```
259
+
260
+ Add `SettingsModule` from `python_ddd_framework` to the existing Domain Module's dependencies, and include its package in `scan_packages`; retain the other dependencies and lifecycle hooks. Import this same definition in callers instead of constructing another object with the same name. Store credentials in Host configuration, not Settings.
261
+
262
+ By default, values resolve from runtime override, Host configuration, then definition default. An optional Host value in `backend/app.development.yaml` looks like this:
263
+
264
+ ```yaml
265
+ settings:
266
+ worker:
267
+ limit: 12
268
+ ```
269
+
270
+ The default environment key is `PDDD_SETTINGS__WORKER__LIMIT`. Without an override the value is 12, or 10 if that configuration is absent. Writing 20 makes it the override; reset resumes the configured 12. Configuration is frozen at startup: restart the Host after changing YAML/environment inputs. Reset does not reload files, and writing the default value still creates an override.
271
+
272
+ Inject `SettingProvider` for reads and `SettingManager` into an authorized service for writes. In an existing async service method, with `reader` and `manager` already injected:
273
+
274
+ ```python
275
+ limit = await reader.get(WORKER_LIMIT)
276
+ current = await reader.snapshot(WORKER_LIMIT)
277
+ saved = await manager.update(WORKER_LIMIT, 20, expected_version=current.version)
278
+ # saved is SettingSnapshot[int]: name, value, source, version.
279
+ reset = await manager.reset(WORKER_LIMIT, expected_version=saved.version)
280
+ ```
281
+
282
+ This demonstrates an immediate write/reset sequence. Interactive editing must retain the version the operator actually read, rather than fetch a fresh token just before saving. A conflict requires re-reading and a caller decision, not an automatic retry. Application services can also use `self.setting_provider` during managed invocation, not construction. Storage errors propagate; if no allowed source has a value, `snapshot` reports UNSET and `get` fails.
283
+
284
+ The generated Host selects `SqlAlchemyRuntimeSettingsModule` and `SettingsManagementHttpApiModule`. A custom Host must select them when it needs persistent overrides and management HTTP. Configure its database and run `pddd db upgrade --module settings` as part of database setup; startup does not migrate. Without a store binding, reads can use configuration/defaults but Manager is not registered.
285
+
286
+ With the default API prefix, use these operations after authenticating and granting the management permissions:
287
+
288
+ | Operation | Request |
289
+ | --- | --- |
290
+ | List visible settings | `GET /api/settings` |
291
+ | Read a setting and its version | `GET /api/settings/worker.limit` |
292
+ | Save an override | `PUT /api/settings/worker.limit`, body `{"value": 20, "expected_version": "<version from read>"}` |
293
+ | Clear an override | `POST /api/settings/worker.limit/reset`, body `{"expected_version": "<latest version>"}` |
294
+
295
+ Pass JSON null for `expected_version` only when the read returned null. Reads and writes return `name`, `value`, `source`, and `version`; reset retains a new version token. HTTP 409 means a version conflict. Writes commit independently of the caller's business transaction, and a successful response confirms persistence only.
296
+
297
+ Definitions may restrict `allowed_sources` without changing their fixed order. Excluding CONFIGURATION rejects matching Host inputs, so remove the YAML/environment setting too. `management_access` defaults to READ_WRITE; READ_ONLY rejects generic writes/reset, while HIDDEN omits the setting from lists and returns not found for individual management operations. Reads require `settings.read`; writes/reset require both `settings.read` and `settings.write`. Optional `read_permission`/`write_permission` values add per-setting requirements: declare those permissions under `domain_shared/permissions`, scan their PermissionDefinitionProvider, and depend on AuthorizationModule. Declaring a permission does not grant it. Internal services own their authorization; Manager still enforces ownership, sources, types, and versions.
298
+
299
+ Business code decides when to read and apply values. Settings provides no component refresh, change notification, reconciliation, retry, or application status. Generic Notifications and HostedService remain independent capabilities.
300
+
301
+ ### Inspect configuration
242
302
 
243
303
  Inspect configuration sources and service registrations with:
244
304
 
@@ -4,28 +4,23 @@ from .catalog import SettingCatalog
4
4
  from .contracts import SettingDefinition, SettingManagementAccess
5
5
  from .definitions import SettingDefinitionContext, SettingDefinitionProvider
6
6
  from .errors import RuntimeSettingError, SettingDefinitionError
7
- from .handlers import SettingApplicationStatus, SettingHandler, SettingHandlerDefinition
8
7
  from .manager import SettingManager
9
8
  from .provider import SettingProvider
10
9
  from .store import RuntimeSettingStore
11
- from .values import SettingSnapshot, SettingValueSource, SettingWriteOutcome, StoredSetting
10
+ from .values import SettingSnapshot, SettingValueSource, StoredSetting
12
11
 
13
12
  __all__ = (
14
13
  "RuntimeSettingError",
15
14
  "RuntimeSettingStore",
16
- "SettingApplicationStatus",
17
15
  "SettingCatalog",
18
16
  "SettingDefinition",
19
17
  "SettingDefinitionContext",
20
18
  "SettingDefinitionError",
21
19
  "SettingDefinitionProvider",
22
- "SettingHandler",
23
- "SettingHandlerDefinition",
24
20
  "SettingManagementAccess",
25
21
  "SettingManager",
26
22
  "SettingProvider",
27
23
  "SettingSnapshot",
28
24
  "SettingValueSource",
29
- "SettingWriteOutcome",
30
25
  "StoredSetting",
31
26
  )
@@ -24,7 +24,6 @@ from .management import (
24
24
  ResetSettingCommand,
25
25
  SettingsManagementApplicationService,
26
26
  SettingView,
27
- SettingWriteResult,
28
27
  UpdateSettingCommand,
29
28
  )
30
29
  from .manager import SettingManager
@@ -68,7 +67,7 @@ class _SettingsManagementApplicationService(ApplicationService):
68
67
  return _view(definition, await self.setting_provider.snapshot(definition))
69
68
 
70
69
  @authorize(SETTINGS_READ, SETTINGS_WRITE)
71
- async def update(self, name: str, command: UpdateSettingCommand) -> SettingWriteResult:
70
+ async def update(self, name: str, command: UpdateSettingCommand) -> SettingView:
72
71
  definition = self._definition(name)
73
72
  await self._check_write(definition)
74
73
  try:
@@ -79,18 +78,14 @@ class _SettingsManagementApplicationService(ApplicationService):
79
78
  saved = await self._settings.update(
80
79
  definition, value, expected_version=command.expected_version
81
80
  )
82
- return SettingWriteResult(
83
- setting=_view(definition, saved.snapshot), notification=saved.notification
84
- )
81
+ return _view(definition, saved)
85
82
 
86
83
  @authorize(SETTINGS_READ, SETTINGS_WRITE)
87
- async def reset(self, name: str, command: ResetSettingCommand) -> SettingWriteResult:
84
+ async def reset(self, name: str, command: ResetSettingCommand) -> SettingView:
88
85
  definition = self._definition(name)
89
86
  await self._check_write(definition)
90
87
  saved = await self._settings.reset(definition, expected_version=command.expected_version)
91
- return SettingWriteResult(
92
- setting=_view(definition, saved.snapshot), notification=saved.notification
93
- )
88
+ return _view(definition, saved)
94
89
 
95
90
  def _definition(self, name: str) -> SettingDefinition[Any]:
96
91
  definition = self._catalog.get(name)
@@ -0,0 +1,67 @@
1
+ """Module setting metadata 的 Application-local immutable catalog。"""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Iterator, Mapping
6
+ from types import MappingProxyType
7
+ from typing import Any
8
+
9
+ from ..diagnostics import SourceLocation
10
+ from ..modularity.discovery import _DiscoveredType
11
+ from .contracts import SettingDefinition
12
+ from .definition_discovery import _collect_setting_definitions
13
+ from .errors import SettingDefinitionError
14
+
15
+
16
+ class SettingCatalog:
17
+ __slots__ = ("_definitions", "_sources")
18
+
19
+ def __init__(
20
+ self,
21
+ definitions: tuple[SettingDefinition[Any], ...],
22
+ *,
23
+ sources: Mapping[str, SourceLocation] | None = None,
24
+ ) -> None:
25
+ indexed: dict[str, SettingDefinition[Any]] = {}
26
+ for definition in definitions:
27
+ if not isinstance(definition, SettingDefinition):
28
+ raise SettingDefinitionError(
29
+ setting=repr(definition),
30
+ reason="catalog entries must be SettingDefinition values",
31
+ )
32
+ if definition.name in indexed:
33
+ raise SettingDefinitionError(
34
+ setting=definition.name,
35
+ reason="setting is declared more than once",
36
+ )
37
+ indexed[definition.name] = definition
38
+ self._definitions: Mapping[str, SettingDefinition[Any]] = MappingProxyType(
39
+ dict(sorted(indexed.items()))
40
+ )
41
+ self._sources = MappingProxyType(dict(sources or {}))
42
+
43
+ @property
44
+ def sources(self) -> Mapping[str, SourceLocation]:
45
+ return self._sources
46
+
47
+ @property
48
+ def definitions(self) -> tuple[SettingDefinition[Any], ...]:
49
+ return tuple(self._definitions.values())
50
+
51
+ def __iter__(self) -> Iterator[str]:
52
+ return iter(self._definitions)
53
+
54
+ def get(self, name: str) -> SettingDefinition[Any] | None:
55
+ return self._definitions.get(name)
56
+
57
+ def require_owned(self, definition: SettingDefinition[Any]) -> None:
58
+ if self._definitions.get(definition.name) is not definition:
59
+ raise SettingDefinitionError(
60
+ setting=definition.name,
61
+ reason="definition is not owned by this Application",
62
+ )
63
+
64
+
65
+ def _build_setting_catalog(discoveries: tuple[_DiscoveredType, ...]) -> SettingCatalog:
66
+ definitions, sources = _collect_setting_definitions(discoveries)
67
+ return SettingCatalog(definitions, sources=sources)
@@ -2,14 +2,13 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Literal, Protocol
5
+ from typing import Protocol
6
6
  from uuid import UUID
7
7
 
8
8
  from pydantic import BaseModel, ConfigDict, JsonValue
9
9
 
10
10
  from ..application_services import ApplicationServiceContract
11
11
  from ..authorization import PermissionName
12
- from ..notifications import NotificationPublishStatus
13
12
  from .values import SettingValueSource
14
13
 
15
14
  SETTINGS_READ = PermissionName("settings.read")
@@ -36,15 +35,6 @@ class SettingView(BaseModel):
36
35
  value: JsonValue
37
36
  source: SettingValueSource
38
37
  version: UUID | None
39
- effect: str = "New operations read the saved value; running components apply it separately."
40
-
41
-
42
- class SettingWriteResult(BaseModel):
43
- model_config = ConfigDict(frozen=True)
44
-
45
- saved: Literal[True] = True
46
- setting: SettingView
47
- notification: NotificationPublishStatus
48
38
 
49
39
 
50
40
  class SettingsManagementApplicationService(ApplicationServiceContract, Protocol):
@@ -52,6 +42,6 @@ class SettingsManagementApplicationService(ApplicationServiceContract, Protocol)
52
42
 
53
43
  async def get(self, name: str) -> SettingView: ...
54
44
 
55
- async def update(self, name: str, command: UpdateSettingCommand) -> SettingWriteResult: ...
45
+ async def update(self, name: str, command: UpdateSettingCommand) -> SettingView: ...
56
46
 
57
- async def reset(self, name: str, command: ResetSettingCommand) -> SettingWriteResult: ...
47
+ async def reset(self, name: str, command: ResetSettingCommand) -> SettingView: ...
@@ -1,32 +1,25 @@
1
- """条件写入与提交后通知的 owner;读取解析由 SettingProvider 负责。"""
1
+ """条件写入的 owner;读取解析由 SettingProvider 负责,生效时机归业务。"""
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- import logging
6
- from typing import TYPE_CHECKING, Any, TypeVar, cast
5
+ from typing import Any, TypeVar, cast
7
6
  from uuid import UUID
8
7
 
9
8
  from pydantic import ValidationError
10
9
  from pydantic_core import PydanticSerializationError
11
10
 
12
- from ..notifications import NotificationPayloadError, NotificationPublishStatus, Notifications
13
11
  from .catalog import SettingCatalog
14
- from .changes import SETTINGS_CHANGED, SettingChanged
15
12
  from .contracts import SettingDefinition
16
13
  from .errors import RuntimeSettingError
17
14
  from .provider import SettingProvider
18
15
  from .store import RuntimeSettingStore
19
- from .values import SettingSnapshot, SettingValueSource, SettingWriteOutcome, StoredSetting
20
-
21
- if TYPE_CHECKING:
22
- from .refresh import SettingsRefreshRuntime
16
+ from .values import SettingSnapshot, SettingValueSource, StoredSetting
23
17
 
24
18
  _T = TypeVar("_T")
25
- _LOGGER = logging.getLogger(__name__)
26
19
 
27
20
 
28
21
  class SettingManager:
29
- __slots__ = ("_catalog", "_notifications", "_provider", "_refresh", "_store")
22
+ __slots__ = ("_catalog", "_provider", "_store")
30
23
 
31
24
  def __init__(
32
25
  self, catalog: SettingCatalog, provider: SettingProvider, store: RuntimeSettingStore
@@ -34,13 +27,11 @@ class SettingManager:
34
27
  self._catalog = catalog
35
28
  self._provider = provider
36
29
  self._store = store
37
- self._refresh: SettingsRefreshRuntime | None = None
38
- self._notifications: Notifications | None = None
39
30
 
40
31
  async def set_global(self, definition: SettingDefinition[_T], value: _T) -> _T:
41
32
  current = await self._provider.snapshot(definition)
42
33
  saved = await self.update(definition, value, expected_version=current.version)
43
- return cast(_T, saved.snapshot.value)
34
+ return cast(_T, saved.value)
44
35
 
45
36
  async def reset_global(self, definition: SettingDefinition[Any]) -> None:
46
37
  current = await self._provider.snapshot(definition)
@@ -48,7 +39,7 @@ class SettingManager:
48
39
 
49
40
  async def update(
50
41
  self, definition: SettingDefinition[_T], value: _T, *, expected_version: UUID | None
51
- ) -> SettingWriteOutcome[_T]:
42
+ ) -> SettingSnapshot[_T]:
52
43
  self._require_write(definition, operation="set")
53
44
  try:
54
45
  validated, serialized = definition._dump_json(value)
@@ -60,20 +51,18 @@ class SettingManager:
60
51
  definition.name, serialized, expected_version=expected_version
61
52
  )
62
53
  # 返回本次已经提交的值,不在提交后重读,避免把另一次并发写入误报为本次结果。
63
- snapshot = SettingSnapshot(
54
+ return SettingSnapshot(
64
55
  definition.name, validated, SettingValueSource.RUNTIME, saved.version
65
56
  )
66
- return SettingWriteOutcome(snapshot, await self._committed(definition.name))
67
57
 
68
58
  async def reset(
69
59
  self, definition: SettingDefinition[_T], *, expected_version: UUID | None
70
- ) -> SettingWriteOutcome[_T]:
60
+ ) -> SettingSnapshot[_T]:
71
61
  self._require_write(definition, operation="reset")
72
62
  # 默认值先校验,不能在物理删除已经提交之后再抛出配置校验失败。
73
63
  fallback = self._provider._resolve(definition, StoredSetting(None, expected_version))
74
64
  saved = await self._store.write(definition.name, None, expected_version=expected_version)
75
- snapshot = SettingSnapshot(definition.name, fallback.value, fallback.source, saved.version)
76
- return SettingWriteOutcome(snapshot, await self._committed(definition.name))
65
+ return SettingSnapshot(definition.name, fallback.value, fallback.source, saved.version)
77
66
 
78
67
  def _require_write(self, definition: SettingDefinition[Any], *, operation: str) -> None:
79
68
  self._catalog.require_owned(definition)
@@ -81,16 +70,3 @@ class SettingManager:
81
70
  raise RuntimeSettingError(
82
71
  setting=definition.name, operation=operation, error_type="SourceNotAllowed"
83
72
  )
84
-
85
- async def _committed(self, name: str) -> NotificationPublishStatus:
86
- # 本地刷新先入队;Redis 降级不会撤销短事务已经提交的结果。
87
- if self._refresh is not None:
88
- self._refresh.request_refresh(name)
89
- if self._notifications is None:
90
- return NotificationPublishStatus.NOT_CONFIGURED
91
- try:
92
- return await self._notifications.publish(SETTINGS_CHANGED, SettingChanged(name=name))
93
- except NotificationPayloadError:
94
- # 发布大小/编码限制是独立结果;不能把已提交的写入重新表现为保存失败。
95
- _LOGGER.warning("Committed setting notification rejected for %s", name)
96
- return NotificationPublishStatus.REJECTED
@@ -8,11 +8,10 @@ from ..modularity import AppModule, ModuleRef
8
8
  from ..services.composition import (
9
9
  ServiceBindingContext,
10
10
  ServiceComposition,
11
- ServiceDiscoveryContext,
12
11
  )
13
12
  from ..services.registration import RegistrationDecision, RegistrationKind
14
13
  from .binding import _provide_settings
15
- from .catalog import SettingCatalog, _build_setting_catalog, _contribute_setting_handler_defaults
14
+ from .catalog import SettingCatalog, _build_setting_catalog
16
15
  from .errors import SettingDefinitionError
17
16
  from .store import RuntimeSettingStore
18
17
 
@@ -21,15 +20,10 @@ class SettingsModule(AppModule):
21
20
  catalog: SettingCatalog
22
21
 
23
22
  def configure(self, context: ConfigureContext) -> None:
24
- self.catalog = _build_setting_catalog(context.modules, context.discoveries)
23
+ self.catalog = _build_setting_catalog(context.discoveries)
25
24
  if self.catalog.definitions:
26
25
  context.configure.section("settings")
27
- context.services.add_composition(
28
- ServiceComposition(discover=self._discover, bind=self._bind)
29
- )
30
-
31
- def _discover(self, context: ServiceDiscoveryContext) -> None:
32
- _contribute_setting_handler_defaults(context.modules, context.services)
26
+ context.services.add_composition(ServiceComposition(bind=self._bind))
33
27
 
34
28
  def _bind(self, context: ServiceBindingContext) -> None:
35
29
  provider = Provider()
@@ -7,8 +7,6 @@ from enum import Enum
7
7
  from typing import Generic, TypeVar
8
8
  from uuid import UUID
9
9
 
10
- from ..notifications import NotificationPublishStatus
11
-
12
10
  _T = TypeVar("_T")
13
11
 
14
12
 
@@ -31,9 +29,3 @@ class SettingSnapshot(Generic[_T]):
31
29
  value: _T | None
32
30
  source: SettingValueSource
33
31
  version: UUID | None
34
-
35
-
36
- @dataclass(frozen=True, slots=True)
37
- class SettingWriteOutcome(Generic[_T]):
38
- snapshot: SettingSnapshot[_T]
39
- notification: NotificationPublishStatus