python-ddd-framework 0.3.2__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/PKG-INFO +139 -44
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/README.md +137 -43
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/pyproject.toml +2 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/pyproject.toml.orig +3 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/__init__.py +139 -21
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/application/builder.py +23 -78
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/application/composition.py +4 -22
- python_ddd_framework-0.4.0/src/python_ddd_framework/application/runtime.py +354 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/application/state.py +7 -75
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/application_services/__init__.py +5 -21
- python_ddd_framework-0.3.2/src/python_ddd_framework/services/application_bindings.py → python_ddd_framework-0.4.0/src/python_ddd_framework/application_services/bindings.py +52 -9
- python_ddd_framework-0.4.0/src/python_ddd_framework/application_services/catalog.py +248 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/application_services/contracts.py +14 -13
- python_ddd_framework-0.4.0/src/python_ddd_framework/application_services/dispatcher.py +173 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/application_services/invocation.py +126 -7
- python_ddd_framework-0.4.0/src/python_ddd_framework/application_services/module.py +168 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/application_services/pagination.py +21 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/auditing/control.py +1 -1
- python_ddd_framework-0.4.0/src/python_ddd_framework/auditing/module.py +15 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/authorization/__init__.py +2 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/authorization/contracts.py +7 -2
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/authorization/definitions.py +5 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/authorization/module.py +40 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/authorization/options.py +7 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_execution/child.py +13 -3
- python_ddd_framework-0.4.0/src/python_ddd_framework/background_execution/declarations.py +45 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_execution/lifecycle.py +12 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/background_execution/module.py +116 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/catalog.py +59 -42
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/contracts.py +16 -19
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/pgqueuer/enqueue.py +4 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/pgqueuer/module.py +2 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/pgqueuer/runtime.py +7 -7
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_workers/catalog.py +23 -36
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_workers/contracts.py +3 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_workers/execution.py +1 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_workers/runtime.py +38 -1
- python_ddd_framework-0.4.0/src/python_ddd_framework/caching/__init__.py +12 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/caching/contracts.py +71 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/caching/errors.py +0 -7
- python_ddd_framework-0.4.0/src/python_ddd_framework/caching/module.py +18 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/caching/naming.py +29 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/caching/options.py +38 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/caching/unit_of_work.py +46 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/cli/__init__.py +31 -6
- python_ddd_framework-0.4.0/src/python_ddd_framework/cli/project.py +131 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/cli/runtime.py +1 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/generation.py +75 -22
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/project_metadata.py +2 -4
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/basic/cookiecutter.json +4 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/README.md +45 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/__init__.py.jinja +0 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/conversion_service.py.jinja +7 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/module.py.jinja +38 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/__init__.py.jinja +0 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/default_conversion_service.py.jinja +10 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/cookiecutter.json +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/README.md +62 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/handler.py.jinja +45 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/payload.py.jinja +8 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/handler.py.jinja +35 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/payload.py.jinja +5 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/schedule.py.jinja +15 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/order_maintenance_worker.py.jinja +28 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/order_statistics_worker.py.jinja +26 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/order_cache.py.jinja +9 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/statistics_cache.py.jinja +9 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers/order_changed_handler.py.jinja +23 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/__init__.py.jinja +1 -0
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration.py.jinja → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/order_integration_service.py.jinja +8 -2
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/order_observation_handler.py.jinja +16 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services/order_reporting_service.py.jinja +16 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors/order_timing_interceptor.py.jinja +17 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/module.py.jinja +115 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options/__init__.py.jinja +1 -0
- 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.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options/order_options.py.jinja +1 -1
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_approval_service.py.jinja +65 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_management_service.py.jinja +35 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_query_service.py.jinja +41 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers/approval_setting_observer.py.jinja +17 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/approve_order.py.jinja +6 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/create_order.py.jinja +7 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services/order_reporting_service.py.jinja +7 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/module.py.jinja +47 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_approval_service.py.jinja +13 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_management_service.py.jinja +10 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_query_service.py.jinja +12 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/order_statistics_snapshot.py.jinja +9 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/order_view.py.jinja +12 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities/__init__.py.jinja +1 -0
- 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.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities/order.py.jinja +10 -18
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events/order_changed.py.jinja +13 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/module.py.jinja +49 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories/order_repository.py.jinja +17 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding/order_seed_contributor.py.jinja +22 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services/order_approval_service.py.jinja +23 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings/__init__.py.jinja +1 -0
- 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.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings/approval_settings.py.jinja +3 -2
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects/order_title.py.jinja +10 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants/order_constants.py.jinja +3 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums/order_status.py.jinja +6 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors/order_errors.py.jinja +11 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/order_messages.py.jinja +26 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/order_observation.py.jinja +13 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/module.py.jinja +46 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/__init__.py.jinja +1 -0
- 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.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/order_permission_provider.py.jinja +6 -2
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/order_permissions.py.jinja +7 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/value_objects/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/value_objects/money.py.jinja +18 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters/export_filter.py.jinja +15 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models/refresh_orders.py.jinja +5 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/module.py.jinja +103 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers/__init__.py.jinja +1 -0
- 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.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers/order_files.py.jinja +23 -20
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets/order_socket.py.jinja +44 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/migrations/__init__.py.jinja +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/__init__.py.jinja +1 -0
- 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.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/base.py.jinja +1 -1
- 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.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/order_model.py.jinja +7 -3
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/module.py.jinja +63 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/order_repository.py.jinja +79 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/__init__.py.jinja +1 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/test_domain.py.jinja +4 -3
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/project/cookiecutter.json +1 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/AGENTS.md +16 -3
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/README.md +29 -22
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/app.development.yaml.jinja +2 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/pyproject.toml.jinja +1 -1
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/src/host/main.py.jinja +2 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/src/host/module.py.jinja +40 -3
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/architecture.md +114 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/development.md +296 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/scripts/.gitkeep +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/distributed_lock/contracts.py +4 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/domain/__init__.py +2 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/domain/services.py +11 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/errors/business.py +10 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/errors/lifecycle.py +3 -31
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/events/__init__.py +5 -2
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/events/aggregate.py +3 -3
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/events/catalog.py +12 -11
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/events/contracts.py +6 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/events/contribution.py +1 -52
- python_ddd_framework-0.4.0/src/python_ddd_framework/events/entities.py +23 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/events/module.py +97 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/events/runtime.py +80 -29
- python_ddd_framework-0.4.0/src/python_ddd_framework/events/subscription.py +36 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/events/unit_of_work.py +25 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/extensions/__init__.py +22 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/extensions/catalog.py +198 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/extensions/contracts.py +85 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/extensions/models.py +142 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/extensions/module.py +21 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/__init__.py +2 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/action.py +1 -2
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/adapter.py +16 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/application_services.py +43 -25
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/background.py +2 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/contracts.py +26 -8
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/health.py +1 -1
- python_ddd_framework-0.4.0/src/python_ddd_framework/fastapi/module.py +14 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/parameters.py +3 -18
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/realtime/connection.py +10 -7
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/realtime/module.py +3 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/realtime/runtime.py +10 -24
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/request_context.py +2 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/routing.py +2 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/server.py +8 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/settings.py +2 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/hosted_services/bridge.py +20 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/hosted_services/catalog.py +6 -16
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/hosted_services/contracts.py +4 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/hosted_services/declarations.py +15 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/hosted_services/module.py +69 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/hosted_services/runtime.py +30 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/__init__.py +24 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/application.py +38 -90
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/contracts.py +181 -16
- python_ddd_framework-0.4.0/src/python_ddd_framework/identity/http_api.py +167 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/identity/management.py +166 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/module.py +12 -4
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/services.py +29 -16
- python_ddd_framework-0.4.0/src/python_ddd_framework/identity/sqlalchemy/migrations/0003_extra_properties.py +26 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/identity/sqlalchemy/migrations/0004_concurrency_version.py +29 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/sqlalchemy/models.py +21 -2
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/sqlalchemy/module.py +11 -2
- python_ddd_framework-0.4.0/src/python_ddd_framework/identity/sqlalchemy/repository.py +458 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/identity/sqlalchemy/session_security.py +88 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/identity/sqlalchemy/stores.py +305 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/tokens.py +2 -5
- python_ddd_framework-0.3.2/src/python_ddd_framework/application_services/validation.py → python_ddd_framework-0.4.0/src/python_ddd_framework/invocation/arguments.py +8 -6
- python_ddd_framework-0.4.0/src/python_ddd_framework/invocation/contribution.py +61 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/invocation/dispatcher.py +291 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/invocation/entries.py +31 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/invocation/entrypoints.py +126 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/application_services → python_ddd_framework-0.4.0/src/python_ddd_framework/invocation}/execution.py +8 -5
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/invocation/function_runtime.py +3 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/invocation/interception.py +113 -42
- {python_ddd_framework-0.3.2/src/python_ddd_framework/application_services → python_ddd_framework-0.4.0/src/python_ddd_framework/invocation}/interceptors.py +2 -2
- python_ddd_framework-0.4.0/src/python_ddd_framework/invocation/managed_proxy.py +116 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/invocation/managed_services.py +250 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/invocation/methods.py +345 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/invocation/module.py +113 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/application_services → python_ddd_framework-0.4.0/src/python_ddd_framework/invocation}/policies.py +8 -1
- python_ddd_framework-0.4.0/src/python_ddd_framework/invocation/validation.py +25 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/lifecycle/__init__.py +2 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/lifecycle/composition.py +5 -2
- python_ddd_framework-0.4.0/src/python_ddd_framework/lifecycle/participants.py +33 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/messaging/__init__.py +25 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/messaging/channel.py +205 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/messaging/contracts.py +69 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/messaging/module.py +101 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/messaging/options.py +13 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/messaging/receipt.py +27 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/messaging/runtime.py +124 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/modularity/__init__.py +11 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/modularity/contracts.py +47 -16
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/modularity/discovery.py +21 -2
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/modularity/graph.py +45 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/modularity/registry.py +83 -3
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/notifications/__init__.py +2 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/notifications/catalog.py +3 -2
- python_ddd_framework-0.4.0/src/python_ddd_framework/notifications/declarations.py +18 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/notifications/module.py +21 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/observability/logging.py +3 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/observability/tracing.py +3 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/options/contribution.py +12 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/options/registry.py +44 -11
- python_ddd_framework-0.4.0/src/python_ddd_framework/py.typed +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/realtime/__init__.py +2 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/realtime/contracts.py +3 -7
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/realtime/messages.py +26 -1
- python_ddd_framework-0.4.0/src/python_ddd_framework/redis/cache.py +243 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/redis/cache_scripts.py +40 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/redis/distributed_lock.py +10 -2
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/redis/module.py +13 -4
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/redis/notifications.py +5 -2
- python_ddd_framework-0.4.0/src/python_ddd_framework/redis/runtime.py +38 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/seeding/__init__.py +13 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/seeding/contracts.py +45 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/seeding/module.py +73 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/seeding/runtime.py +63 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/arbitration.py +23 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/binding.py +2 -3
- python_ddd_framework-0.4.0/src/python_ddd_framework/services/composition.py +108 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/contribution.py +44 -54
- python_ddd_framework-0.4.0/src/python_ddd_framework/services/convention.py +173 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/fixed_lifetime.py +12 -15
- python_ddd_framework-0.4.0/src/python_ddd_framework/services/framework_provider.py +23 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/native_graph.py +35 -60
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/provider.py +59 -4
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/repository.py +6 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/services/runtime.py +216 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/catalog.py +5 -4
- python_ddd_framework-0.4.0/src/python_ddd_framework/settings/declarations.py +18 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/definitions.py +5 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/manager.py +1 -1
- python_ddd_framework-0.4.0/src/python_ddd_framework/settings/module.py +59 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/notifications.py +4 -2
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/refresh_module.py +9 -2
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/sqlalchemy/module.py +2 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/__init__.py +12 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/env.py +1 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/auditing.py +7 -1
- python_ddd_framework-0.4.0/src/python_ddd_framework/sqlalchemy/extensions.py +186 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/metadata.py +110 -6
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/migration.py +61 -8
- python_ddd_framework-0.4.0/src/python_ddd_framework/sqlalchemy/migration_operations.py +86 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/module.py +14 -11
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/module_migration.py +71 -3
- python_ddd_framework-0.4.0/src/python_ddd_framework/sqlalchemy/repository.py +237 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/session_provider.py +14 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/testing/runtime.py +5 -4
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/unit_of_work/__init__.py +2 -1
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/unit_of_work/contracts.py +6 -7
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/unit_of_work/errors.py +11 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/unit_of_work/lifecycle.py +19 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/unit_of_work/manager.py +86 -32
- python_ddd_framework-0.4.0/src/python_ddd_framework/unit_of_work/module.py +61 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/unit_of_work/options.py +7 -1
- python_ddd_framework-0.4.0/src/python_ddd_framework/validation/__init__.py +1 -0
- python_ddd_framework-0.4.0/src/python_ddd_framework/validation/models.py +37 -0
- python_ddd_framework-0.3.2/src/python_ddd_framework/application/runtime.py +0 -549
- python_ddd_framework-0.3.2/src/python_ddd_framework/application_services/catalog.py +0 -500
- python_ddd_framework-0.3.2/src/python_ddd_framework/application_services/dispatcher.py +0 -423
- python_ddd_framework-0.3.2/src/python_ddd_framework/application_services/seeding.py +0 -72
- python_ddd_framework-0.3.2/src/python_ddd_framework/background_execution/module.py +0 -10
- python_ddd_framework-0.3.2/src/python_ddd_framework/caching/__init__.py +0 -11
- python_ddd_framework-0.3.2/src/python_ddd_framework/caching/catalog.py +0 -73
- python_ddd_framework-0.3.2/src/python_ddd_framework/caching/contracts.py +0 -73
- python_ddd_framework-0.3.2/src/python_ddd_framework/cli/project.py +0 -69
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/cookiecutter.json +0 -1
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/README.md +0 -70
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/cache.py.jinja +0 -10
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/events.py.jinja +0 -24
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/module.py.jinja +0 -20
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/orders.py.jinja +0 -83
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/tasks.py.jinja +0 -84
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/module.py.jinja +0 -10
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/orders.py.jinja +0 -35
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/module.py.jinja +0 -10
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repository.py.jinja +0 -14
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding.py.jinja +0 -19
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/definitions.py.jinja +0 -24
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/module.py.jinja +0 -7
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/module.py.jinja +0 -25
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/realtime.py.jinja +0 -36
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/migrations/__init__.py.jinja +0 -1
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/module.py.jinja +0 -26
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/orders.py.jinja +0 -49
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/architecture.md +0 -84
- python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/development.md +0 -185
- python_ddd_framework-0.3.2/src/python_ddd_framework/identity/http_api.py +0 -90
- python_ddd_framework-0.3.2/src/python_ddd_framework/identity/sqlalchemy/stores.py +0 -526
- python_ddd_framework-0.3.2/src/python_ddd_framework/invocation/entries.py +0 -54
- python_ddd_framework-0.3.2/src/python_ddd_framework/redis/runtime.py +0 -116
- python_ddd_framework-0.3.2/src/python_ddd_framework/services/convention.py +0 -301
- python_ddd_framework-0.3.2/src/python_ddd_framework/services/framework_provider.py +0 -178
- python_ddd_framework-0.3.2/src/python_ddd_framework/services/runtime.py +0 -302
- python_ddd_framework-0.3.2/src/python_ddd_framework/settings/module.py +0 -10
- python_ddd_framework-0.3.2/src/python_ddd_framework/sqlalchemy/repository.py +0 -33
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/LICENSE +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/application/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/application/build_spec.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/application/runtime_hooks.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/application_services/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/auditing/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/auditing/contracts.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/auditing/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/auditing/sqlalchemy/migrations/0001_auditing.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/auditing/sqlalchemy/migrations/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/auditing/sqlalchemy/models.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/auditing/sqlalchemy/module.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/auditing/sqlalchemy/store.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/authorization/catalog.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/authorization/definition_discovery.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/authorization/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_execution/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_execution/application.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_execution/contracts.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_execution/local.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_execution/locks.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_execution/management.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_execution/permissions.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_execution/processes.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/declaration.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/execution.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/pgqueuer/UPSTREAM_LICENSE.txt +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/pgqueuer/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/0001_pgqueuer_1_3_2.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/pgqueuer/options.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/pgqueuer/sql/pgqueuer_1_3_2_install.sql +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_jobs/pgqueuer/supervision.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_workers/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/background_workers/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/cli/development.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/cli/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/cli/inspection.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/composition.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/contracts.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/dotenv_source.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/environment_source.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/immutability.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/input_shape.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/merge.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/root.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/sources.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/values.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/configuration/yaml_source.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/source.py +0 -0
- /python_ddd_framework-0.3.2/src/python_ddd_framework/py.typed → /python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/__init__.py.jinja +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/__init__.py.jinja +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/__init__.py.jinja +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/__init__.py.jinja +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/__init__.py.jinja +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/__init__.py.jinja +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/__init__.py.jinja +0 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/.dockerignore +0 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/.gitignore +0 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/.python-version +0 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/Dockerfile +0 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/compose.dev.yaml.jinja +0 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/compose.production.yaml.jinja +0 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/src/host/__init__.py.jinja +0 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/tests/conftest.py.jinja +0 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}} → python_ddd_framework-0.4.0/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend}/tests/host/test_http.py.jinja +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/developer_kit/wiring.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/diagnostics/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/diagnostics/journal.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/diagnostics/model.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/diagnostics/source.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/distributed_lock/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/distributed_lock/options.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/domain/aggregates.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/domain/entities.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/domain/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/domain/value_objects.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/errors/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/errors/base.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/errors/configuration.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/errors/diagnostics.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/errors/modularity.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/errors/services.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/events/discovery.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/events/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/filters.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/http.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/http_router.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/manual_action.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/middleware.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/realtime/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/realtime/authentication.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/realtime/options.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/route_integrity.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/tracing.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/transfer.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/upload_limits.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/fastapi/uploads.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/hosted_services/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/hosted_services/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/hosted_services/options.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/hosted_services/state.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/hosting/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/hosting/instance.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/passwords.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/permissions.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0001_identity.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0002_physical_delete.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/invocation/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/invocation/callables.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/invocation/contracts.py +0 -0
- {python_ddd_framework-0.3.2/src/python_ddd_framework/application_services → python_ddd_framework-0.4.0/src/python_ddd_framework/invocation}/signature.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/lifecycle/context.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/lifecycle/runtime.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/lifecycle/state.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/modularity/selection.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/notifications/contracts.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/observability/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/observability/context.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/observability/export.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/observability/formatting.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/observability/options.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/options/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/options/aliases.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/options/immutability.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/options/input_keys.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/options/issues.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/options/models.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/options/schema.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/options/validation.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/realtime/diagnostics.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/redis/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/redis/lease_lock.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/redis/notification_runtime.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/redis/options.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/convention_contracts.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/exposure.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/services/registration.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/application.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/binding.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/changes.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/contracts.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/definition_discovery.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/handlers.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/management.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/permissions.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/provider.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/refresh.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0001_settings.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0002_physical_delete.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0003_version_tokens.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/sqlalchemy/models.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/sqlalchemy/store.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/store.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/settings/values.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/__init__.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/script.py.mako +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/errors.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/migration_options.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/options.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/runtime.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/src/python_ddd_framework/sqlalchemy/unit_of_work.py +0 -0
- {python_ddd_framework-0.3.2 → python_ddd_framework-0.4.0}/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
|
+
Version: 0.4.0
|
|
4
4
|
Summary: Modular DDD application framework with project CLI and bundled templates
|
|
5
5
|
License-Expression: LicenseRef-Proprietary
|
|
6
6
|
License-File: LICENSE
|
|
@@ -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.
|
|
89
|
+
> **Version 0.4:** This release introduces capability-based composition, current service and Identity APIs, and the `backend/` consumer layout with basic/DDD module templates. Existing applications must apply the migration instructions below. 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
|
|
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
|
-
|
|
123
|
-
|
|
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
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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
|
-
|
|
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 **`
|
|
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
|
-
| `
|
|
173
|
-
| `
|
|
174
|
-
| `
|
|
175
|
-
| `
|
|
176
|
-
| `
|
|
177
|
-
| `
|
|
178
|
-
| `
|
|
179
|
-
| `
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
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.
|
|
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 `
|
|
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
|
|
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,14 @@ 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
|
+
#### Additional fixes in 0.4.0
|
|
372
|
+
|
|
373
|
+
`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.
|
|
374
|
+
|
|
375
|
+
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.
|
|
376
|
+
|
|
377
|
+
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.
|
|
378
|
+
|
|
288
379
|
<a id="框架更名迁移未发布"></a>
|
|
289
380
|
|
|
290
381
|
<details>
|
|
@@ -377,3 +468,7 @@ Generated applications include a self-contained English README, `AGENTS.md`, arc
|
|
|
377
468
|
## License
|
|
378
469
|
|
|
379
470
|
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).
|
|
471
|
+
|
|
472
|
+
## Consumer layout migration (0.4)
|
|
473
|
+
|
|
474
|
+
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.
|