python-ddd-framework 0.3.2__tar.gz → 0.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (527) hide show
  1. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/PKG-INFO +147 -44
  2. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/README.md +145 -43
  3. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/pyproject.toml +2 -1
  4. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/pyproject.toml.orig +3 -1
  5. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/__init__.py +139 -21
  6. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/application/builder.py +23 -78
  7. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/application/composition.py +4 -22
  8. python_ddd_framework-0.5.1/src/python_ddd_framework/application/runtime.py +381 -0
  9. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/application/state.py +7 -75
  10. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/application_services/__init__.py +5 -21
  11. python_ddd_framework-0.3.2/src/python_ddd_framework/services/application_bindings.py → python_ddd_framework-0.5.1/src/python_ddd_framework/application_services/bindings.py +52 -9
  12. python_ddd_framework-0.5.1/src/python_ddd_framework/application_services/catalog.py +248 -0
  13. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/application_services/contracts.py +14 -13
  14. python_ddd_framework-0.5.1/src/python_ddd_framework/application_services/dispatcher.py +173 -0
  15. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/application_services/invocation.py +197 -15
  16. python_ddd_framework-0.5.1/src/python_ddd_framework/application_services/module.py +168 -0
  17. python_ddd_framework-0.5.1/src/python_ddd_framework/application_services/pagination.py +21 -0
  18. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/auditing/control.py +1 -1
  19. python_ddd_framework-0.5.1/src/python_ddd_framework/auditing/module.py +15 -0
  20. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/authorization/__init__.py +2 -0
  21. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/authorization/contracts.py +7 -2
  22. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/authorization/definitions.py +5 -0
  23. python_ddd_framework-0.5.1/src/python_ddd_framework/authorization/module.py +40 -0
  24. python_ddd_framework-0.5.1/src/python_ddd_framework/authorization/options.py +7 -0
  25. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_execution/child.py +13 -3
  26. python_ddd_framework-0.5.1/src/python_ddd_framework/background_execution/declarations.py +45 -0
  27. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_execution/lifecycle.py +12 -0
  28. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_execution/local.py +20 -1
  29. python_ddd_framework-0.5.1/src/python_ddd_framework/background_execution/module.py +116 -0
  30. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_execution/processes.py +11 -1
  31. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/catalog.py +59 -42
  32. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/contracts.py +16 -19
  33. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/pgqueuer/enqueue.py +4 -0
  34. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/pgqueuer/module.py +2 -1
  35. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/pgqueuer/runtime.py +7 -7
  36. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_workers/catalog.py +23 -36
  37. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_workers/contracts.py +3 -0
  38. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_workers/execution.py +1 -1
  39. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_workers/runtime.py +47 -1
  40. python_ddd_framework-0.5.1/src/python_ddd_framework/caching/__init__.py +12 -0
  41. python_ddd_framework-0.5.1/src/python_ddd_framework/caching/contracts.py +71 -0
  42. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/caching/errors.py +0 -7
  43. python_ddd_framework-0.5.1/src/python_ddd_framework/caching/module.py +18 -0
  44. python_ddd_framework-0.5.1/src/python_ddd_framework/caching/naming.py +29 -0
  45. python_ddd_framework-0.5.1/src/python_ddd_framework/caching/options.py +38 -0
  46. python_ddd_framework-0.5.1/src/python_ddd_framework/caching/unit_of_work.py +46 -0
  47. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/cli/__init__.py +31 -6
  48. python_ddd_framework-0.5.1/src/python_ddd_framework/cli/project.py +131 -0
  49. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/cli/runtime.py +1 -1
  50. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/generation.py +75 -22
  51. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/project_metadata.py +2 -4
  52. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/basic/cookiecutter.json +4 -0
  53. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/README.md +45 -0
  54. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/__init__.py.jinja +0 -0
  55. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/conversion_service.py.jinja +7 -0
  56. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/module.py.jinja +38 -0
  57. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/__init__.py.jinja +0 -0
  58. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/default_conversion_service.py.jinja +10 -0
  59. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/cookiecutter.json +1 -0
  60. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/README.md +63 -0
  61. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/__init__.py.jinja +1 -0
  62. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/__init__.py.jinja +1 -0
  63. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/handler.py.jinja +45 -0
  64. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/payload.py.jinja +8 -0
  65. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/__init__.py.jinja +1 -0
  66. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/handler.py.jinja +35 -0
  67. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/payload.py.jinja +5 -0
  68. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/schedule.py.jinja +15 -0
  69. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/__init__.py.jinja +1 -0
  70. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/order_maintenance_worker.py.jinja +28 -0
  71. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/order_statistics_worker.py.jinja +26 -0
  72. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/__init__.py.jinja +1 -0
  73. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/order_cache.py.jinja +9 -0
  74. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/statistics_cache.py.jinja +9 -0
  75. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers/__init__.py.jinja +1 -0
  76. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers/order_changed_handler.py.jinja +23 -0
  77. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/__init__.py.jinja +1 -0
  78. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/order_integration_service.py.jinja +71 -0
  79. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/order_observation_handler.py.jinja +16 -0
  80. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services/__init__.py.jinja +1 -0
  81. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services/order_reporting_service.py.jinja +16 -0
  82. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors/__init__.py.jinja +1 -0
  83. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors/order_timing_interceptor.py.jinja +17 -0
  84. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/module.py.jinja +115 -0
  85. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options/__init__.py.jinja +1 -0
  86. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options.py.jinja → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options/order_options.py.jinja +1 -1
  87. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/__init__.py.jinja +1 -0
  88. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_approval_service.py.jinja +65 -0
  89. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_management_service.py.jinja +35 -0
  90. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_query_service.py.jinja +41 -0
  91. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers/__init__.py.jinja +1 -0
  92. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers/approval_setting_observer.py.jinja +17 -0
  93. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/__init__.py.jinja +1 -0
  94. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/approve_order.py.jinja +6 -0
  95. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/create_order.py.jinja +7 -0
  96. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services/__init__.py.jinja +1 -0
  97. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services/order_reporting_service.py.jinja +7 -0
  98. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/module.py.jinja +47 -0
  99. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/__init__.py.jinja +1 -0
  100. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_approval_service.py.jinja +13 -0
  101. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_management_service.py.jinja +10 -0
  102. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_query_service.py.jinja +12 -0
  103. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/__init__.py.jinja +1 -0
  104. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/order_statistics_snapshot.py.jinja +9 -0
  105. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/order_view.py.jinja +12 -0
  106. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities/__init__.py.jinja +1 -0
  107. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/orders.py.jinja → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities/order.py.jinja +10 -18
  108. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events/__init__.py.jinja +1 -0
  109. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events/order_changed.py.jinja +13 -0
  110. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/module.py.jinja +49 -0
  111. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories/__init__.py.jinja +1 -0
  112. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories/order_repository.py.jinja +17 -0
  113. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding/__init__.py.jinja +1 -0
  114. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding/order_seed_contributor.py.jinja +22 -0
  115. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services/__init__.py.jinja +1 -0
  116. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services/order_approval_service.py.jinja +23 -0
  117. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings/__init__.py.jinja +1 -0
  118. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings.py.jinja → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings/approval_settings.py.jinja +3 -2
  119. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects/__init__.py.jinja +1 -0
  120. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects/order_title.py.jinja +10 -0
  121. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants/__init__.py.jinja +1 -0
  122. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants/order_constants.py.jinja +3 -0
  123. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums/__init__.py.jinja +1 -0
  124. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums/order_status.py.jinja +6 -0
  125. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors/__init__.py.jinja +1 -0
  126. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors/order_errors.py.jinja +11 -0
  127. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/__init__.py.jinja +1 -0
  128. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/order_messages.py.jinja +26 -0
  129. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/order_observation.py.jinja +13 -0
  130. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/module.py.jinja +46 -0
  131. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/__init__.py.jinja +1 -0
  132. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions.py.jinja → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/order_permission_provider.py.jinja +6 -2
  133. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/order_permissions.py.jinja +7 -0
  134. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/value_objects/__init__.py.jinja +1 -0
  135. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/value_objects/money.py.jinja +18 -0
  136. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters/__init__.py.jinja +1 -0
  137. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters/export_filter.py.jinja +15 -0
  138. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models/__init__.py.jinja +1 -0
  139. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models/refresh_orders.py.jinja +5 -0
  140. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/module.py.jinja +103 -0
  141. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers/__init__.py.jinja +1 -0
  142. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/files.py.jinja → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers/order_files.py.jinja +23 -20
  143. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets/__init__.py.jinja +1 -0
  144. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets/order_socket.py.jinja +44 -0
  145. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/migrations/__init__.py.jinja +1 -0
  146. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/__init__.py.jinja +1 -0
  147. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/__init__.py.jinja → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/base.py.jinja +1 -1
  148. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/orders.py.jinja → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/order_model.py.jinja +7 -3
  149. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/module.py.jinja +63 -0
  150. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/order_repository.py.jinja +79 -0
  151. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/__init__.py.jinja +1 -0
  152. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/test_domain.py.jinja +4 -3
  153. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/project/cookiecutter.json +1 -1
  154. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/AGENTS.md +23 -3
  155. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/README.md +29 -22
  156. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/app.development.yaml.jinja +2 -0
  157. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/pyproject.toml.jinja +1 -1
  158. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/src/host/main.py.jinja +2 -0
  159. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/src/host/module.py.jinja +40 -3
  160. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/architecture.md +115 -0
  161. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/development.md +306 -0
  162. python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/scripts/.gitkeep +0 -0
  163. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/distributed_lock/contracts.py +4 -1
  164. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/domain/__init__.py +2 -0
  165. python_ddd_framework-0.5.1/src/python_ddd_framework/domain/services.py +11 -0
  166. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/errors/business.py +10 -1
  167. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/errors/lifecycle.py +3 -31
  168. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/events/__init__.py +5 -2
  169. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/events/aggregate.py +3 -3
  170. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/events/catalog.py +12 -11
  171. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/events/contracts.py +6 -1
  172. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/events/contribution.py +1 -52
  173. python_ddd_framework-0.5.1/src/python_ddd_framework/events/entities.py +23 -0
  174. python_ddd_framework-0.5.1/src/python_ddd_framework/events/module.py +97 -0
  175. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/events/runtime.py +80 -29
  176. python_ddd_framework-0.5.1/src/python_ddd_framework/events/subscription.py +36 -0
  177. python_ddd_framework-0.5.1/src/python_ddd_framework/events/unit_of_work.py +25 -0
  178. python_ddd_framework-0.5.1/src/python_ddd_framework/extensions/__init__.py +22 -0
  179. python_ddd_framework-0.5.1/src/python_ddd_framework/extensions/catalog.py +198 -0
  180. python_ddd_framework-0.5.1/src/python_ddd_framework/extensions/contracts.py +85 -0
  181. python_ddd_framework-0.5.1/src/python_ddd_framework/extensions/models.py +142 -0
  182. python_ddd_framework-0.5.1/src/python_ddd_framework/extensions/module.py +21 -0
  183. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/__init__.py +2 -0
  184. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/action.py +1 -2
  185. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/adapter.py +16 -0
  186. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/application_services.py +43 -25
  187. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/background.py +2 -1
  188. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/contracts.py +26 -8
  189. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/health.py +1 -1
  190. python_ddd_framework-0.5.1/src/python_ddd_framework/fastapi/module.py +14 -0
  191. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/parameters.py +3 -18
  192. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/realtime/connection.py +10 -7
  193. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/realtime/module.py +3 -0
  194. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/realtime/runtime.py +10 -24
  195. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/request_context.py +2 -1
  196. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/routing.py +2 -1
  197. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/server.py +8 -0
  198. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/settings.py +2 -1
  199. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/hosted_services/bridge.py +95 -17
  200. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/hosted_services/catalog.py +6 -16
  201. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/hosted_services/contracts.py +9 -1
  202. python_ddd_framework-0.5.1/src/python_ddd_framework/hosted_services/declarations.py +15 -0
  203. python_ddd_framework-0.5.1/src/python_ddd_framework/hosted_services/module.py +69 -0
  204. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/hosted_services/runtime.py +101 -18
  205. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/__init__.py +24 -0
  206. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/application.py +38 -90
  207. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/contracts.py +181 -16
  208. python_ddd_framework-0.5.1/src/python_ddd_framework/identity/http_api.py +167 -0
  209. python_ddd_framework-0.5.1/src/python_ddd_framework/identity/management.py +166 -0
  210. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/module.py +12 -4
  211. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/services.py +29 -16
  212. python_ddd_framework-0.5.1/src/python_ddd_framework/identity/sqlalchemy/migrations/0003_extra_properties.py +26 -0
  213. python_ddd_framework-0.5.1/src/python_ddd_framework/identity/sqlalchemy/migrations/0004_concurrency_version.py +29 -0
  214. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/sqlalchemy/models.py +21 -2
  215. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/sqlalchemy/module.py +11 -2
  216. python_ddd_framework-0.5.1/src/python_ddd_framework/identity/sqlalchemy/repository.py +458 -0
  217. python_ddd_framework-0.5.1/src/python_ddd_framework/identity/sqlalchemy/session_security.py +88 -0
  218. python_ddd_framework-0.5.1/src/python_ddd_framework/identity/sqlalchemy/stores.py +305 -0
  219. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/tokens.py +2 -5
  220. python_ddd_framework-0.3.2/src/python_ddd_framework/application_services/validation.py → python_ddd_framework-0.5.1/src/python_ddd_framework/invocation/arguments.py +8 -6
  221. python_ddd_framework-0.5.1/src/python_ddd_framework/invocation/contribution.py +61 -0
  222. python_ddd_framework-0.5.1/src/python_ddd_framework/invocation/dispatcher.py +291 -0
  223. python_ddd_framework-0.5.1/src/python_ddd_framework/invocation/entries.py +31 -0
  224. python_ddd_framework-0.5.1/src/python_ddd_framework/invocation/entrypoints.py +126 -0
  225. {python_ddd_framework-0.3.2/src/python_ddd_framework/application_services → python_ddd_framework-0.5.1/src/python_ddd_framework/invocation}/execution.py +8 -5
  226. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/invocation/function_runtime.py +3 -1
  227. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/invocation/interception.py +113 -42
  228. {python_ddd_framework-0.3.2/src/python_ddd_framework/application_services → python_ddd_framework-0.5.1/src/python_ddd_framework/invocation}/interceptors.py +2 -2
  229. python_ddd_framework-0.5.1/src/python_ddd_framework/invocation/managed_proxy.py +116 -0
  230. python_ddd_framework-0.5.1/src/python_ddd_framework/invocation/managed_services.py +250 -0
  231. python_ddd_framework-0.5.1/src/python_ddd_framework/invocation/methods.py +345 -0
  232. python_ddd_framework-0.5.1/src/python_ddd_framework/invocation/module.py +113 -0
  233. {python_ddd_framework-0.3.2/src/python_ddd_framework/application_services → python_ddd_framework-0.5.1/src/python_ddd_framework/invocation}/policies.py +8 -1
  234. python_ddd_framework-0.5.1/src/python_ddd_framework/invocation/validation.py +25 -0
  235. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/lifecycle/__init__.py +2 -0
  236. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/lifecycle/composition.py +5 -2
  237. python_ddd_framework-0.5.1/src/python_ddd_framework/lifecycle/participants.py +37 -0
  238. python_ddd_framework-0.5.1/src/python_ddd_framework/messaging/__init__.py +25 -0
  239. python_ddd_framework-0.5.1/src/python_ddd_framework/messaging/channel.py +232 -0
  240. python_ddd_framework-0.5.1/src/python_ddd_framework/messaging/contracts.py +78 -0
  241. python_ddd_framework-0.5.1/src/python_ddd_framework/messaging/module.py +114 -0
  242. python_ddd_framework-0.5.1/src/python_ddd_framework/messaging/options.py +13 -0
  243. python_ddd_framework-0.5.1/src/python_ddd_framework/messaging/receipt.py +27 -0
  244. python_ddd_framework-0.5.1/src/python_ddd_framework/messaging/runtime.py +139 -0
  245. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/modularity/__init__.py +11 -1
  246. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/modularity/contracts.py +47 -16
  247. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/modularity/discovery.py +21 -2
  248. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/modularity/graph.py +45 -1
  249. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/modularity/registry.py +83 -3
  250. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/notifications/__init__.py +2 -0
  251. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/notifications/catalog.py +3 -2
  252. python_ddd_framework-0.5.1/src/python_ddd_framework/notifications/declarations.py +18 -0
  253. python_ddd_framework-0.5.1/src/python_ddd_framework/notifications/module.py +21 -0
  254. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/observability/logging.py +3 -0
  255. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/observability/tracing.py +3 -0
  256. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/options/contribution.py +12 -0
  257. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/options/registry.py +44 -11
  258. python_ddd_framework-0.5.1/src/python_ddd_framework/py.typed +0 -0
  259. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/realtime/__init__.py +2 -1
  260. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/realtime/contracts.py +3 -7
  261. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/realtime/messages.py +26 -1
  262. python_ddd_framework-0.5.1/src/python_ddd_framework/redis/cache.py +243 -0
  263. python_ddd_framework-0.5.1/src/python_ddd_framework/redis/cache_scripts.py +40 -0
  264. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/redis/distributed_lock.py +10 -2
  265. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/redis/module.py +13 -4
  266. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/redis/notifications.py +5 -2
  267. python_ddd_framework-0.5.1/src/python_ddd_framework/redis/runtime.py +38 -0
  268. python_ddd_framework-0.5.1/src/python_ddd_framework/seeding/__init__.py +13 -0
  269. python_ddd_framework-0.5.1/src/python_ddd_framework/seeding/contracts.py +45 -0
  270. python_ddd_framework-0.5.1/src/python_ddd_framework/seeding/module.py +73 -0
  271. python_ddd_framework-0.5.1/src/python_ddd_framework/seeding/runtime.py +63 -0
  272. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/arbitration.py +23 -0
  273. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/binding.py +2 -3
  274. python_ddd_framework-0.5.1/src/python_ddd_framework/services/composition.py +108 -0
  275. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/contribution.py +44 -54
  276. python_ddd_framework-0.5.1/src/python_ddd_framework/services/convention.py +173 -0
  277. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/fixed_lifetime.py +12 -15
  278. python_ddd_framework-0.5.1/src/python_ddd_framework/services/framework_provider.py +23 -0
  279. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/native_graph.py +35 -60
  280. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/provider.py +59 -4
  281. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/repository.py +6 -0
  282. python_ddd_framework-0.5.1/src/python_ddd_framework/services/runtime.py +216 -0
  283. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/catalog.py +5 -4
  284. python_ddd_framework-0.5.1/src/python_ddd_framework/settings/declarations.py +18 -0
  285. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/definitions.py +5 -0
  286. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/manager.py +1 -1
  287. python_ddd_framework-0.5.1/src/python_ddd_framework/settings/module.py +59 -0
  288. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/notifications.py +4 -2
  289. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/refresh_module.py +9 -2
  290. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/sqlalchemy/module.py +2 -1
  291. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/__init__.py +12 -0
  292. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/alembic_runtime/env.py +1 -0
  293. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/auditing.py +7 -1
  294. python_ddd_framework-0.5.1/src/python_ddd_framework/sqlalchemy/extensions.py +186 -0
  295. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/metadata.py +110 -6
  296. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/migration.py +61 -8
  297. python_ddd_framework-0.5.1/src/python_ddd_framework/sqlalchemy/migration_operations.py +86 -0
  298. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/module.py +14 -11
  299. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/module_migration.py +71 -3
  300. python_ddd_framework-0.5.1/src/python_ddd_framework/sqlalchemy/repository.py +237 -0
  301. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/session_provider.py +14 -1
  302. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/testing/runtime.py +5 -4
  303. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/unit_of_work/__init__.py +2 -1
  304. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/unit_of_work/contracts.py +6 -7
  305. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/unit_of_work/errors.py +11 -0
  306. python_ddd_framework-0.5.1/src/python_ddd_framework/unit_of_work/lifecycle.py +19 -0
  307. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/unit_of_work/manager.py +86 -32
  308. python_ddd_framework-0.5.1/src/python_ddd_framework/unit_of_work/module.py +61 -0
  309. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/unit_of_work/options.py +7 -1
  310. python_ddd_framework-0.5.1/src/python_ddd_framework/validation/__init__.py +1 -0
  311. python_ddd_framework-0.5.1/src/python_ddd_framework/validation/models.py +37 -0
  312. python_ddd_framework-0.3.2/src/python_ddd_framework/application/runtime.py +0 -549
  313. python_ddd_framework-0.3.2/src/python_ddd_framework/application_services/catalog.py +0 -500
  314. python_ddd_framework-0.3.2/src/python_ddd_framework/application_services/dispatcher.py +0 -423
  315. python_ddd_framework-0.3.2/src/python_ddd_framework/application_services/seeding.py +0 -72
  316. python_ddd_framework-0.3.2/src/python_ddd_framework/background_execution/module.py +0 -10
  317. python_ddd_framework-0.3.2/src/python_ddd_framework/caching/__init__.py +0 -11
  318. python_ddd_framework-0.3.2/src/python_ddd_framework/caching/catalog.py +0 -73
  319. python_ddd_framework-0.3.2/src/python_ddd_framework/caching/contracts.py +0 -73
  320. python_ddd_framework-0.3.2/src/python_ddd_framework/cli/project.py +0 -69
  321. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/cookiecutter.json +0 -1
  322. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/README.md +0 -70
  323. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/cache.py.jinja +0 -10
  324. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/events.py.jinja +0 -24
  325. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration.py.jinja +0 -41
  326. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/module.py.jinja +0 -20
  327. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/orders.py.jinja +0 -83
  328. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/tasks.py.jinja +0 -84
  329. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/module.py.jinja +0 -10
  330. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/orders.py.jinja +0 -35
  331. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/module.py.jinja +0 -10
  332. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repository.py.jinja +0 -14
  333. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding.py.jinja +0 -19
  334. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/definitions.py.jinja +0 -24
  335. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/module.py.jinja +0 -7
  336. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/module.py.jinja +0 -25
  337. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/realtime.py.jinja +0 -36
  338. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/migrations/__init__.py.jinja +0 -1
  339. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/module.py.jinja +0 -26
  340. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/orders.py.jinja +0 -49
  341. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/architecture.md +0 -84
  342. python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/development.md +0 -185
  343. python_ddd_framework-0.3.2/src/python_ddd_framework/identity/http_api.py +0 -90
  344. python_ddd_framework-0.3.2/src/python_ddd_framework/identity/sqlalchemy/stores.py +0 -526
  345. python_ddd_framework-0.3.2/src/python_ddd_framework/invocation/entries.py +0 -54
  346. python_ddd_framework-0.3.2/src/python_ddd_framework/redis/runtime.py +0 -116
  347. python_ddd_framework-0.3.2/src/python_ddd_framework/services/convention.py +0 -301
  348. python_ddd_framework-0.3.2/src/python_ddd_framework/services/framework_provider.py +0 -178
  349. python_ddd_framework-0.3.2/src/python_ddd_framework/services/runtime.py +0 -302
  350. python_ddd_framework-0.3.2/src/python_ddd_framework/settings/module.py +0 -10
  351. python_ddd_framework-0.3.2/src/python_ddd_framework/sqlalchemy/repository.py +0 -33
  352. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/LICENSE +0 -0
  353. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/application/__init__.py +0 -0
  354. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/application/build_spec.py +0 -0
  355. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/application/runtime_hooks.py +0 -0
  356. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/application_services/errors.py +0 -0
  357. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/auditing/__init__.py +0 -0
  358. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/auditing/contracts.py +0 -0
  359. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/auditing/sqlalchemy/__init__.py +0 -0
  360. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/auditing/sqlalchemy/migrations/0001_auditing.py +0 -0
  361. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/auditing/sqlalchemy/migrations/__init__.py +0 -0
  362. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/auditing/sqlalchemy/models.py +0 -0
  363. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/auditing/sqlalchemy/module.py +0 -0
  364. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/auditing/sqlalchemy/store.py +0 -0
  365. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/authorization/catalog.py +0 -0
  366. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/authorization/definition_discovery.py +0 -0
  367. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/authorization/errors.py +0 -0
  368. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_execution/__init__.py +0 -0
  369. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_execution/application.py +0 -0
  370. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_execution/contracts.py +0 -0
  371. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_execution/locks.py +0 -0
  372. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_execution/management.py +0 -0
  373. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_execution/permissions.py +0 -0
  374. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/__init__.py +0 -0
  375. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/declaration.py +0 -0
  376. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/errors.py +0 -0
  377. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/execution.py +0 -0
  378. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/pgqueuer/UPSTREAM_LICENSE.txt +0 -0
  379. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/pgqueuer/__init__.py +0 -0
  380. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/0001_pgqueuer_1_3_2.py +0 -0
  381. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/__init__.py +0 -0
  382. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/pgqueuer/options.py +0 -0
  383. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/pgqueuer/sql/pgqueuer_1_3_2_install.sql +0 -0
  384. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_jobs/pgqueuer/supervision.py +0 -0
  385. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_workers/__init__.py +0 -0
  386. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/background_workers/errors.py +0 -0
  387. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/cli/development.py +0 -0
  388. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/cli/errors.py +0 -0
  389. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/cli/inspection.py +0 -0
  390. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/__init__.py +0 -0
  391. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/composition.py +0 -0
  392. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/contracts.py +0 -0
  393. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/dotenv_source.py +0 -0
  394. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/environment_source.py +0 -0
  395. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/immutability.py +0 -0
  396. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/input_shape.py +0 -0
  397. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/merge.py +0 -0
  398. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/root.py +0 -0
  399. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/sources.py +0 -0
  400. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/values.py +0 -0
  401. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/configuration/yaml_source.py +0 -0
  402. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/__init__.py +0 -0
  403. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/source.py +0 -0
  404. /python_ddd_framework-0.3.2/src/python_ddd_framework/py.typed → /python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
  405. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
  406. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/__init__.py.jinja +0 -0
  407. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/__init__.py.jinja +0 -0
  408. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/__init__.py.jinja +0 -0
  409. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/__init__.py.jinja +0 -0
  410. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/__init__.py.jinja +0 -0
  411. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/__init__.py.jinja +0 -0
  412. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/__init__.py.jinja +0 -0
  413. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/.dockerignore +0 -0
  414. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/.gitignore +0 -0
  415. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/.python-version +0 -0
  416. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/Dockerfile +0 -0
  417. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/compose.dev.yaml.jinja +0 -0
  418. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/compose.production.yaml.jinja +0 -0
  419. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/src/host/__init__.py.jinja +0 -0
  420. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/tests/conftest.py.jinja +0 -0
  421. {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.5.1/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/tests/host/test_http.py.jinja +0 -0
  422. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/developer_kit/wiring.py +0 -0
  423. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/diagnostics/__init__.py +0 -0
  424. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/diagnostics/journal.py +0 -0
  425. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/diagnostics/model.py +0 -0
  426. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/diagnostics/source.py +0 -0
  427. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/distributed_lock/__init__.py +0 -0
  428. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/distributed_lock/options.py +0 -0
  429. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/domain/aggregates.py +0 -0
  430. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/domain/entities.py +0 -0
  431. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/domain/errors.py +0 -0
  432. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/domain/value_objects.py +0 -0
  433. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/errors/__init__.py +0 -0
  434. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/errors/base.py +0 -0
  435. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/errors/configuration.py +0 -0
  436. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/errors/diagnostics.py +0 -0
  437. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/errors/modularity.py +0 -0
  438. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/errors/services.py +0 -0
  439. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/events/discovery.py +0 -0
  440. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/events/errors.py +0 -0
  441. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/errors.py +0 -0
  442. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/filters.py +0 -0
  443. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/http.py +0 -0
  444. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/http_router.py +0 -0
  445. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/manual_action.py +0 -0
  446. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/middleware.py +0 -0
  447. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/realtime/__init__.py +0 -0
  448. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/realtime/authentication.py +0 -0
  449. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/realtime/options.py +0 -0
  450. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/route_integrity.py +0 -0
  451. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/tracing.py +0 -0
  452. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/transfer.py +0 -0
  453. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/upload_limits.py +0 -0
  454. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/fastapi/uploads.py +0 -0
  455. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/hosted_services/__init__.py +0 -0
  456. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/hosted_services/errors.py +0 -0
  457. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/hosted_services/options.py +0 -0
  458. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/hosted_services/state.py +0 -0
  459. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/hosting/__init__.py +0 -0
  460. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/hosting/instance.py +0 -0
  461. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/errors.py +0 -0
  462. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/passwords.py +0 -0
  463. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/permissions.py +0 -0
  464. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/sqlalchemy/__init__.py +0 -0
  465. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/sqlalchemy/migrations/0001_identity.py +0 -0
  466. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/sqlalchemy/migrations/0002_physical_delete.py +0 -0
  467. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/identity/sqlalchemy/migrations/__init__.py +0 -0
  468. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/invocation/__init__.py +0 -0
  469. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/invocation/callables.py +0 -0
  470. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/invocation/contracts.py +0 -0
  471. {python_ddd_framework-0.3.2/src/python_ddd_framework/application_services → python_ddd_framework-0.5.1/src/python_ddd_framework/invocation}/signature.py +0 -0
  472. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/lifecycle/context.py +0 -0
  473. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/lifecycle/runtime.py +0 -0
  474. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/lifecycle/state.py +0 -0
  475. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/modularity/selection.py +0 -0
  476. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/notifications/contracts.py +0 -0
  477. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/observability/__init__.py +0 -0
  478. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/observability/context.py +0 -0
  479. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/observability/export.py +0 -0
  480. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/observability/formatting.py +0 -0
  481. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/observability/options.py +0 -0
  482. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/options/__init__.py +0 -0
  483. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/options/aliases.py +0 -0
  484. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/options/immutability.py +0 -0
  485. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/options/input_keys.py +0 -0
  486. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/options/issues.py +0 -0
  487. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/options/models.py +0 -0
  488. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/options/schema.py +0 -0
  489. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/options/validation.py +0 -0
  490. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/realtime/diagnostics.py +0 -0
  491. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/redis/__init__.py +0 -0
  492. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/redis/lease_lock.py +0 -0
  493. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/redis/notification_runtime.py +0 -0
  494. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/redis/options.py +0 -0
  495. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/__init__.py +0 -0
  496. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/convention_contracts.py +0 -0
  497. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/exposure.py +0 -0
  498. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/services/registration.py +0 -0
  499. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/__init__.py +0 -0
  500. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/application.py +0 -0
  501. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/binding.py +0 -0
  502. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/changes.py +0 -0
  503. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/contracts.py +0 -0
  504. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/definition_discovery.py +0 -0
  505. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/errors.py +0 -0
  506. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/handlers.py +0 -0
  507. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/management.py +0 -0
  508. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/permissions.py +0 -0
  509. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/provider.py +0 -0
  510. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/refresh.py +0 -0
  511. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/sqlalchemy/__init__.py +0 -0
  512. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/sqlalchemy/migrations/0001_settings.py +0 -0
  513. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/sqlalchemy/migrations/0002_physical_delete.py +0 -0
  514. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/sqlalchemy/migrations/0003_version_tokens.py +0 -0
  515. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/sqlalchemy/migrations/__init__.py +0 -0
  516. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/sqlalchemy/models.py +0 -0
  517. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/sqlalchemy/store.py +0 -0
  518. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/store.py +0 -0
  519. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/settings/values.py +0 -0
  520. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/alembic_runtime/__init__.py +0 -0
  521. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/alembic_runtime/script.py.mako +0 -0
  522. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/errors.py +0 -0
  523. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/migration_options.py +0 -0
  524. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/options.py +0 -0
  525. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/runtime.py +0 -0
  526. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/sqlalchemy/unit_of_work.py +0 -0
  527. {python_ddd_framework-0.3.2 → python_ddd_framework-0.5.1}/src/python_ddd_framework/testing/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-ddd-framework
3
- Version: 0.3.2
3
+ Version: 0.5.1
4
4
  Summary: Modular DDD application framework with project CLI and bundled templates
5
5
  License-Expression: LicenseRef-Proprietary
6
6
  License-File: LICENSE
@@ -35,6 +35,7 @@ Requires-Dist: opentelemetry-sdk==1.44.0
35
35
  Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.44.0
36
36
  Requires-Dist: opentelemetry-instrumentation-fastapi==0.65b0
37
37
  Requires-Dist: opentelemetry-instrumentation-httpx==0.65b0
38
+ Requires-Dist: binaryornot>=0.5,<0.6 ; extra == 'developer-kit'
38
39
  Requires-Dist: cookiecutter>=2.7.1,<2.8 ; extra == 'developer-kit'
39
40
  Requires-Dist: libcst>=1.9.0,<1.10 ; extra == 'developer-kit'
40
41
  Requires-Python: >=3.12, <3.15
@@ -85,7 +86,7 @@ Runtime integrations ship in the base package; the Host explicitly enables the m
85
86
 
86
87
  The supported versions and dependencies are defined in [pyproject.toml](https://github.com/componet-architecture/python-ddd-framework/blob/main/pyproject.toml). The framework, CLI, and bundled templates share one package version.
87
88
 
88
- > **Version 0.3:** This version introduces the `python-ddd-framework` name, unified runtime installation, and application documentation templates. Check [release status](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/status.md#当前发布) before selecting a PyPI version. Use the local-wheel route below when evaluating a checkout that has not been published.
89
+ > **Version 0.5:** This version introduces staged lifecycle shutdown, a temporary `HostedService.stopping` context, and explicit message-channel admission during stopping. Existing applications must apply the lifecycle migration instructions below; applications upgrading from before 0.4 must also apply the earlier capability and consumer-layout migrations. Check [release status](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/status.md#当前发布) for publication and validation evidence. Use the local-wheel route below when evaluating a checkout that has not been published.
89
90
 
90
91
  ### 1. Install the CLI and create a project
91
92
 
@@ -93,11 +94,11 @@ For a published release:
93
94
 
94
95
  ```sh
95
96
  uv tool install --python 3.12 "python-ddd-framework[developer-kit]"
96
- pddd new my-app
97
+ pddd new my-app --python 3.12
97
98
  cd my-app
98
99
  ```
99
100
 
100
- To select a specific release, append `==<version>` to the quoted package requirement. `pddd new` creates the Host, configuration, tests, deployment files, and four application documents: `README.md`, `AGENTS.md`, `docs/architecture.md`, and `docs/development.md`. It then runs `uv sync` and pins both the runtime dependency and developer tools to the CLI's exact framework version. The destination directory must not already exist.
101
+ To select a specific release, append `==<version>` to the quoted package requirement. `pddd new` creates the Host, configuration, tests, deployment files, and four application documents: `README.md`, `AGENTS.md`, `docs/architecture.md`, and `docs/development.md`. Python metadata, configuration, environment, source, tests, and deployment files live in `backend/`; root `scripts/` belongs to the consumer. It then runs `uv sync` inside `backend/` and pins both the runtime dependency and developer tools to the CLI's exact framework version. The destination directory must not already exist. `--python` accepts a supported portable `major.minor[.patch]` version. `--no-sync` writes files only and works without that interpreter installed; later run `uv sync --project backend` to create the target environment. Native uv/test/build and Docker commands run from `backend/`.
101
102
 
102
103
  <details>
103
104
  <summary>Using an unreleased local wheel</summary>
@@ -110,42 +111,45 @@ pddd new my-app --framework-wheel "<absolute-wheel-path>"
110
111
  cd my-app
111
112
  ```
112
113
 
113
- The generator checks that the wheel contains `python-ddd-framework` at the CLI's version, copies it into the application's `vendor/` directory, and records the local dependency source. Installing a CLI from source alone does not change where generated applications obtain their framework dependency.
114
+ The generator checks that the wheel contains `python-ddd-framework` at the CLI's version, copies it into the application's `backend/vendor/` directory, and records the local dependency source. Installing a CLI from source alone does not change where generated applications obtain their framework dependency.
114
115
 
115
116
  </details>
116
117
 
117
118
  ### 2. Prepare infrastructure and add a business module
118
119
 
119
- Run project commands from the generated application's root directory:
120
+ Run installed `pddd` project commands from the application root, `backend/`, or any descendant directory. They locate Host metadata and use the backend's environment and framework version; unrelated nested Python projects do not take ownership:
120
121
 
121
122
  ```sh
122
- uv run pddd dev-init
123
- uv run pddd add module orders
123
+ pddd dev-init
124
+ pddd add module orders --template ddd
125
+ pddd add module conversions --template basic
124
126
  ```
125
127
 
126
- `dev-init` starts or reuses local PostgreSQL and Redis using `app.development.yaml`. It preserves existing data; database migration and seeding are separate steps.
128
+ `dev-init` starts or reuses local PostgreSQL and Redis using `backend/app.development.yaml`. It preserves existing data; database migration and seeding are separate steps.
127
129
 
128
130
  `add module orders` generates an order-management example and registers it with the Host. The example includes an aggregate, service contracts, application services, persistence, HTTP endpoints, module tests, and a module README describing its actual behavior and boundaries.
129
131
 
132
+ `ddd` is the default six-layer template. `basic` generates only a Module, a synchronous Protocol service, its transient implementation, and an English README. It has no database/Redis requirement or implicit HTTP/interception. Both templates support `--dry-run` and refuse existing targets.
133
+
130
134
  ### 3. Initialize the database
131
135
 
132
136
  Apply the provider migrations selected by the generated Host, then generate the business module's first migration:
133
137
 
134
138
  ```sh
135
- uv run pddd db upgrade --module identity
136
- uv run pddd db upgrade --module settings
137
- uv run pddd db upgrade --module auditing
138
- uv run pddd db upgrade --module background_jobs
139
- uv run pddd db revision --module orders
139
+ pddd db upgrade --module identity
140
+ pddd db upgrade --module settings
141
+ pddd db upgrade --module auditing
142
+ pddd db upgrade --module background_jobs
143
+ pddd db revision --module orders
140
144
  ```
141
145
 
142
- Review the generated revision in `src/modules/orders/sqlalchemy/migrations/` before applying it. Then upgrade and seed:
146
+ Review the generated revision in `backend/src/modules/orders/sqlalchemy/migrations/` before applying it. Then upgrade and seed:
143
147
 
144
148
  ```sh
145
- uv run pddd db upgrade --module orders
146
- uv run pddd db status --module orders
147
- uv run pddd db seed --module identity
148
- uv run pddd db seed --module orders
149
+ pddd db upgrade --module orders
150
+ pddd db status --module orders
151
+ pddd db seed --module identity
152
+ pddd db seed --module orders
149
153
  ```
150
154
 
151
155
  Migration commands operate on the selected module. When a migration requires another module's revision, upgrade that prerequisite explicitly. Starting the Host does not migrate or seed the database.
@@ -153,10 +157,10 @@ Migration commands operate on the selected module. When a migration requires ano
153
157
  ### 4. Run the application and explore the API
154
158
 
155
159
  ```sh
156
- uv run pddd dev
160
+ pddd dev
157
161
  ```
158
162
 
159
- Open **http://127.0.0.1:8000/docs**. Use the generated `identity.seed_admin_username` and `identity.seed_admin_password` in `app.development.yaml` to call `/api/auth/login`, then enter the returned access token in Swagger's **Authorize** dialog.
163
+ Open **http://127.0.0.1:8000/docs**. Use the generated `identity.seed_admin_username` and `identity.seed_admin_password` in `backend/app.development.yaml` to call `/api/auth/login`, then enter the returned access token in Swagger's **Authorize** dialog.
160
164
 
161
165
  With the `orders` module installed, you can create and query orders at `/api/orders`, approve an order at `/api/orders/{id}/approve`, and enqueue approval at `/api/orders/{id}/queue-approval`. Swagger shows the request schemas and all available operations. The example also includes file transfer and an authenticated WebSocket endpoint at `/ws/orders`.
162
166
 
@@ -164,28 +168,28 @@ The default business API prefix is `/api`. Liveness and readiness are exposed at
164
168
 
165
169
  ## CLI reference
166
170
 
167
- Use `pddd` to create a project. Inside an existing project, use **`uv run pddd`** so commands run with that project's framework version.
171
+ Use `pddd` to create a project. Inside an existing project, use **`pddd`** so commands run with that project's framework version.
168
172
 
169
173
  | Command | Purpose |
170
174
  | --- | --- |
171
175
  | `pddd new my-app` | Generate a new Host project and install its dependencies. |
172
- | `uv run pddd add module orders` | Generate a business module and register its packages and Host dependencies. |
173
- | `uv run pddd dev-init` | Prepare the local PostgreSQL and Redis services from development configuration. |
174
- | `uv run pddd dev` | Start the development web server with reload at `127.0.0.1:8000`. |
175
- | `uv run pddd db revision --module orders` | Generate an Alembic revision for the module's models. Review it before applying. |
176
- | `uv run pddd db upgrade --module orders` | Apply the selected module's migrations. |
177
- | `uv run pddd db status --module orders` | Check that the database is at the selected module's migration heads; fail if it is not. |
178
- | `uv run pddd db seed --module orders` | Run the selected module's seed contributors after checking its migrations. |
179
- | `uv run pddd inspect` | Print the composed module graph, service registrations, and redacted configuration inputs as JSON. |
176
+ | `pddd add module orders` | Generate a business module and register its packages and Host dependencies. |
177
+ | `pddd dev-init` | Prepare the local PostgreSQL and Redis services from development configuration. |
178
+ | `pddd dev` | Start the development web server with reload at `127.0.0.1:8000`. |
179
+ | `pddd db revision --module orders` | Generate an Alembic revision for the module's models. Review it before applying. |
180
+ | `pddd db upgrade --module orders` | Apply the selected module's migrations. |
181
+ | `pddd db status --module orders` | Check that the database is at the selected module's migration heads; fail if it is not. |
182
+ | `pddd db seed --module orders` | Run the selected module's seed contributors after checking its migrations. |
183
+ | `pddd inspect` | Print the composed module graph, service registrations, and redacted configuration inputs as JSON. |
180
184
 
181
185
  Common variations:
182
186
 
183
187
  ```sh
184
188
  pddd new my-app --dry-run
185
- uv run pddd add module billing --dry-run
186
- uv run pddd dev --host 127.0.0.1 --port 8080
187
- uv run pddd inspect --environment development
188
- uv run pddd db status --module orders --environment production
189
+ pddd add module billing --dry-run
190
+ pddd dev --host 127.0.0.1 --port 8080
191
+ pddd inspect --environment development
192
+ pddd db status --module orders --environment production
189
193
  ```
190
194
 
191
195
  Generation supports `--dry-run` without writing files. Database commands require `--module`; aliases come from installed `python_ddd_framework.modules` entry points and must belong to the current application's module graph.
@@ -197,18 +201,18 @@ Generation supports `--dry-run` without writing files. Database commands require
197
201
  For the complete options supported by your installed version:
198
202
 
199
203
  ```sh
200
- uv run pddd
201
- uv run pddd new --help
202
- uv run pddd add module --help
203
- uv run pddd db --help
204
- uv run pddd inspect --help
204
+ pddd
205
+ pddd new --help
206
+ pddd add module --help
207
+ pddd db --help
208
+ pddd inspect --help
205
209
  ```
206
210
 
207
211
  ## Application development
208
212
 
209
213
  ### Find the right place for a change
210
214
 
211
- The generated project starts with `src/host/` for composition and startup. Business modules live under `src/modules/`; each generated module has these responsibilities:
215
+ The generated project starts with `backend/src/host/` for composition and startup. Modules live under `backend/src/modules/`. A `basic` module contains `module.py`, `contracts/`, `services/`, and its README. The default `ddd` module has these responsibilities:
212
216
 
213
217
  | Location within a module | Responsibility |
214
218
  | --- | --- |
@@ -228,15 +232,15 @@ See the [development guide](https://github.com/componet-architecture/python-ddd-
228
232
 
229
233
  ### Configure the application
230
234
 
231
- Edit `app.development.yaml` for local connections, identity settings, logging, and module Options. An optional `app.yaml` can hold shared configuration. Environment variables override file inputs; generated Hosts use the `PDDD_` prefix and `__` between nested fields. For example, `PDDD_HTTP__API_PREFIX=/v1` changes the business API prefix.
235
+ Edit `backend/app.development.yaml` for local connections, identity settings, logging, and module Options. An optional `backend/app.yaml` can hold shared configuration. Environment variables override file inputs; generated Hosts use the `PDDD_` prefix and `__` between nested fields. For example, `PDDD_HTTP__API_PREFIX=/v1` changes the business API prefix.
232
236
 
233
- `PYTHON_DDD_FRAMEWORK_ENVIRONMENT` selects the Host environment; it is separate from business configuration. Typed Options validate configuration during application composition. Use `uv run pddd inspect` to investigate input values and where they came from.
237
+ `PYTHON_DDD_FRAMEWORK_ENVIRONMENT` selects the Host environment; it is separate from business configuration. Typed Options validate configuration during application composition. Use `pddd inspect` to investigate input values and where they came from.
234
238
 
235
239
  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后台与日志).
236
240
 
237
241
  ### Run application tests
238
242
 
239
- After completing local database setup:
243
+ After completing local database setup, run from `backend/`:
240
244
 
241
245
  ```sh
242
246
  uv run pytest
@@ -246,7 +250,7 @@ The generated application includes module tests and Host tests. Keep Docker avai
246
250
 
247
251
  ## Deployment
248
252
 
249
- Generated applications include a `Dockerfile` and `compose.production.yaml`. Build an application distribution with:
253
+ Generated applications include `backend/Dockerfile` and `backend/compose.production.yaml`. Run build and deployment commands from `backend/`:
250
254
 
251
255
  ```sh
252
256
  uv build --no-sources
@@ -263,6 +267,85 @@ The image uses `python -m host.main` without development reload. Runtime install
263
267
 
264
268
  <a id="版本与升级"></a>
265
269
 
270
+ ## Capability module migration (0.4)
271
+
272
+ Capability composition now uses the same `AppModule` model as customer modules. Existing applications must migrate their declarations together; there is no compatibility path.
273
+
274
+ - 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.
275
+ - 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.
276
+ - 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`.
277
+ - 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`.
278
+ - `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.
279
+ - HTTP Modules depend on `FastApiModule` (or `FastApiRealtimeModule` for its additional capability). The module registers the native FastAPI integration; remove manual `FastapiProvider` contributions from Host.
280
+ - Ordinary DI services can opt into `@unit_of_work`, `@authorize`, and `ValidationEnabled`. Declare their capability dependencies on the service's owning Module and retain the existing native registration. Only marked async instance methods enter interception; class declarations covering synchronous/static/class/generator methods fail at build. Use `call` / `call_as` for non-DI callers. These services do not become ApplicationServices or HTTP endpoints.
281
+ - Interceptor match functions receive `ServiceMethod`, replacing `ApplicationServiceMethod`. Shared method descriptions, validation policies, interception contracts and execution now belong to `python_ddd_framework.invocation`; import the public symbols from the root package. The old name and moved `application_services` implementation modules have no forwarding aliases. ApplicationService retains its REQUEST-to-ACTION proxy.
282
+
283
+ The current contracts are in [architecture](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/architecture.md), the decisions are [ADR-015](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/adr/ADR-015-application-service-contract-proxy-and-dispatch.md) and [ADR-032](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/adr/ADR-032-capability-module-composition.md), and validation limits are in [status](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/status.md). Slice 3 data/event migration is documented below; later slice status is recorded on the status page.
284
+
285
+ ## Data and event migration (0.4)
286
+
287
+ - Replace `SqlAlchemyRepository.add` with `insert`. Use `find` for optional results; `get` now raises `ResourceNotFoundError` when absent. List/page return lists, insert/update return the entity, and delete/batch methods return `None`. `auto_save=True` flushes the owning UoW without committing an outer transaction. Explicit mapping repositories retain their own business methods; update their callers and use the new names where they expose the standard operations.
288
+ - Manual `UnitOfWorkManager.begin()` creates missing execution scopes and owns their exit. Call `complete()` explicitly. Existing scopes, task/connection limits, outer participation and `requires_new` ownership remain intact.
289
+ - Replace synchronous `publish_domain`/`publish_after_commit` with `await events.publish(event, phase=LocalEventPhase.DOMAIN/AFTER_COMMIT)`, or omit phase to notify both. No UoW dispatches immediately; transactional UoW defers by default; nontransactional UoW rejects explicit and automatic events before repository writes. `on_unit_of_work_complete=False` never advances AFTER_COMMIT ahead of a successful commit.
290
+ - Replace `CacheDefinition`/`CacheDefinitions`/`CacheCatalog` with injected `DistributedCache[ValueType]`; remove cache declarations from Modules. Use `@cache_name("stable.name")` on the value type if required. Calls take keys/values directly. Configure global `caching.default_entry_options` or pass a complete `DistributedCacheEntryOptions`; omitted options use the default 20-minute sliding expiration, while an empty options object is persistent. Development Hosts explicitly set `caching.hide_errors: false`.
291
+ - Redis cache keys and entry encoding changed; old disposable entries are not read or migrated. They expire under their old TTL. `consider_uow=True` stages writes/deletions per concrete UoW; completion failures retain the committed database fact and do not make the two resources atomic. Do not retry an entire committed business operation merely because an AFTER_COMMIT handler or cache write failed.
292
+
293
+ ## Message processing (0.4)
294
+
295
+ Opt in with `MessagingModule`, `MessageChannelDefinition[T]`, `MessageHandler[T]` and the
296
+ APP-scoped `MessageChannel[T]`. Register a concrete Handler as a cached ACTION single binding.
297
+ `send()` returns an acceptance receipt; `receipt.wait()` reports processing and cleanup, not
298
+ commit or external acknowledgement. `submit()` is the bounded external-thread entry. Only
299
+ replaceable snapshots may declare `snapshot_key`. Existing events, Jobs, WebSockets and hosted
300
+ callbacks retain their semantics. See the [usage guide](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#进程内消息) and
301
+ [reference module](https://github.com/componet-architecture/python-ddd-framework/blob/main/reference_app/orders/messaging_module.py). Existing applications may explicitly
302
+ adopt the sample; upgrades do not rewrite their code or generated documentation.
303
+
304
+ ## User entry migration (0.4)
305
+
306
+ - `@exposes_application_services(ContractsModule)` now contributes the formal Module dependency. Remove the repeated ContractsModule entry from the HTTP Module's `dependencies`; keep required transport capabilities. Conventional methods remain automatic, `remote_service(is_enabled=False)` excludes them, and route overrides still handle deliberate URL/operation identity differences.
307
+ - A plain Pydantic DTO on a generated GET endpoint binds to query parameters. Use explicit `Body`, `Query`, `Header` or `Depends` to select another native binding. Applications that intentionally sent GET bodies must now declare `Body`; complex parameter shapes retain FastAPI's native limits.
308
+ - Construct schedules as `BackgroundJobSchedule(name="orders.daily", cron="0 0 * * *", job=JobType, payload=Payload(...))`. A registered function's `BackgroundJobDefinition` is also accepted. Remove caller-supplied `job_name`, `job_version` and JSON bytes. Keep existing schedule names and Job definitions to retain durable identity; enqueue and PgQueuer storage are unchanged.
309
+ - Pass a `RealtimeMessage` subclass instance to `send_to_user(user_id, message)`, `send_to_connection(connection_id, message)` or `connection.send(message)`. Put the existing versioned name in the class's `message_type` and declare its payload fields with Pydantic. Preserve existing names/fields when migrating clients. The envelope and queue acceptance report retain their meaning.
310
+ - `locks.acquire(key, wait_timeout=timedelta(...))` overrides only that acquisition's waiting time; `None` uses configured waiting and zero tries without waiting. Lease/renewal settings remain global.
311
+ - `SettingManager.update` now pairs `SettingDefinition[T]` with `value: T`; validate dynamic input at its boundary. Version tokens, reset and refresh behavior are unchanged. `BusinessError(..., data=PublicData(...))` optionally publishes a Pydantic DTO under `error.data`; absence omits the field. Include only intentionally public fields, never raw exceptions or SQL.
312
+
313
+ See the [usage guide](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#用户入口示例) for typed examples. Slice 5 is implemented; current extension/Identity migrations are documented below; the new consumer layout remains pending.
314
+
315
+ ## CLI module layout migration (0.4)
316
+
317
+ New modules use the [responsibility directory rules](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#模块目录与编码规范), delivered inside each generated project. Existing applications are not regenerated by `pddd upgrade`.
318
+
319
+ - Replace the former `<Module>ApplicationService` with `<Module>QueryApplicationService`, `<Module>ManagementApplicationService`, and `<Module>ApprovalApplicationService`; the consumer item example has a separate item service. Inject the contract for the called use case.
320
+ - Move contracts from `application_contracts/orders.py` into `services`, `inputs`, and `views`; internal reporting goes in `integration_services`. Move aggregate/value/event/repository declarations into their Domain responsibility directories. Import the precise owner, without legacy aliases.
321
+ - Shared immutable values used by Domain and public DTOs belong in `domain_shared/value_objects`; domain-only values remain in `domain/value_objects`. The Catalog consumer moves `Money` out of `domain_shared/values.py` without changing its validation or normalization.
322
+ - Move `application/tasks.py` declarations into `background_jobs/order_approval`, `background_workers`, and their capability files. Hosted integration belongs in `hosted_services`; ORM Base belongs in `sqlalchemy/models/base.py`. Update tests and explicit registrations along with imports.
323
+ - Preserve external HTTP identities through the existing public route overrides. Keep Worker admission and HostedService/schedule enablement explicit; do not change existing schema, transactions, event ordering, or resource cleanup as part of this source migration. Merge the generated AGENTS/development conventions into application-owned documentation deliberately.
324
+
325
+ ## Identity migration (0.4)
326
+
327
+ Slice 7 adds user/role management and an application-local authorization switch. Existing public service contracts change without compatibility aliases.
328
+
329
+ - Apply `pddd db upgrade --module identity` before running the new code. The new `identity_0004` revision adds `concurrency_version` to users and roles with a non-null initial value; published revisions and token formats remain unchanged. Consumer extension columns/indexes and revisions stay in the consumer project.
330
+ - `get_users(query)` and `get_roles(query)` accept `PagedResultRequestDto` and return `PagedResult` (`items`, `total_count`). Update callers that expected a bare array, custom repository implementations, and subclasses of the public defaults. New management DTOs are exported from `python_ddd_framework.identity`.
331
+ - Read `concurrency_version` from the current user/role or relationship view and supply it for edits, activation, deletion, passwords, and whole-set relationship updates. Relationship writes return the resulting version. HTTP DELETE takes a JSON version command. Handle 409 by rereading and resolving the edit; do not replace the supplied version and retry blindly. `permission_version` remains internal authorization cache state.
332
+ - Current-user password changes use `ChangePasswordCommand` with the old password and the version returned by `me()`. Administrator resets use `SetPasswordCommand` and the existing user-management permission. Password changes, deactivation, and deletion invalidate existing sessions after commit. Permission changes are reconsidered on subsequent requests.
333
+ - Access/refresh lifetimes and lockout controls now belong to `IdentityOptions`; defaults are preserved. Replace imports of the removed module-level duration/attempt constants with the owning Options. Existing refresh sessions use the currently configured lifetimes.
334
+ - `AuthorizationOptions.always_allow` defaults to `False`. Configure `authorization.always_allow` in the Host when authorization bypass is intended. It covers shared service/HTTP authorization without synthesizing identity or accepting invalid tokens; business validation, transactions, password checks, and realtime identity requirements remain active. Keep permission declarations so disabling the setting restores normal authorization.
335
+
336
+ See the [Identity guide](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#identity-管理与授权配置) and [validation limits](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/status.md#identity-与授权切片-7未发布). Consumer delivery is described in the layout migration below; fresh acceptance and remaining release limits are recorded on the status page.
337
+
338
+ ## Extension migration (0.4)
339
+
340
+ - Identity exposes `DefaultAuthenticationApplicationService` and `DefaultIdentityManagementApplicationService`. Specialize these public defaults and use the existing module override registration; keep policies on the final methods. Remove imports of the former private implementations.
341
+ - `UserView` is now a Pydantic `ExtensibleModel`; construct it with named arguments. `CreateUserCommand`, `UpdateUserCommand`, `UserView` (including paged results), and `IdentityUser` share `IDENTITY_USER_EXTENSION`. Declare typed `ExtensionProperties` through `ModelExtensions`; unknown fields are rejected. HTTP extension values remain inside `extra_properties`, including properties mapped to SQL columns.
342
+ - Nested DTOs and native Pydantic generic containers use the same Application-specific schema. Property types must be closed, including type aliases; nested models and dataclasses must reject unknown fields. Keep explicit Query/Header/Body bindings on the implementation when using a separate service contract.
343
+ - Upgrade Identity with `pddd db upgrade --module identity` before using the new JSON container (`identity_0003`). Never edit an applied base revision. A custom Identity store must preserve `IdentityUser.extra_properties`; SQL stores use the Application's `SqlAlchemyModelCatalog.extension_model` binding for queries and reads/writes.
344
+ - For independent columns, the consumer persistence Module contributes `SqlAlchemyModelExtension` and `SqlAlchemyExtensionMigrations`. Register that Module's CLI alias in project metadata, create its local migrations package, and declare the required base revision in `depends_on`. Do not register the base table or Schema again.
345
+ - After upgrading the base, run `pddd db revision --module employee`, review the generated file in the consumer extension module, then run `pddd db upgrade --module employee` and `pddd db status --module employee`. Replace `employee` with your declared alias. Generation includes only that extension's declared columns/indexes; installed framework files remain read-only. A standalone extension upgrade rejects missing prerequisites; the programmatic global migrator follows Alembic dependencies.
346
+ - When a later extension change requires a newer base revision, update the declaration's `depends_on`, apply that base revision, then generate the next extension revision. Earlier extension files keep their original dependencies. Upgrade/status require each current extension head to satisfy the current declaration.
347
+ - Plan explicit data migrations for backfills, required new properties on existing rows, or destructive changes. Host startup never changes tables. Declaration and storage examples are in the [extension guide](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#服务与模型扩展).
348
+
266
349
  ## Upgrading
267
350
 
268
351
  Framework upgrades update dependencies. They do not regenerate your business code, Host, configuration, templates, or migrations. Updating a globally installed CLI also leaves existing projects unchanged.
@@ -285,6 +368,22 @@ During `0.x`, compatible fixes use a patch release; changes requiring consumer a
285
368
 
286
369
  These notes remain the authoritative consumer migration instructions. Historical versions below refer to the former package name.
287
370
 
371
+ #### Lifecycle shutdown migration (0.5)
372
+
373
+ Version 0.5.1 changes shutdown after the published 0.4.0 baseline. Custom `RuntimeParticipant` implementations must use the new global barriers: `quiesce` → `stopping(reason)` → `close_admission` → `drain` → `stop(reason)` → Module/container cleanup. Move accepted-work draining out of resource `stop`; keep dependencies alive until all drains complete. `prepare(bool)` still selects the startup mode.
374
+
375
+ Move business calls needed before resource release into the optional `HostedService.stopping(context, reason)` hook. Use its separate context for SDK/thread callbacks; the startup context stays closed. Only successfully started services receive the hook. `stop` still cleans every touched service, including partial startup failures. Each hook uses the existing `shutdown_timeout`; cancellation waits for actual cleanup and is not a total shutdown deadline.
376
+
377
+ Channels that must accept these callbacks declare `stopping_owners=(ServiceType,)` and pass the current hook context with `send(value, stopping=context)` or `submit(value, stopping=context)`. The channel Module must depend on the declared service owner. The default permits no shutdown input. Capacity, receipts and per-call scope/UoW behavior remain unchanged; HTTP/WebSocket retain native transport shutdown. See the [lifecycle decision](docs/adr/ADR-033-staged-lifecycle-shutdown.md) and [usage guide](docs/development.md#hostedservice-收尾).
378
+
379
+ #### Additional fixes in 0.4.0
380
+
381
+ `BackgroundJobRetryPolicy.max_attempts` now counts all executions, including the first. A value of `2` permits two executions; `1` disables failure retries. The 0.3.2 PgQueuer mapping allowed one extra execution. If your application intentionally relied on that behavior, increase its configured total by one. `BackgroundJobContext.attempt` remains zero-based. No queue schema migration is required.
382
+
383
+ The developer-kit dependency constrains `binaryornot` to `0.5.x`, because `0.6.0` can classify bundled templates containing Chinese comments as binary and skip rendering them. Re-resolve the developer-kit environment when installing 0.4.0. Updating the dependency does not replace existing generated application code.
384
+
385
+ The new `DomainService` marker uses existing constructor injection and transient REQUEST lifetime. It does not create transactions or expose HTTP endpoints. Newly generated modules place approval policy in `domain/services/order_approval_service.py`; existing projects can adopt that example explicitly after upgrading. The application checks existence and the submitted version before the domain policy; a stale or missing order therefore takes precedence over a disabled approval setting when both inputs are invalid. Domain rules, schema, and installation files are not automatically rewritten.
386
+
288
387
  <a id="框架更名迁移未发布"></a>
289
388
 
290
389
  <details>
@@ -377,3 +476,7 @@ Generated applications include a self-contained English README, `AGENTS.md`, arc
377
476
  ## License
378
477
 
379
478
  Python DDD Framework is distributed under the [hank-repo Proprietary License](https://github.com/componet-architecture/python-ddd-framework/blob/main/LICENSE). Use requires a separate written agreement; public package availability does not grant additional rights. The source repository is private, with public PyPI packages as the intended delivery channel. PgQueuer-derived code retains its [upstream license](https://github.com/componet-architecture/python-ddd-framework/blob/main/src/python_ddd_framework/background_jobs/pgqueuer/UPSTREAM_LICENSE.txt).
479
+
480
+ ## Consumer layout migration (0.4)
481
+
482
+ Move an existing application's Python project files, configuration, source, tests, lockfile, vendor wheels, and deployment files into `backend/`; keep application documentation and consumer-owned `scripts/` at the root. Recreate `.venv` with `uv sync --project backend` instead of moving an environment. Update relative script/deployment paths and module README links. Keep portable Python declarations in `backend/.python-version` and `backend/pyproject.toml`. Use installed `pddd` from any application directory, or `uv run pddd` inside `backend/`. Module aliases remain standard entry points and runtime types remain `AppModule`; template selection adds no registration or compatibility path.