python-ddd-framework 0.5.1__tar.gz → 0.6.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.5.1 → python_ddd_framework-0.6.0}/PKG-INFO +74 -4
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/README.md +73 -3
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/pyproject.toml +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/pyproject.toml.orig +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application_services/bindings.py +0 -64
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application_services/dispatcher.py +1 -1
- python_ddd_framework-0.6.0/src/python_ddd_framework/application_services/invocation.py +57 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application_services/module.py +16 -5
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/authorization/module.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/execution.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/pgqueuer/enqueue.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_workers/execution.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_workers/runtime.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/caching/unit_of_work.py +2 -4
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/cli/project.py +11 -10
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/generation.py +46 -36
- python_ddd_framework-0.6.0/src/python_ddd_framework/developer_kit/publication.py +442 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/README.md +40 -2
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/order_repository.py.jinja +3 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/AGENTS.md +14 -3
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/architecture.md +16 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/development.md +63 -2
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/diagnostics/source.py +14 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/domain/aggregates.py +5 -12
- python_ddd_framework-0.6.0/src/python_ddd_framework/domain/event_values.py +124 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/runtime.py +2 -7
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/unit_of_work.py +1 -4
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/action.py +2 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/adapter.py +11 -117
- python_ddd_framework-0.6.0/src/python_ddd_framework/fastapi/application_services.py +287 -0
- python_ddd_framework-0.6.0/src/python_ddd_framework/fastapi/error_handlers.py +128 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/realtime/runtime.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/request_context.py +2 -5
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/routing.py +4 -10
- python_ddd_framework-0.6.0/src/python_ddd_framework/fastapi/service_endpoints.py +182 -0
- python_ddd_framework-0.6.0/src/python_ddd_framework/fastapi/service_routes.py +237 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/transfer.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosted_services/bridge.py +2 -6
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosted_services/runtime.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/__init__.py +21 -13
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/application.py +12 -66
- python_ddd_framework-0.6.0/src/python_ddd_framework/identity/contracts.py +75 -0
- python_ddd_framework-0.6.0/src/python_ddd_framework/identity/domain_rules.py +17 -0
- python_ddd_framework-0.6.0/src/python_ddd_framework/identity/dtos.py +152 -0
- python_ddd_framework-0.6.0/src/python_ddd_framework/identity/extensions.py +9 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/management.py +28 -25
- python_ddd_framework-0.6.0/src/python_ddd_framework/identity/models.py +86 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/module.py +3 -4
- python_ddd_framework-0.6.0/src/python_ddd_framework/identity/options.py +54 -0
- python_ddd_framework-0.6.0/src/python_ddd_framework/identity/seeding.py +59 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/services.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/module.py +9 -6
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/repository.py +4 -5
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/session_security.py +1 -3
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/stores.py +35 -47
- python_ddd_framework-0.6.0/src/python_ddd_framework/identity/stores.py +120 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/tokens.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/callables.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/dispatcher.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/entrypoints.py +2 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/function_runtime.py +2 -2
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/interception.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/managed_proxy.py +2 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/managed_services.py +8 -14
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/methods.py +2 -7
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/module.py +1 -1
- python_ddd_framework-0.5.1/src/python_ddd_framework/application_services/invocation.py → python_ddd_framework-0.6.0/src/python_ddd_framework/invocation/runtime.py +6 -136
- python_ddd_framework-0.6.0/src/python_ddd_framework/invocation/scopes.py +91 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/messaging/channel.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/messaging/runtime.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/modularity/discovery.py +2 -7
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/modularity/graph.py +2 -8
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/observability/logging.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/observability/tracing.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/redis/cache.py +2 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/redis/notification_runtime.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/arbitration.py +1 -20
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/composition.py +71 -2
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/provider.py +23 -1
- python_ddd_framework-0.6.0/src/python_ddd_framework/services/relocation.py +96 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/refresh.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/sqlalchemy/store.py +1 -1
- python_ddd_framework-0.6.0/src/python_ddd_framework/sqlalchemy/metadata.py +278 -0
- python_ddd_framework-0.6.0/src/python_ddd_framework/sqlalchemy/metadata_builder.py +234 -0
- python_ddd_framework-0.6.0/src/python_ddd_framework/sqlalchemy/metadata_fingerprint.py +108 -0
- python_ddd_framework-0.6.0/src/python_ddd_framework/sqlalchemy/metadata_ownership.py +73 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/migration.py +2 -1
- python_ddd_framework-0.6.0/src/python_ddd_framework/sqlalchemy/migration_sources.py +38 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/module.py +2 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/unit_of_work.py +1 -1
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/unit_of_work/contracts.py +68 -7
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/unit_of_work/manager.py +4 -7
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/unit_of_work/module.py +1 -1
- python_ddd_framework-0.5.1/src/python_ddd_framework/fastapi/application_services.py +0 -672
- python_ddd_framework-0.5.1/src/python_ddd_framework/identity/contracts.py +0 -448
- python_ddd_framework-0.5.1/src/python_ddd_framework/sqlalchemy/metadata.py +0 -680
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/LICENSE +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application/build_spec.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application/builder.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application/composition.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application/runtime.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application/runtime_hooks.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application/state.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application_services/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application_services/catalog.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application_services/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application_services/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/application_services/pagination.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/auditing/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/auditing/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/auditing/control.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/auditing/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/auditing/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/auditing/sqlalchemy/migrations/0001_auditing.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/auditing/sqlalchemy/migrations/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/auditing/sqlalchemy/models.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/auditing/sqlalchemy/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/auditing/sqlalchemy/store.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/authorization/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/authorization/catalog.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/authorization/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/authorization/definition_discovery.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/authorization/definitions.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/authorization/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/authorization/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/application.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/child.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/declarations.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/lifecycle.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/local.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/locks.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/management.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/permissions.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_execution/processes.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/catalog.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/declaration.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/pgqueuer/UPSTREAM_LICENSE.txt +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/pgqueuer/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/0001_pgqueuer_1_3_2.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/pgqueuer/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/pgqueuer/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/pgqueuer/runtime.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/pgqueuer/sql/pgqueuer_1_3_2_install.sql +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_jobs/pgqueuer/supervision.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_workers/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_workers/catalog.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_workers/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/background_workers/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/caching/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/caching/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/caching/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/caching/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/caching/naming.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/caching/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/cli/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/cli/development.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/cli/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/cli/inspection.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/cli/runtime.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/composition.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/dotenv_source.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/environment_source.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/immutability.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/input_shape.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/merge.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/root.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/sources.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/values.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/configuration/yaml_source.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/project_metadata.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/source.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/basic/cookiecutter.json +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/README.md +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/conversion_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/module.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/default_conversion_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/cookiecutter.json +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/handler.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_approval/payload.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/handler.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/payload.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/order_statistics/schedule.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/order_maintenance_worker.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/order_statistics_worker.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/order_cache.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/statistics_cache.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers/order_changed_handler.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/order_integration_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/order_observation_handler.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services/order_reporting_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors/order_timing_interceptor.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/module.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options/order_options.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_approval_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_management_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/order_query_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers/approval_setting_observer.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/approve_order.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/create_order.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/integration_services/order_reporting_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/module.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_approval_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_management_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/order_query_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/order_statistics_snapshot.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/order_view.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities/order.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events/order_changed.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/module.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories/order_repository.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding/order_seed_contributor.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services/order_approval_service.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings/approval_settings.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects/order_title.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants/order_constants.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums/order_status.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors/order_errors.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/order_messages.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/order_observation.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/module.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/order_permission_provider.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/order_permissions.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/value_objects/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/value_objects/money.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters/export_filter.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models/refresh_orders.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/module.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers/order_files.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets/order_socket.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/migrations/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/base.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/order_model.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/module.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/test_domain.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/cookiecutter.json +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/README.md +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.dockerignore +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.gitignore +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.python-version +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/Dockerfile +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/app.development.yaml.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/compose.dev.yaml.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/compose.production.yaml.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/pyproject.toml.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/__init__.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/main.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/module.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/tests/conftest.py.jinja +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.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.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/scripts/.gitkeep +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/developer_kit/wiring.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/diagnostics/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/diagnostics/journal.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/diagnostics/model.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/distributed_lock/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/distributed_lock/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/distributed_lock/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/domain/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/domain/entities.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/domain/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/domain/services.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/domain/value_objects.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/errors/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/errors/base.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/errors/business.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/errors/configuration.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/errors/diagnostics.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/errors/lifecycle.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/errors/modularity.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/errors/services.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/aggregate.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/catalog.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/contribution.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/discovery.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/entities.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/events/subscription.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/extensions/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/extensions/catalog.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/extensions/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/extensions/models.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/extensions/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/background.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/filters.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/health.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/http.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/http_router.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/manual_action.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/middleware.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/parameters.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/realtime/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/realtime/authentication.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/realtime/connection.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/realtime/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/realtime/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/route_integrity.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/server.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/settings.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/tracing.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/upload_limits.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/fastapi/uploads.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosted_services/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosted_services/catalog.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosted_services/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosted_services/declarations.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosted_services/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosted_services/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosted_services/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosted_services/state.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosting/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/hosting/instance.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/http_api.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/passwords.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/permissions.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0001_identity.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0002_physical_delete.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0003_extra_properties.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0004_concurrency_version.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/identity/sqlalchemy/models.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/arguments.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/contribution.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/entries.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/execution.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/interceptors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/policies.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/signature.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/invocation/validation.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/lifecycle/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/lifecycle/composition.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/lifecycle/context.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/lifecycle/participants.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/lifecycle/runtime.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/lifecycle/state.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/messaging/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/messaging/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/messaging/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/messaging/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/messaging/receipt.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/modularity/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/modularity/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/modularity/registry.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/modularity/selection.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/notifications/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/notifications/catalog.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/notifications/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/notifications/declarations.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/notifications/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/observability/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/observability/context.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/observability/export.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/observability/formatting.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/observability/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/options/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/options/aliases.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/options/contribution.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/options/immutability.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/options/input_keys.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/options/issues.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/options/models.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/options/registry.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/options/schema.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/options/validation.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/py.typed +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/realtime/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/realtime/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/realtime/diagnostics.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/realtime/messages.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/redis/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/redis/cache_scripts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/redis/distributed_lock.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/redis/lease_lock.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/redis/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/redis/notifications.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/redis/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/redis/runtime.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/seeding/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/seeding/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/seeding/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/seeding/runtime.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/binding.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/contribution.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/convention.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/convention_contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/exposure.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/fixed_lifetime.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/framework_provider.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/native_graph.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/registration.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/repository.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/services/runtime.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/application.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/binding.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/catalog.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/changes.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/contracts.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/declarations.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/definition_discovery.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/definitions.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/handlers.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/management.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/manager.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/notifications.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/permissions.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/provider.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/refresh_module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0001_settings.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0002_physical_delete.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0003_version_tokens.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/sqlalchemy/models.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/sqlalchemy/module.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/store.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/settings/values.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/env.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/script.py.mako +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/auditing.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/extensions.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/migration_operations.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/migration_options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/module_migration.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/repository.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/runtime.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/sqlalchemy/session_provider.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/testing/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/testing/runtime.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/unit_of_work/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/unit_of_work/errors.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/unit_of_work/lifecycle.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/unit_of_work/options.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/validation/__init__.py +0 -0
- {python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/validation/models.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-ddd-framework
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.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
|
|
@@ -86,7 +86,7 @@ Runtime integrations ship in the base package; the Host explicitly enables the m
|
|
|
86
86
|
|
|
87
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.
|
|
88
88
|
|
|
89
|
-
> **Version 0.
|
|
89
|
+
> **Version 0.6:** This version separates Identity credential and management contracts, enforces stable aggregate event values, corrects joined Unit of Work diagnostics, and adds recoverable CLI module publication. Apply the migration instructions below; previous Identity imports have no compatibility aliases. 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.
|
|
90
90
|
|
|
91
91
|
### 1. Install the CLI and create a project
|
|
92
92
|
|
|
@@ -194,6 +194,34 @@ pddd db status --module orders --environment production
|
|
|
194
194
|
|
|
195
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.
|
|
196
196
|
|
|
197
|
+
### Recovering a failed module addition
|
|
198
|
+
|
|
199
|
+
`add module` prints a recovery directory under the identified backend's
|
|
200
|
+
`.python-ddd-framework/generation/<operation-id>/`. It retains original bytes, proposed
|
|
201
|
+
startup/metadata files, a module file manifest, step records and `uv-sync.log`. The rendered
|
|
202
|
+
template and any unfinished sibling copies are retained too. Open that operation's
|
|
203
|
+
`RECOVERY.md` for its paths and a copyable, read-only inspection procedure.
|
|
204
|
+
|
|
205
|
+
Stop other generators and editors before recovery. Compare the actual files with the
|
|
206
|
+
recorded digests: continue only from the recorded original content, or restore an original
|
|
207
|
+
file only while the target still matches this operation's proposed content. Review any
|
|
208
|
+
other content manually. Keep generated directories and markers until you explicitly decide
|
|
209
|
+
what to do with them; rerunning `add module` does not repair a partial publication.
|
|
210
|
+
|
|
211
|
+
When all project files match the proposed contents but installation failed, use the
|
|
212
|
+
independent sync script in that operation's `RECOVERY.md`. Run it with `python -I` as
|
|
213
|
+
instructed. It clears the CLI's recorded Python/uv environment overrides before running
|
|
214
|
+
`uv sync` in the identified backend, including overrides set after generation. A bare
|
|
215
|
+
`uv sync --directory` still inherits environment overrides and can select another
|
|
216
|
+
virtual environment. The retry preserves your shell environment and the original records.
|
|
217
|
+
|
|
218
|
+
File publication and installation have separate results. An interrupted or missing step
|
|
219
|
+
record requires checking the files; it does not prove that the write failed. The CLI does
|
|
220
|
+
not automatically restore, move or delete the failure site, roll back the environment or
|
|
221
|
+
lockfile, or guarantee a transaction across files or power-loss recovery.
|
|
222
|
+
|
|
223
|
+
### Project command environment
|
|
224
|
+
|
|
197
225
|
`db` and `inspect` use `--environment`, then `PYTHON_DDD_FRAMEWORK_ENVIRONMENT`, then `development`. `dev` always selects development, and `dev-init` is restricted to development infrastructure.
|
|
198
226
|
|
|
199
227
|
`inspect` builds and closes the application without starting services or running migrations. Its output describes a newly composed Host, not a running process. Configuration output contains input values and their sources; it does not include Options defaults or later module contributions.
|
|
@@ -290,6 +318,17 @@ The current contracts are in [architecture](https://github.com/componet-architec
|
|
|
290
318
|
- 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
319
|
- 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
320
|
|
|
321
|
+
## Aggregate event values (0.6)
|
|
322
|
+
|
|
323
|
+
`AggregateRoot.raise_local_event` now checks nested field values before enqueueing. Events must be frozen dataclass instances or frozen Pydantic models whose fields follow the [aggregate event value contract](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/architecture.md#聚合事件值).
|
|
324
|
+
|
|
325
|
+
- Replace mutable containers with tuples, frozensets, or explicit frozen value records. Decorating a mutable-container subclass with `frozen=True` does not make it an accepted event value. Map entity references to the IDs and values the event needs at the publishing point. A `MappingProxyType` still exposes changes to its backing dictionary and is rejected.
|
|
326
|
+
- Remove private, cached, or undeclared instance state from event records. Pydantic models with `extra="allow"` are rejected. Dataclass subclasses must themselves be decorated with `frozen=True`.
|
|
327
|
+
- Normalize database-driver scalar subclasses at the repository mapping boundary. For example, rebuild an asyncpg UUID as `UUID(bytes=row.id.bytes)` before passing it to a domain aggregate; the event validator accepts native `uuid.UUID` values.
|
|
328
|
+
- Rejected events raise `TypeError` before altering the aggregate queue. Accepted events retain their identity; the framework does not copy or convert them. Direct `LocalEventBus.publish` and repository entity-change notifications retain their existing behavior.
|
|
329
|
+
|
|
330
|
+
Redis batch calls keep serial I/O to preserve first-error, cancellation, and expiry side effects. Cache keys, entry encoding, and UoW pending-write behavior retain their existing contracts.
|
|
331
|
+
|
|
293
332
|
## Message processing (0.4)
|
|
294
333
|
|
|
295
334
|
Opt in with `MessagingModule`, `MessageChannelDefinition[T]`, `MessageHandler[T]` and the
|
|
@@ -335,6 +374,31 @@ Slice 7 adds user/role management and an application-local authorization switch.
|
|
|
335
374
|
|
|
336
375
|
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
376
|
|
|
377
|
+
## Identity contract refactor (0.6)
|
|
378
|
+
|
|
379
|
+
Version 0.6 replaces `IdentityRepository` with two independent contracts exported from `python_ddd_framework.identity`:
|
|
380
|
+
|
|
381
|
+
- `IdentityCredentialStore`: `get_user` and `set_password`, including the existing concurrency version and expected password hash.
|
|
382
|
+
- `IdentityManagementStore`: user/role creation, queries, edits, deletion and relationship updates. Password writes belong to the credential contract.
|
|
383
|
+
|
|
384
|
+
Authentication now receives `credentials`; management receives `store` and `credentials`; administrator seeding receives `store`. Update custom providers and directly constructed or subclassed defaults to these contracts. A shared implementation can use Dishka's native registration:
|
|
385
|
+
|
|
386
|
+
```python
|
|
387
|
+
from dishka import AnyOf, Provider, Scope
|
|
388
|
+
from python_ddd_framework.identity import IdentityCredentialStore, IdentityManagementStore
|
|
389
|
+
|
|
390
|
+
provider = Provider()
|
|
391
|
+
provider.provide(
|
|
392
|
+
MyIdentityStore,
|
|
393
|
+
provides=AnyOf[MyIdentityStore, IdentityCredentialStore, IdentityManagementStore],
|
|
394
|
+
scope=Scope.REQUEST,
|
|
395
|
+
)
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
`MyIdentityStore` is the consumer's implementation. The built-in SQLAlchemy provider registers its existing implementation this way. Providers may also implement and register the two contracts separately. Each implementation must keep the existing transaction and credential concurrency rules.
|
|
399
|
+
|
|
400
|
+
For direct submodule imports, use `identity.options`, `identity.dtos`, `identity.models`, `identity.stores`, and `identity.extensions`. `identity.contracts` owns application-service contracts and permission names. `IdentityAdminSeedContributor` is defined in `identity.seeding`, which `IdentityModule` scans. The former `IdentityRepository` export and old definition paths have no compatibility shims. This refactor changes no HTTP payload, token format, database schema or migration.
|
|
401
|
+
|
|
338
402
|
## Extension migration (0.4)
|
|
339
403
|
|
|
340
404
|
- 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.
|
|
@@ -368,6 +432,12 @@ During `0.x`, compatible fixes use a patch release; changes requiring consumer a
|
|
|
368
432
|
|
|
369
433
|
These notes remain the authoritative consumer migration instructions. Historical versions below refer to the former package name.
|
|
370
434
|
|
|
435
|
+
#### Unit of Work participant diagnostics (0.6)
|
|
436
|
+
|
|
437
|
+
An inner `begin()` that joins an existing Unit of Work now reads all transaction and cleanup facts from the owner. Completing or leaving the inner scope does not imply that the owner has committed or released its resources. Retained participant references continue to report the owner's latest outcome, including unknown commit results, saved batches and cleanup failures, while rejecting further operations after local completion or exit.
|
|
438
|
+
|
|
439
|
+
Do not use a participant's `resources_released` to detect exit from the inner scope; use the context manager boundary. Public types, signatures and provider hooks retain their existing contracts. This correction is introduced in 0.6.0.
|
|
440
|
+
|
|
371
441
|
#### Lifecycle shutdown migration (0.5)
|
|
372
442
|
|
|
373
443
|
Version 0.5.1 changes shutdown after the published 0.4.0 baseline. Custom `RuntimeParticipant` implementations must use the new global barriers: `quiesce` → `stopping(reason)` → `close_admission` → `drain` → `stop(reason)` → Module/container cleanup. Move accepted-work draining out of resource `stop`; keep dependencies alive until all drains complete. `prepare(bool)` still selects the startup mode.
|
|
@@ -455,7 +525,7 @@ Do not remove durable job payload versions merely because their Python APIs were
|
|
|
455
525
|
<details>
|
|
456
526
|
<summary>For maintainers: publishing a changed version</summary>
|
|
457
527
|
|
|
458
|
-
Routine code and documentation commits may retain the current version. Pushes to `main`
|
|
528
|
+
Routine code and documentation commits may retain the current version. Pull requests to `main` run build, static checks, and short architecture/typing/release-intent checks with read-only permissions. Pushes to `main` run the full release gates, including locked, lowest-direct, and highest allowed dependency samples, but skip publication unless the version increased across the push; initial creation of `main` publishes its current version. Manual workflow runs validate only. A failed run may be retried, but a later same-version push does not resume publication: changed contents require another version bump. Follow [release operations](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#发布操作) for publisher setup and retry boundaries. Dependency samples and current API/type checks do not establish backward compatibility or a cross-version upgrade guarantee.
|
|
459
529
|
|
|
460
530
|
</details>
|
|
461
531
|
|
|
@@ -471,7 +541,7 @@ The engineering guides below are maintained in Chinese in the private GitHub rep
|
|
|
471
541
|
| Check release evidence and remaining validation limits | [Status and validation](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/status.md) |
|
|
472
542
|
| Change the framework itself | [Contributor guidance](https://github.com/componet-architecture/python-ddd-framework/blob/main/AGENTS.md) and [focused reading paths](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/README.md#重构的最短阅读路径) |
|
|
473
543
|
|
|
474
|
-
Generated applications include a self-contained English README, `AGENTS.md`, architecture document, and development guide for their template version. `AGENTS.md`
|
|
544
|
+
Generated applications include a self-contained English README, `AGENTS.md`, architecture document, and development guide for their template version. `AGENTS.md` guides contributors from business rules and ownership to framework capability selection and verification. The development guide maps common tasks to framework capabilities and includes commands to locate the installed version's source and bundled examples; each DDD module README records the sample business model and traces approval through its owners. The application maintains these documents after generation; framework upgrades do not overwrite them. Existing applications can use their installed package's `developer_kit/templates` as a read-only reference when updating affected guidance, preserving their own business model and decisions.
|
|
475
545
|
|
|
476
546
|
## License
|
|
477
547
|
|
|
@@ -42,7 +42,7 @@ Runtime integrations ship in the base package; the Host explicitly enables the m
|
|
|
42
42
|
|
|
43
43
|
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.
|
|
44
44
|
|
|
45
|
-
> **Version 0.
|
|
45
|
+
> **Version 0.6:** This version separates Identity credential and management contracts, enforces stable aggregate event values, corrects joined Unit of Work diagnostics, and adds recoverable CLI module publication. Apply the migration instructions below; previous Identity imports have no compatibility aliases. 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.
|
|
46
46
|
|
|
47
47
|
### 1. Install the CLI and create a project
|
|
48
48
|
|
|
@@ -150,6 +150,34 @@ pddd db status --module orders --environment production
|
|
|
150
150
|
|
|
151
151
|
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.
|
|
152
152
|
|
|
153
|
+
### Recovering a failed module addition
|
|
154
|
+
|
|
155
|
+
`add module` prints a recovery directory under the identified backend's
|
|
156
|
+
`.python-ddd-framework/generation/<operation-id>/`. It retains original bytes, proposed
|
|
157
|
+
startup/metadata files, a module file manifest, step records and `uv-sync.log`. The rendered
|
|
158
|
+
template and any unfinished sibling copies are retained too. Open that operation's
|
|
159
|
+
`RECOVERY.md` for its paths and a copyable, read-only inspection procedure.
|
|
160
|
+
|
|
161
|
+
Stop other generators and editors before recovery. Compare the actual files with the
|
|
162
|
+
recorded digests: continue only from the recorded original content, or restore an original
|
|
163
|
+
file only while the target still matches this operation's proposed content. Review any
|
|
164
|
+
other content manually. Keep generated directories and markers until you explicitly decide
|
|
165
|
+
what to do with them; rerunning `add module` does not repair a partial publication.
|
|
166
|
+
|
|
167
|
+
When all project files match the proposed contents but installation failed, use the
|
|
168
|
+
independent sync script in that operation's `RECOVERY.md`. Run it with `python -I` as
|
|
169
|
+
instructed. It clears the CLI's recorded Python/uv environment overrides before running
|
|
170
|
+
`uv sync` in the identified backend, including overrides set after generation. A bare
|
|
171
|
+
`uv sync --directory` still inherits environment overrides and can select another
|
|
172
|
+
virtual environment. The retry preserves your shell environment and the original records.
|
|
173
|
+
|
|
174
|
+
File publication and installation have separate results. An interrupted or missing step
|
|
175
|
+
record requires checking the files; it does not prove that the write failed. The CLI does
|
|
176
|
+
not automatically restore, move or delete the failure site, roll back the environment or
|
|
177
|
+
lockfile, or guarantee a transaction across files or power-loss recovery.
|
|
178
|
+
|
|
179
|
+
### Project command environment
|
|
180
|
+
|
|
153
181
|
`db` and `inspect` use `--environment`, then `PYTHON_DDD_FRAMEWORK_ENVIRONMENT`, then `development`. `dev` always selects development, and `dev-init` is restricted to development infrastructure.
|
|
154
182
|
|
|
155
183
|
`inspect` builds and closes the application without starting services or running migrations. Its output describes a newly composed Host, not a running process. Configuration output contains input values and their sources; it does not include Options defaults or later module contributions.
|
|
@@ -246,6 +274,17 @@ The current contracts are in [architecture](https://github.com/componet-architec
|
|
|
246
274
|
- 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`.
|
|
247
275
|
- 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.
|
|
248
276
|
|
|
277
|
+
## Aggregate event values (0.6)
|
|
278
|
+
|
|
279
|
+
`AggregateRoot.raise_local_event` now checks nested field values before enqueueing. Events must be frozen dataclass instances or frozen Pydantic models whose fields follow the [aggregate event value contract](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/architecture.md#聚合事件值).
|
|
280
|
+
|
|
281
|
+
- Replace mutable containers with tuples, frozensets, or explicit frozen value records. Decorating a mutable-container subclass with `frozen=True` does not make it an accepted event value. Map entity references to the IDs and values the event needs at the publishing point. A `MappingProxyType` still exposes changes to its backing dictionary and is rejected.
|
|
282
|
+
- Remove private, cached, or undeclared instance state from event records. Pydantic models with `extra="allow"` are rejected. Dataclass subclasses must themselves be decorated with `frozen=True`.
|
|
283
|
+
- Normalize database-driver scalar subclasses at the repository mapping boundary. For example, rebuild an asyncpg UUID as `UUID(bytes=row.id.bytes)` before passing it to a domain aggregate; the event validator accepts native `uuid.UUID` values.
|
|
284
|
+
- Rejected events raise `TypeError` before altering the aggregate queue. Accepted events retain their identity; the framework does not copy or convert them. Direct `LocalEventBus.publish` and repository entity-change notifications retain their existing behavior.
|
|
285
|
+
|
|
286
|
+
Redis batch calls keep serial I/O to preserve first-error, cancellation, and expiry side effects. Cache keys, entry encoding, and UoW pending-write behavior retain their existing contracts.
|
|
287
|
+
|
|
249
288
|
## Message processing (0.4)
|
|
250
289
|
|
|
251
290
|
Opt in with `MessagingModule`, `MessageChannelDefinition[T]`, `MessageHandler[T]` and the
|
|
@@ -291,6 +330,31 @@ Slice 7 adds user/role management and an application-local authorization switch.
|
|
|
291
330
|
|
|
292
331
|
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.
|
|
293
332
|
|
|
333
|
+
## Identity contract refactor (0.6)
|
|
334
|
+
|
|
335
|
+
Version 0.6 replaces `IdentityRepository` with two independent contracts exported from `python_ddd_framework.identity`:
|
|
336
|
+
|
|
337
|
+
- `IdentityCredentialStore`: `get_user` and `set_password`, including the existing concurrency version and expected password hash.
|
|
338
|
+
- `IdentityManagementStore`: user/role creation, queries, edits, deletion and relationship updates. Password writes belong to the credential contract.
|
|
339
|
+
|
|
340
|
+
Authentication now receives `credentials`; management receives `store` and `credentials`; administrator seeding receives `store`. Update custom providers and directly constructed or subclassed defaults to these contracts. A shared implementation can use Dishka's native registration:
|
|
341
|
+
|
|
342
|
+
```python
|
|
343
|
+
from dishka import AnyOf, Provider, Scope
|
|
344
|
+
from python_ddd_framework.identity import IdentityCredentialStore, IdentityManagementStore
|
|
345
|
+
|
|
346
|
+
provider = Provider()
|
|
347
|
+
provider.provide(
|
|
348
|
+
MyIdentityStore,
|
|
349
|
+
provides=AnyOf[MyIdentityStore, IdentityCredentialStore, IdentityManagementStore],
|
|
350
|
+
scope=Scope.REQUEST,
|
|
351
|
+
)
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
`MyIdentityStore` is the consumer's implementation. The built-in SQLAlchemy provider registers its existing implementation this way. Providers may also implement and register the two contracts separately. Each implementation must keep the existing transaction and credential concurrency rules.
|
|
355
|
+
|
|
356
|
+
For direct submodule imports, use `identity.options`, `identity.dtos`, `identity.models`, `identity.stores`, and `identity.extensions`. `identity.contracts` owns application-service contracts and permission names. `IdentityAdminSeedContributor` is defined in `identity.seeding`, which `IdentityModule` scans. The former `IdentityRepository` export and old definition paths have no compatibility shims. This refactor changes no HTTP payload, token format, database schema or migration.
|
|
357
|
+
|
|
294
358
|
## Extension migration (0.4)
|
|
295
359
|
|
|
296
360
|
- 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.
|
|
@@ -324,6 +388,12 @@ During `0.x`, compatible fixes use a patch release; changes requiring consumer a
|
|
|
324
388
|
|
|
325
389
|
These notes remain the authoritative consumer migration instructions. Historical versions below refer to the former package name.
|
|
326
390
|
|
|
391
|
+
#### Unit of Work participant diagnostics (0.6)
|
|
392
|
+
|
|
393
|
+
An inner `begin()` that joins an existing Unit of Work now reads all transaction and cleanup facts from the owner. Completing or leaving the inner scope does not imply that the owner has committed or released its resources. Retained participant references continue to report the owner's latest outcome, including unknown commit results, saved batches and cleanup failures, while rejecting further operations after local completion or exit.
|
|
394
|
+
|
|
395
|
+
Do not use a participant's `resources_released` to detect exit from the inner scope; use the context manager boundary. Public types, signatures and provider hooks retain their existing contracts. This correction is introduced in 0.6.0.
|
|
396
|
+
|
|
327
397
|
#### Lifecycle shutdown migration (0.5)
|
|
328
398
|
|
|
329
399
|
Version 0.5.1 changes shutdown after the published 0.4.0 baseline. Custom `RuntimeParticipant` implementations must use the new global barriers: `quiesce` → `stopping(reason)` → `close_admission` → `drain` → `stop(reason)` → Module/container cleanup. Move accepted-work draining out of resource `stop`; keep dependencies alive until all drains complete. `prepare(bool)` still selects the startup mode.
|
|
@@ -411,7 +481,7 @@ Do not remove durable job payload versions merely because their Python APIs were
|
|
|
411
481
|
<details>
|
|
412
482
|
<summary>For maintainers: publishing a changed version</summary>
|
|
413
483
|
|
|
414
|
-
Routine code and documentation commits may retain the current version. Pushes to `main`
|
|
484
|
+
Routine code and documentation commits may retain the current version. Pull requests to `main` run build, static checks, and short architecture/typing/release-intent checks with read-only permissions. Pushes to `main` run the full release gates, including locked, lowest-direct, and highest allowed dependency samples, but skip publication unless the version increased across the push; initial creation of `main` publishes its current version. Manual workflow runs validate only. A failed run may be retried, but a later same-version push does not resume publication: changed contents require another version bump. Follow [release operations](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/development.md#发布操作) for publisher setup and retry boundaries. Dependency samples and current API/type checks do not establish backward compatibility or a cross-version upgrade guarantee.
|
|
415
485
|
|
|
416
486
|
</details>
|
|
417
487
|
|
|
@@ -427,7 +497,7 @@ The engineering guides below are maintained in Chinese in the private GitHub rep
|
|
|
427
497
|
| Check release evidence and remaining validation limits | [Status and validation](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/status.md) |
|
|
428
498
|
| Change the framework itself | [Contributor guidance](https://github.com/componet-architecture/python-ddd-framework/blob/main/AGENTS.md) and [focused reading paths](https://github.com/componet-architecture/python-ddd-framework/blob/main/docs/README.md#重构的最短阅读路径) |
|
|
429
499
|
|
|
430
|
-
Generated applications include a self-contained English README, `AGENTS.md`, architecture document, and development guide for their template version. `AGENTS.md`
|
|
500
|
+
Generated applications include a self-contained English README, `AGENTS.md`, architecture document, and development guide for their template version. `AGENTS.md` guides contributors from business rules and ownership to framework capability selection and verification. The development guide maps common tasks to framework capabilities and includes commands to locate the installed version's source and bundled examples; each DDD module README records the sample business model and traces approval through its owners. The application maintains these documents after generation; framework upgrades do not overwrite them. Existing applications can use their installed package's `developer_kit/templates` as a read-only reference when updating affected guidance, preserving their own business model and decisions.
|
|
431
501
|
|
|
432
502
|
## License
|
|
433
503
|
|
|
@@ -9,15 +9,12 @@ from typing import get_origin
|
|
|
9
9
|
from dishka import (
|
|
10
10
|
DEFAULT_COMPONENT,
|
|
11
11
|
DependencyKey,
|
|
12
|
-
Provider,
|
|
13
12
|
Scope,
|
|
14
13
|
)
|
|
15
14
|
|
|
16
15
|
from ..diagnostics import SourceLocation
|
|
17
16
|
from ..modularity import ModuleRegistry
|
|
18
17
|
from ..services.arbitration import (
|
|
19
|
-
_ArbitrationResult,
|
|
20
|
-
_provider_with_active_sources,
|
|
21
18
|
_RegistrationDraft,
|
|
22
19
|
)
|
|
23
20
|
from ..services.native_graph import _NativeServiceGraph
|
|
@@ -201,64 +198,3 @@ def _validate_application_service_bindings(
|
|
|
201
198
|
"or private implementation binding"
|
|
202
199
|
),
|
|
203
200
|
)
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
def _runtime_providers(
|
|
207
|
-
arbitration: _ArbitrationResult,
|
|
208
|
-
services: tuple[_BoundApplicationService, ...],
|
|
209
|
-
) -> tuple[Provider, ...]:
|
|
210
|
-
"""仅重定位 Application Service factories;其他 Dishka provider 保持原生形状。"""
|
|
211
|
-
|
|
212
|
-
related_draft_ids = frozenset(
|
|
213
|
-
draft_id for service in services for draft_id in service.related_draft_ids
|
|
214
|
-
)
|
|
215
|
-
drafts_by_entry: dict[int, list[_RegistrationDraft]] = {}
|
|
216
|
-
for draft in arbitration.drafts:
|
|
217
|
-
drafts_by_entry.setdefault(draft.entry.entry_id, []).append(draft)
|
|
218
|
-
|
|
219
|
-
providers: list[Provider] = []
|
|
220
|
-
for entry in arbitration.ordered_entries:
|
|
221
|
-
entry_drafts = drafts_by_entry[entry.entry_id]
|
|
222
|
-
active = tuple(
|
|
223
|
-
draft
|
|
224
|
-
for draft in entry_drafts
|
|
225
|
-
if draft.decision is not RegistrationDecision.BACKED_OFF
|
|
226
|
-
and id(draft) not in related_draft_ids
|
|
227
|
-
)
|
|
228
|
-
if not active:
|
|
229
|
-
continue
|
|
230
|
-
if len(active) == len(entry_drafts):
|
|
231
|
-
providers.append(entry.contribution.provider)
|
|
232
|
-
else:
|
|
233
|
-
providers.append(_provider_with_active_sources(entry.contribution.provider, active))
|
|
234
|
-
|
|
235
|
-
# default component 只发布 REQUEST proxy;ACTION implementation 统一藏入框架私有 component。
|
|
236
|
-
implementation_provider = Provider(component=_APPLICATION_SERVICE_COMPONENT)
|
|
237
|
-
for service in services:
|
|
238
|
-
winner = service.winner
|
|
239
|
-
assert winner.factory is not None
|
|
240
|
-
# internal contributor 被 override 时仍以原声明 key 调度;
|
|
241
|
-
# winner class 只是实现事实,不能改写契约 key。
|
|
242
|
-
contract = (
|
|
243
|
-
service.binding.discovery.definition.contract or service.binding.discovery.service_type
|
|
244
|
-
)
|
|
245
|
-
implementation_provider.factories.append(
|
|
246
|
-
winner.factory.replace(
|
|
247
|
-
dependencies=tuple(
|
|
248
|
-
dependency.with_component(DEFAULT_COMPONENT)
|
|
249
|
-
for dependency in winner.factory.dependencies
|
|
250
|
-
),
|
|
251
|
-
kw_dependencies={
|
|
252
|
-
name: dependency.with_component(DEFAULT_COMPONENT)
|
|
253
|
-
for name, dependency in winner.factory.kw_dependencies.items()
|
|
254
|
-
},
|
|
255
|
-
provides=DependencyKey(contract, None),
|
|
256
|
-
when_override=None,
|
|
257
|
-
when_component=DEFAULT_COMPONENT,
|
|
258
|
-
)
|
|
259
|
-
)
|
|
260
|
-
# ServiceCatalog 的 accepted row 必须描述 relocated native binding,而非旧 default key。
|
|
261
|
-
winner.key = DependencyKey(contract, _APPLICATION_SERVICE_COMPONENT)
|
|
262
|
-
if services:
|
|
263
|
-
providers.append(implementation_provider)
|
|
264
|
-
return tuple(providers)
|
|
@@ -13,6 +13,7 @@ from dishka import AsyncContainer
|
|
|
13
13
|
from ..invocation.dispatcher import _MethodDispatcher
|
|
14
14
|
from ..invocation.execution import _InterceptorPipeline
|
|
15
15
|
from ..invocation.methods import _CompiledMethod
|
|
16
|
+
from ..invocation.runtime import _current_task, _InvocationRuntime
|
|
16
17
|
from ..settings.provider import SettingProvider
|
|
17
18
|
from .catalog import (
|
|
18
19
|
_APPLICATION_SERVICE_COMPONENT,
|
|
@@ -22,7 +23,6 @@ from .contracts import ApplicationService
|
|
|
22
23
|
from .errors import (
|
|
23
24
|
CrossTaskInvocationError,
|
|
24
25
|
)
|
|
25
|
-
from .invocation import _current_task, _InvocationRuntime
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
@dataclass(slots=True)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""应用服务 Contract 的 REQUEST 代理入口;准入与 scope 清理由 Invocation 拥有。"""
|
|
2
|
+
|
|
3
|
+
from collections.abc import Awaitable, Callable
|
|
4
|
+
from typing import cast
|
|
5
|
+
|
|
6
|
+
from dishka import AsyncContainer, Scope
|
|
7
|
+
|
|
8
|
+
from ..authorization import CurrentUser
|
|
9
|
+
from ..invocation.runtime import _InvocationRuntime
|
|
10
|
+
from ..invocation.scopes import _managed_request
|
|
11
|
+
from .catalog import ApplicationServiceCatalog
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class _ScopedApplicationServiceInvoker:
|
|
15
|
+
"""从 Application root 或其 SESSION 建立 REQUEST,不向 caller 暴露 resolver。"""
|
|
16
|
+
|
|
17
|
+
__slots__ = ("_catalog", "_root_container", "_runtime")
|
|
18
|
+
|
|
19
|
+
def __init__(
|
|
20
|
+
self,
|
|
21
|
+
container: AsyncContainer,
|
|
22
|
+
runtime: _InvocationRuntime,
|
|
23
|
+
catalog: ApplicationServiceCatalog,
|
|
24
|
+
) -> None:
|
|
25
|
+
self._root_container = container
|
|
26
|
+
self._runtime = runtime
|
|
27
|
+
self._catalog = catalog
|
|
28
|
+
|
|
29
|
+
async def invoke(
|
|
30
|
+
self,
|
|
31
|
+
parent: AsyncContainer,
|
|
32
|
+
current_user: CurrentUser,
|
|
33
|
+
correlation_id: str,
|
|
34
|
+
method: Callable[..., Awaitable[object]],
|
|
35
|
+
args: tuple[object, ...],
|
|
36
|
+
kwargs: dict[str, object],
|
|
37
|
+
) -> object:
|
|
38
|
+
self._require_owned_parent(parent)
|
|
39
|
+
service, compiled = self._catalog._resolve_method(method)
|
|
40
|
+
async with self._runtime.outer_lease():
|
|
41
|
+
caller_token = self._runtime.bind_caller(current_user, correlation_id)
|
|
42
|
+
try:
|
|
43
|
+
async with _managed_request(parent) as request_container:
|
|
44
|
+
proxy = await request_container.get(service.registration.contract)
|
|
45
|
+
call = cast(
|
|
46
|
+
Callable[..., Awaitable[object]],
|
|
47
|
+
getattr(proxy, compiled.name),
|
|
48
|
+
)
|
|
49
|
+
return await call(*args, **kwargs)
|
|
50
|
+
finally:
|
|
51
|
+
self._runtime.reset_caller(caller_token)
|
|
52
|
+
|
|
53
|
+
def _require_owned_parent(self, parent: AsyncContainer) -> None:
|
|
54
|
+
if parent is self._root_container:
|
|
55
|
+
return
|
|
56
|
+
if parent.scope is not Scope.SESSION or parent.parent_container is not self._root_container:
|
|
57
|
+
raise RuntimeError("scoped invocation parent is not owned by this Application")
|
|
@@ -25,15 +25,16 @@ from ..services.convention_contracts import (
|
|
|
25
25
|
ConventionDiscoveryKind,
|
|
26
26
|
_ServiceDefinition,
|
|
27
27
|
)
|
|
28
|
+
from ..services.relocation import _BindingRelocation
|
|
28
29
|
from ..settings.module import SettingsModule
|
|
29
30
|
from ..unit_of_work.module import UnitOfWorkModule
|
|
30
31
|
from .bindings import (
|
|
31
32
|
_bind_application_services,
|
|
32
|
-
_runtime_providers,
|
|
33
33
|
_validate_application_service_bindings,
|
|
34
34
|
_validate_application_service_dependencies,
|
|
35
35
|
)
|
|
36
36
|
from .catalog import (
|
|
37
|
+
_APPLICATION_SERVICE_COMPONENT,
|
|
37
38
|
ApplicationServiceCatalog,
|
|
38
39
|
_build_application_service_catalog,
|
|
39
40
|
_DiscoveredApplicationService,
|
|
@@ -130,10 +131,20 @@ class ApplicationServicesModule(AppModule):
|
|
|
130
131
|
context.modules.instance(InvocationModule).rules,
|
|
131
132
|
context.modules.instance(ExtensionsModule).catalog,
|
|
132
133
|
)
|
|
133
|
-
#
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
134
|
+
# 能力只决定私有实现 key;来源、工厂搬迁和贡献指纹仍由 services 管理。
|
|
135
|
+
context._relocate_bindings(
|
|
136
|
+
tuple(
|
|
137
|
+
_BindingRelocation(
|
|
138
|
+
item.winner,
|
|
139
|
+
DependencyKey(
|
|
140
|
+
item.binding.discovery.definition.contract
|
|
141
|
+
or item.binding.discovery.service_type,
|
|
142
|
+
_APPLICATION_SERVICE_COMPONENT,
|
|
143
|
+
),
|
|
144
|
+
)
|
|
145
|
+
for item in bound
|
|
146
|
+
)
|
|
147
|
+
)
|
|
137
148
|
provider = Provider()
|
|
138
149
|
provider.provide(lambda: self.catalog, provides=ApplicationServiceCatalog, scope=Scope.APP)
|
|
139
150
|
provider.provide(_ApplicationServiceDispatcher, scope=Scope.REQUEST)
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from dishka import Provider, Scope
|
|
4
4
|
|
|
5
|
-
from ..application_services.invocation import _InvocationRuntime
|
|
6
5
|
from ..invocation.module import InvocationModule
|
|
6
|
+
from ..invocation.runtime import _InvocationRuntime
|
|
7
7
|
from ..lifecycle import ConfigureContext
|
|
8
8
|
from ..modularity import AppModule
|
|
9
9
|
from ..services.composition import (
|
|
@@ -12,9 +12,9 @@ from uuid import uuid4
|
|
|
12
12
|
from dishka import AsyncContainer, Scope
|
|
13
13
|
from pydantic import BaseModel, ValidationError
|
|
14
14
|
|
|
15
|
-
from ..application_services.invocation import _InvocationRuntime
|
|
16
15
|
from ..authorization import CurrentUser
|
|
17
16
|
from ..invocation import BackgroundSystemCaller
|
|
17
|
+
from ..invocation.runtime import _InvocationRuntime
|
|
18
18
|
from ..observability.context import invocation_span
|
|
19
19
|
from .catalog import BackgroundJobCatalog
|
|
20
20
|
from .contracts import BackgroundJobContext, BackgroundJobDefinition
|
|
@@ -8,7 +8,7 @@ from typing import Any, TypeVar
|
|
|
8
8
|
import asyncpg # type: ignore[import-untyped]
|
|
9
9
|
from pydantic import BaseModel
|
|
10
10
|
|
|
11
|
-
from ...
|
|
11
|
+
from ...invocation.runtime import _InvocationRuntime
|
|
12
12
|
from ...observability.context import capture_trace_context
|
|
13
13
|
from ...options import Options
|
|
14
14
|
from ...sqlalchemy import SqlAlchemySessionProvider
|
|
@@ -10,10 +10,10 @@ from uuid import uuid4
|
|
|
10
10
|
from dishka import AsyncContainer, Scope
|
|
11
11
|
|
|
12
12
|
from ..application_services.errors import ApplicationInvocationRejectedError
|
|
13
|
-
from ..application_services.invocation import _InvocationRuntime
|
|
14
13
|
from ..authorization import CurrentUser
|
|
15
14
|
from ..background_execution.lifecycle import _TaskExecution
|
|
16
15
|
from ..invocation import BackgroundSystemCaller
|
|
16
|
+
from ..invocation.runtime import _InvocationRuntime
|
|
17
17
|
from ..unit_of_work.options import _DEFAULT_CONNECTION_NAME
|
|
18
18
|
from .contracts import BackgroundWorkerContext, BackgroundWorkerDefinition
|
|
19
19
|
|
|
@@ -9,7 +9,6 @@ from collections.abc import Mapping
|
|
|
9
9
|
from dishka import AsyncContainer
|
|
10
10
|
|
|
11
11
|
from ..application.build_spec import _ApplicationBuildSpec
|
|
12
|
-
from ..application_services.invocation import _InvocationRuntime
|
|
13
12
|
from ..background_execution import (
|
|
14
13
|
BackgroundExecutionMode,
|
|
15
14
|
BackgroundJobOptions,
|
|
@@ -27,6 +26,7 @@ from ..background_execution.processes import _ProcessSlot
|
|
|
27
26
|
from ..background_jobs import BackgroundJobCatalog
|
|
28
27
|
from ..errors.lifecycle import ApplicationRuntimeError
|
|
29
28
|
from ..invocation import BackgroundSystemCaller
|
|
29
|
+
from ..invocation.runtime import _InvocationRuntime
|
|
30
30
|
from ..lifecycle import RuntimeParticipant, ShutdownReason
|
|
31
31
|
from .catalog import BackgroundWorkerCatalog
|
|
32
32
|
from .contracts import BackgroundExecutionOptions, BackgroundExecutionProfile
|
|
@@ -21,6 +21,7 @@ class _CachePending:
|
|
|
21
21
|
async def after_commit(self) -> None:
|
|
22
22
|
failures: list[Exception] = []
|
|
23
23
|
try:
|
|
24
|
+
# 普通错误继续后项,取消立即传播;逐项 await 保留尚未发送命令的边界。
|
|
24
25
|
for _, apply in self.writes.values():
|
|
25
26
|
try:
|
|
26
27
|
await apply()
|
|
@@ -40,7 +41,4 @@ class _CacheLifecycleFactory:
|
|
|
40
41
|
|
|
41
42
|
|
|
42
43
|
def _pending(work: UnitOfWork) -> _CachePending:
|
|
43
|
-
|
|
44
|
-
if isinstance(lifecycle, _CachePending):
|
|
45
|
-
return lifecycle
|
|
46
|
-
raise RuntimeError("Caching lifecycle is not configured for this UnitOfWork")
|
|
44
|
+
return work._lifecycle(_CachePending)
|
{python_ddd_framework-0.5.1 → python_ddd_framework-0.6.0}/src/python_ddd_framework/cli/project.py
RENAMED
|
@@ -18,6 +18,16 @@ from .errors import CommandError
|
|
|
18
18
|
|
|
19
19
|
HOST_ENTRY_POINT_GROUP = "python_ddd_framework.hosts"
|
|
20
20
|
MODULE_ENTRY_POINT_GROUP = "python_ddd_framework.modules"
|
|
21
|
+
_PROJECT_ENVIRONMENT_OVERRIDES = (
|
|
22
|
+
"VIRTUAL_ENV",
|
|
23
|
+
"PYTHONPATH",
|
|
24
|
+
"PYTHONHOME",
|
|
25
|
+
"UV_PROJECT_ENVIRONMENT",
|
|
26
|
+
"UV_PROJECT",
|
|
27
|
+
"UV_WORKING_DIR",
|
|
28
|
+
"UV_WORKING_DIRECTORY",
|
|
29
|
+
"UV_PYTHON",
|
|
30
|
+
)
|
|
21
31
|
|
|
22
32
|
|
|
23
33
|
def read_project(path: Path) -> dict[str, Any]:
|
|
@@ -117,15 +127,6 @@ class Project:
|
|
|
117
127
|
def project_environment() -> dict[str, str]:
|
|
118
128
|
# 父进程可能来自 ROS、uv tool 或另一个项目;后端环境由本项目声明和 uv 选择。
|
|
119
129
|
environment = dict(os.environ)
|
|
120
|
-
for key in
|
|
121
|
-
"VIRTUAL_ENV",
|
|
122
|
-
"PYTHONPATH",
|
|
123
|
-
"PYTHONHOME",
|
|
124
|
-
"UV_PROJECT_ENVIRONMENT",
|
|
125
|
-
"UV_PROJECT",
|
|
126
|
-
"UV_WORKING_DIR",
|
|
127
|
-
"UV_WORKING_DIRECTORY",
|
|
128
|
-
"UV_PYTHON",
|
|
129
|
-
):
|
|
130
|
+
for key in _PROJECT_ENVIRONMENT_OVERRIDES:
|
|
130
131
|
environment.pop(key, None)
|
|
131
132
|
return environment
|