python-ddd-framework 0.7.2__tar.gz → 0.8.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.7.2 → python_ddd_framework-0.8.0}/PKG-INFO +17 -1
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/README.md +16 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/pyproject.toml +1 -1
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/pyproject.toml.orig +1 -1
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/__init__.py +2 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/root.py +2 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/__init__.py +2 -1
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/application.py +49 -12
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/binding.py +14 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/contracts.py +73 -2
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/manager.py +9 -2
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/module.py +18 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/provider.py +10 -3
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/LICENSE +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application/build_spec.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application/builder.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application/composition.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application/runtime_hooks.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application/state.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application_services/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application_services/bindings.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application_services/catalog.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application_services/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application_services/dispatcher.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application_services/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application_services/invocation.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application_services/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/application_services/pagination.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/auditing/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/auditing/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/auditing/control.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/auditing/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/auditing/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/auditing/sqlalchemy/migrations/0001_auditing.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/auditing/sqlalchemy/migrations/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/auditing/sqlalchemy/models.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/auditing/sqlalchemy/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/auditing/sqlalchemy/store.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/authorization/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/authorization/catalog.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/authorization/checking.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/authorization/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/authorization/definition_discovery.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/authorization/definitions.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/authorization/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/authorization/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/authorization/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/application.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/child.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/declarations.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/lifecycle.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/local.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/locks.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/management.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/permissions.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_execution/processes.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/catalog.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/declaration.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/execution.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/pgqueuer/UPSTREAM_LICENSE.txt +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/pgqueuer/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/pgqueuer/enqueue.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/0001_pgqueuer_1_3_2.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/pgqueuer/migrations/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/pgqueuer/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/pgqueuer/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/pgqueuer/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/pgqueuer/sql/pgqueuer_1_3_2_install.sql +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_jobs/pgqueuer/supervision.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_workers/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_workers/catalog.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_workers/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_workers/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_workers/execution.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/background_workers/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/caching/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/caching/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/caching/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/caching/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/caching/naming.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/caching/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/caching/unit_of_work.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/cli/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/cli/development.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/cli/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/cli/inspection.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/cli/project.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/cli/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/composition.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/dotenv_source.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/environment_source.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/immutability.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/input_shape.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/merge.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/sources.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/values.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/configuration/yaml_source.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/generation.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/project_metadata.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/publication.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/source.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/basic/cookiecutter.json +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/README.md +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/contracts/conversion_service.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/module.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/basic/{{cookiecutter.module_name}}/services/default_conversion_service.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/cookiecutter.json +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/README.md +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_jobs/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/background_workers/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/caching/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/event_handlers/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/hosted_services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/integration_services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/interceptors/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/module.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/options/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application/setting_handlers/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/inputs/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.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.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/module.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/application_contracts/views/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/entities/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/events/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/module.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/repositories/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/seeding/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/services/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/settings/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain/value_objects/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/constants/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/enums/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/errors/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/messages/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/module.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/domain_shared/permissions/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.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.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/filters/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/models/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/module.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/routers/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/http_api/websockets/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/migrations/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/models/base.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/module.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/sqlalchemy/repositories/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/module/{{cookiecutter.module_name}}/tests/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/cookiecutter.json +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/AGENTS.md +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/README.md +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.dockerignore +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.gitignore +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/.python-version +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/Dockerfile +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/app.development.yaml.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/compose.dev.yaml.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/compose.production.yaml.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/pyproject.toml.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/__init__.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/main.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/src/host/module.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/backend/tests/conftest.py.jinja +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.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.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/architecture.md +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/docs/development.md +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/templates/project/{{cookiecutter.project_name}}/scripts/.gitkeep +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/developer_kit/wiring.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/diagnostics/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/diagnostics/journal.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/diagnostics/model.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/diagnostics/source.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/distributed_lock/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/distributed_lock/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/distributed_lock/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/domain/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/domain/aggregates.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/domain/entities.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/domain/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/domain/event_values.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/domain/services.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/domain/value_objects.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/errors/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/errors/base.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/errors/business.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/errors/configuration.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/errors/diagnostics.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/errors/lifecycle.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/errors/modularity.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/errors/services.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/aggregate.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/catalog.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/contribution.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/discovery.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/entities.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/subscription.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/events/unit_of_work.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/extensions/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/extensions/catalog.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/extensions/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/extensions/models.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/extensions/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/access.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/access_options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/action.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/adapter.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/application_services.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/background.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/error_handlers.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/filters.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/health.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/http.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/http_router.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/manual_action.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/middleware.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/parameters.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/realtime/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/realtime/authentication.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/realtime/connection.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/realtime/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/realtime/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/realtime/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/request_context.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/route_integrity.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/routing.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/server.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/service_endpoints.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/service_routes.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/settings.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/streaming.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/tracing.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/transfer.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/upload_limits.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/fastapi/uploads.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosted_services/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosted_services/bridge.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosted_services/catalog.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosted_services/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosted_services/declarations.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosted_services/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosted_services/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosted_services/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosted_services/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosted_services/state.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosting/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/hosting/instance.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/application.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/domain_rules.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/dtos.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/extensions.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/http_api.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/management.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/models.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/passwords.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/permissions.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/seeding.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/services.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0001_identity.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0002_physical_delete.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0003_extra_properties.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/0004_concurrency_version.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/migrations/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/models.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/repository.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/session_security.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/sqlalchemy/stores.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/stores.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/identity/tokens.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/arguments.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/callables.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/contribution.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/dispatcher.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/entries.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/entrypoints.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/execution.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/function_runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/interception.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/interceptors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/managed_proxy.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/managed_services.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/methods.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/policies.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/scopes.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/signature.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/invocation/validation.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/lifecycle/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/lifecycle/composition.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/lifecycle/context.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/lifecycle/participants.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/lifecycle/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/lifecycle/state.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/messaging/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/messaging/channel.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/messaging/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/messaging/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/messaging/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/messaging/receipt.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/messaging/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/modularity/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/modularity/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/modularity/discovery.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/modularity/graph.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/modularity/registry.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/modularity/selection.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/notifications/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/notifications/catalog.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/notifications/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/notifications/declarations.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/notifications/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/observability/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/observability/context.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/observability/export.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/observability/formatting.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/observability/logging.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/observability/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/observability/tracing.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/options/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/options/aliases.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/options/contribution.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/options/immutability.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/options/input_keys.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/options/issues.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/options/models.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/options/registry.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/options/schema.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/options/validation.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/py.typed +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/realtime/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/realtime/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/realtime/diagnostics.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/realtime/messages.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/redis/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/redis/cache.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/redis/cache_scripts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/redis/distributed_lock.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/redis/lease_lock.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/redis/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/redis/notification_runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/redis/notifications.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/redis/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/redis/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/seeding/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/seeding/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/seeding/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/seeding/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/arbitration.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/binding.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/composition.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/contribution.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/convention.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/convention_contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/exposure.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/fixed_lifetime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/framework_provider.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/native_graph.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/provider.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/registration.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/relocation.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/repository.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/services/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/catalog.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/changes.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/declarations.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/definition_discovery.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/definitions.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/handlers.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/management.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/notifications.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/permissions.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/refresh.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/refresh_module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0001_settings.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0002_physical_delete.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/0003_version_tokens.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/sqlalchemy/migrations/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/sqlalchemy/models.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/sqlalchemy/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/sqlalchemy/store.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/store.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/settings/values.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/env.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/alembic_runtime/script.py.mako +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/auditing.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/extensions.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/metadata.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/metadata_builder.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/metadata_fingerprint.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/metadata_ownership.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/migration.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/migration_operations.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/migration_options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/migration_sources.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/module_migration.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/repository.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/session_provider.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/sqlalchemy/unit_of_work.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/testing/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/testing/runtime.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/unit_of_work/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/unit_of_work/contracts.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/unit_of_work/errors.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/unit_of_work/lifecycle.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/unit_of_work/manager.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/unit_of_work/module.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/unit_of_work/options.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/validation/__init__.py +0 -0
- {python_ddd_framework-0.7.2 → python_ddd_framework-0.8.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.8.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
|
|
@@ -169,6 +169,8 @@ Open **http://127.0.0.1:8000/docs**. Use the generated `identity.seed_admin_user
|
|
|
169
169
|
|
|
170
170
|
The empty `orders` skeleton contributes no business routes. The independent [order-management example](examples/order_management/README.md) supplies `/api/orders`, approval and queued approval, file transfer, and an authenticated WebSocket at `/ws/orders`; use its initializer when you want to explore those capabilities.
|
|
171
171
|
|
|
172
|
+
For C++ computation, the independent [native integration example](examples/native_integration/README.md) demonstrates an installed nanobind package, typed application-service consumption, cancellation cleanup, source rebuilds, and artifact delivery. It is outside the runtime wheel and does not change the CLI or default templates. Verified platforms and remaining limits are recorded in [status](docs/status.md#c-原生接入样例).
|
|
173
|
+
|
|
172
174
|
The default business API prefix is `/api`. Liveness and readiness are exposed at `/health/live` and `/health/ready`; readiness describes application lifecycle state, not continuous database or Redis health.
|
|
173
175
|
|
|
174
176
|
## CLI reference
|
|
@@ -312,12 +314,26 @@ New `ddd` modules contain the full responsibility directories and necessary comp
|
|
|
312
314
|
|
|
313
315
|
See the [migration guide](docs/development.md#数据库聚合与迁移) and [verification record](docs/status.md#http-回收与迁移来源判定未发布).
|
|
314
316
|
|
|
317
|
+
## Settings policies (0.8.0)
|
|
318
|
+
|
|
319
|
+
`SettingDefinition` now accepts `allowed_sources`, `management_access`, `read_permission`, and `write_permission`. Existing definitions retain their source order and management visibility. Generic update/reset now also require `settings.read`, in addition to `settings.write` and any declared per-setting permissions, because their responses contain the saved setting snapshot. Update roles that previously held only write permission.
|
|
320
|
+
|
|
321
|
+
Before excluding `CONFIGURATION` for a setting, remove its entries from YAML, environment variables, dotenv, CLI, explicit configuration and module configuration defaults: composition rejects forbidden inputs even when another value masks them. `HIDDEN` and `READ_ONLY` restrict generic management; internal readers and dedicated application services can still use the existing Provider/Manager subject to source, type and version rules. Defining a per-setting permission does not grant it to existing users or roles; update grants through the application's authorization system. No database migration or dependency change is required for this extension.
|
|
322
|
+
|
|
323
|
+
Version 0.8.0 includes these policies. Follow [Settings setup and usage](docs/development.md#settings-策略与使用) for definition discovery, permission declarations, internal Provider/Manager calls, and HTTP update/reset with version tokens. The [contract](docs/architecture.md#typed-cache-与-settings) owns the rules; [validation evidence](docs/status.md#settings-最小策略扩展) separates implementation results from the later read-only review.
|
|
324
|
+
|
|
315
325
|
## Invocation performance (0.7.2)
|
|
316
326
|
|
|
317
327
|
Function calls avoid regenerating DI wrappers, empty extension chains skip unnecessary work, and completed filter/interceptor chains release execution references sooner. Managed declaration checks continue to detect dynamic method and policy changes.
|
|
318
328
|
|
|
319
329
|
Public APIs, DI scopes, authorization, validation, Unit of Work, exception and cancellation behavior are unchanged. No application-code, configuration or data migration is required. Follow the existing [upgrade procedure](#upgrading); validation evidence and performance limits are recorded in [release status](docs/status.md#当前发布).
|
|
320
330
|
|
|
331
|
+
## Native C++ integration example (0.7.3)
|
|
332
|
+
|
|
333
|
+
The repository's [native integration example](examples/native_integration/README.md) demonstrates a separately installed nanobind package, Eigen computation, typed service/HTTP consumption, cancellation cleanup, and wheel/sdist and Docker delivery. Its development entry rebuilds declared native path dependencies before starting the existing Host. The example and its native binaries are maintained outside the framework runtime wheel.
|
|
334
|
+
|
|
335
|
+
Existing applications need no code, configuration, dependency or data migration. Adopt the example from the source checkout when adding native computation; the CLI, default templates and framework lifecycle contracts are unchanged. Platform evidence and remaining limits are recorded in [release status](docs/status.md#当前发布).
|
|
336
|
+
|
|
321
337
|
<a id="streaming-and-access-migration-07-unreleased"></a>
|
|
322
338
|
|
|
323
339
|
## Streaming and access migration (0.7)
|
|
@@ -125,6 +125,8 @@ Open **http://127.0.0.1:8000/docs**. Use the generated `identity.seed_admin_user
|
|
|
125
125
|
|
|
126
126
|
The empty `orders` skeleton contributes no business routes. The independent [order-management example](examples/order_management/README.md) supplies `/api/orders`, approval and queued approval, file transfer, and an authenticated WebSocket at `/ws/orders`; use its initializer when you want to explore those capabilities.
|
|
127
127
|
|
|
128
|
+
For C++ computation, the independent [native integration example](examples/native_integration/README.md) demonstrates an installed nanobind package, typed application-service consumption, cancellation cleanup, source rebuilds, and artifact delivery. It is outside the runtime wheel and does not change the CLI or default templates. Verified platforms and remaining limits are recorded in [status](docs/status.md#c-原生接入样例).
|
|
129
|
+
|
|
128
130
|
The default business API prefix is `/api`. Liveness and readiness are exposed at `/health/live` and `/health/ready`; readiness describes application lifecycle state, not continuous database or Redis health.
|
|
129
131
|
|
|
130
132
|
## CLI reference
|
|
@@ -268,12 +270,26 @@ New `ddd` modules contain the full responsibility directories and necessary comp
|
|
|
268
270
|
|
|
269
271
|
See the [migration guide](docs/development.md#数据库聚合与迁移) and [verification record](docs/status.md#http-回收与迁移来源判定未发布).
|
|
270
272
|
|
|
273
|
+
## Settings policies (0.8.0)
|
|
274
|
+
|
|
275
|
+
`SettingDefinition` now accepts `allowed_sources`, `management_access`, `read_permission`, and `write_permission`. Existing definitions retain their source order and management visibility. Generic update/reset now also require `settings.read`, in addition to `settings.write` and any declared per-setting permissions, because their responses contain the saved setting snapshot. Update roles that previously held only write permission.
|
|
276
|
+
|
|
277
|
+
Before excluding `CONFIGURATION` for a setting, remove its entries from YAML, environment variables, dotenv, CLI, explicit configuration and module configuration defaults: composition rejects forbidden inputs even when another value masks them. `HIDDEN` and `READ_ONLY` restrict generic management; internal readers and dedicated application services can still use the existing Provider/Manager subject to source, type and version rules. Defining a per-setting permission does not grant it to existing users or roles; update grants through the application's authorization system. No database migration or dependency change is required for this extension.
|
|
278
|
+
|
|
279
|
+
Version 0.8.0 includes these policies. Follow [Settings setup and usage](docs/development.md#settings-策略与使用) for definition discovery, permission declarations, internal Provider/Manager calls, and HTTP update/reset with version tokens. The [contract](docs/architecture.md#typed-cache-与-settings) owns the rules; [validation evidence](docs/status.md#settings-最小策略扩展) separates implementation results from the later read-only review.
|
|
280
|
+
|
|
271
281
|
## Invocation performance (0.7.2)
|
|
272
282
|
|
|
273
283
|
Function calls avoid regenerating DI wrappers, empty extension chains skip unnecessary work, and completed filter/interceptor chains release execution references sooner. Managed declaration checks continue to detect dynamic method and policy changes.
|
|
274
284
|
|
|
275
285
|
Public APIs, DI scopes, authorization, validation, Unit of Work, exception and cancellation behavior are unchanged. No application-code, configuration or data migration is required. Follow the existing [upgrade procedure](#upgrading); validation evidence and performance limits are recorded in [release status](docs/status.md#当前发布).
|
|
276
286
|
|
|
287
|
+
## Native C++ integration example (0.7.3)
|
|
288
|
+
|
|
289
|
+
The repository's [native integration example](examples/native_integration/README.md) demonstrates a separately installed nanobind package, Eigen computation, typed service/HTTP consumption, cancellation cleanup, and wheel/sdist and Docker delivery. Its development entry rebuilds declared native path dependencies before starting the existing Host. The example and its native binaries are maintained outside the framework runtime wheel.
|
|
290
|
+
|
|
291
|
+
Existing applications need no code, configuration, dependency or data migration. Adopt the example from the source checkout when adding native computation; the CLI, default templates and framework lifecycle contracts are unchanged. Platform evidence and remaining limits are recorded in [release status](docs/status.md#当前发布).
|
|
292
|
+
|
|
277
293
|
<a id="streaming-and-access-migration-07-unreleased"></a>
|
|
278
294
|
|
|
279
295
|
## Streaming and access migration (0.7)
|
{python_ddd_framework-0.7.2 → python_ddd_framework-0.8.0}/src/python_ddd_framework/__init__.py
RENAMED
|
@@ -280,6 +280,7 @@ from .settings import (
|
|
|
280
280
|
SettingDefinitionContext,
|
|
281
281
|
SettingDefinitionError,
|
|
282
282
|
SettingDefinitionProvider,
|
|
283
|
+
SettingManagementAccess,
|
|
283
284
|
SettingManager,
|
|
284
285
|
SettingProvider,
|
|
285
286
|
)
|
|
@@ -528,6 +529,7 @@ __all__ = (
|
|
|
528
529
|
"SettingDefinitionError",
|
|
529
530
|
"SettingDefinitionProvider",
|
|
530
531
|
"SettingHandlers",
|
|
532
|
+
"SettingManagementAccess",
|
|
531
533
|
"SettingManager",
|
|
532
534
|
"SettingProvider",
|
|
533
535
|
"SettingsModule",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Global Runtime Settings 的 typed contract 与 Application-local catalog。"""
|
|
2
2
|
|
|
3
3
|
from .catalog import SettingCatalog
|
|
4
|
-
from .contracts import SettingDefinition
|
|
4
|
+
from .contracts import SettingDefinition, SettingManagementAccess
|
|
5
5
|
from .definitions import SettingDefinitionContext, SettingDefinitionProvider
|
|
6
6
|
from .errors import RuntimeSettingError, SettingDefinitionError
|
|
7
7
|
from .handlers import SettingApplicationStatus, SettingHandler, SettingHandlerDefinition
|
|
@@ -21,6 +21,7 @@ __all__ = (
|
|
|
21
21
|
"SettingDefinitionProvider",
|
|
22
22
|
"SettingHandler",
|
|
23
23
|
"SettingHandlerDefinition",
|
|
24
|
+
"SettingManagementAccess",
|
|
24
25
|
"SettingManager",
|
|
25
26
|
"SettingProvider",
|
|
26
27
|
"SettingSnapshot",
|
|
@@ -5,15 +5,19 @@ from __future__ import annotations
|
|
|
5
5
|
import json
|
|
6
6
|
from typing import Any, cast
|
|
7
7
|
|
|
8
|
+
from dishka import AsyncContainer
|
|
8
9
|
from pydantic import JsonValue
|
|
9
10
|
|
|
10
11
|
from ..application_services import ApplicationService, application_service
|
|
11
|
-
from ..authorization import authorize
|
|
12
|
+
from ..authorization import PermissionDeniedError, PermissionName, authorize
|
|
13
|
+
from ..authorization.checking import _check_authorization
|
|
14
|
+
from ..authorization.contracts import _AuthorizationRequirement
|
|
12
15
|
from ..configuration.immutability import _serialization_value
|
|
13
16
|
from ..errors import BusinessError, BusinessErrorDefinition, BusinessErrorField
|
|
14
17
|
from ..errors.base import ResourceNotFoundError
|
|
18
|
+
from ..invocation.runtime import _InvocationRuntime
|
|
15
19
|
from .catalog import SettingCatalog
|
|
16
|
-
from .contracts import SettingDefinition
|
|
20
|
+
from .contracts import SettingDefinition, SettingManagementAccess
|
|
17
21
|
from .management import (
|
|
18
22
|
SETTINGS_READ,
|
|
19
23
|
SETTINGS_WRITE,
|
|
@@ -32,27 +36,41 @@ _VALUE_FIELD = BusinessErrorField(UpdateSettingCommand, "value")
|
|
|
32
36
|
|
|
33
37
|
@application_service(provides=SettingsManagementApplicationService)
|
|
34
38
|
class _SettingsManagementApplicationService(ApplicationService):
|
|
35
|
-
def __init__(
|
|
39
|
+
def __init__(
|
|
40
|
+
self,
|
|
41
|
+
catalog: SettingCatalog,
|
|
42
|
+
settings: SettingManager,
|
|
43
|
+
container: AsyncContainer,
|
|
44
|
+
runtime: _InvocationRuntime,
|
|
45
|
+
) -> None:
|
|
36
46
|
self._catalog = catalog
|
|
37
47
|
self._settings = settings
|
|
48
|
+
self._container = container
|
|
49
|
+
self._runtime = runtime
|
|
38
50
|
|
|
39
51
|
@authorize(SETTINGS_READ)
|
|
40
52
|
async def get_list(self) -> tuple[SettingView, ...]:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
53
|
+
result: list[SettingView] = []
|
|
54
|
+
for definition in self._catalog.definitions:
|
|
55
|
+
if definition.management_access is SettingManagementAccess.HIDDEN:
|
|
56
|
+
continue
|
|
57
|
+
try:
|
|
58
|
+
await self._check_permissions(definition.read_permission)
|
|
59
|
+
except PermissionDeniedError:
|
|
60
|
+
continue
|
|
61
|
+
result.append(_view(definition, await self.setting_provider.snapshot(definition)))
|
|
62
|
+
return tuple(result)
|
|
47
63
|
|
|
48
64
|
@authorize(SETTINGS_READ)
|
|
49
65
|
async def get(self, name: str) -> SettingView:
|
|
50
66
|
definition = self._definition(name)
|
|
67
|
+
await self._check_permissions(definition.read_permission)
|
|
51
68
|
return _view(definition, await self.setting_provider.snapshot(definition))
|
|
52
69
|
|
|
53
|
-
@authorize(SETTINGS_WRITE)
|
|
70
|
+
@authorize(SETTINGS_READ, SETTINGS_WRITE)
|
|
54
71
|
async def update(self, name: str, command: UpdateSettingCommand) -> SettingWriteResult:
|
|
55
72
|
definition = self._definition(name)
|
|
73
|
+
await self._check_write(definition)
|
|
56
74
|
try:
|
|
57
75
|
# JSON 数组/日期须由 Pydantic 的 JSON 模式解释,不能误用 strict Python 输入语义。
|
|
58
76
|
value = definition._validate_json(json.dumps(command.value, allow_nan=False))
|
|
@@ -65,9 +83,10 @@ class _SettingsManagementApplicationService(ApplicationService):
|
|
|
65
83
|
setting=_view(definition, saved.snapshot), notification=saved.notification
|
|
66
84
|
)
|
|
67
85
|
|
|
68
|
-
@authorize(SETTINGS_WRITE)
|
|
86
|
+
@authorize(SETTINGS_READ, SETTINGS_WRITE)
|
|
69
87
|
async def reset(self, name: str, command: ResetSettingCommand) -> SettingWriteResult:
|
|
70
88
|
definition = self._definition(name)
|
|
89
|
+
await self._check_write(definition)
|
|
71
90
|
saved = await self._settings.reset(definition, expected_version=command.expected_version)
|
|
72
91
|
return SettingWriteResult(
|
|
73
92
|
setting=_view(definition, saved.snapshot), notification=saved.notification
|
|
@@ -75,10 +94,28 @@ class _SettingsManagementApplicationService(ApplicationService):
|
|
|
75
94
|
|
|
76
95
|
def _definition(self, name: str) -> SettingDefinition[Any]:
|
|
77
96
|
definition = self._catalog.get(name)
|
|
78
|
-
if definition is None:
|
|
97
|
+
if definition is None or definition.management_access is SettingManagementAccess.HIDDEN:
|
|
79
98
|
raise ResourceNotFoundError("Setting not found")
|
|
80
99
|
return definition
|
|
81
100
|
|
|
101
|
+
async def _check_write(self, definition: SettingDefinition[Any]) -> None:
|
|
102
|
+
if (
|
|
103
|
+
definition.management_access is not SettingManagementAccess.READ_WRITE
|
|
104
|
+
or SettingValueSource.RUNTIME not in definition.allowed_sources
|
|
105
|
+
):
|
|
106
|
+
raise PermissionDeniedError(permission=str(SETTINGS_WRITE))
|
|
107
|
+
# 写入响应包含完整快照;读权限须在校验设置值及执行保存前成立。
|
|
108
|
+
await self._check_permissions(definition.read_permission, definition.write_permission)
|
|
109
|
+
|
|
110
|
+
async def _check_permissions(self, *permissions: PermissionName | None) -> None:
|
|
111
|
+
required = tuple(dict.fromkeys(item for item in permissions if item is not None))
|
|
112
|
+
if required:
|
|
113
|
+
await _check_authorization(
|
|
114
|
+
self._container,
|
|
115
|
+
self._runtime.current_user,
|
|
116
|
+
_AuthorizationRequirement(True, required, False),
|
|
117
|
+
)
|
|
118
|
+
|
|
82
119
|
|
|
83
120
|
def _view(definition: SettingDefinition[Any], snapshot: SettingSnapshot[Any]) -> SettingView:
|
|
84
121
|
# HTTP DTO 是独立 JSON 副本;不会把内部不可变快照的容器直接交给调用方。
|
|
@@ -6,9 +6,11 @@ from dishka import Provider, Scope
|
|
|
6
6
|
|
|
7
7
|
from ..configuration import ConfigurationRoot
|
|
8
8
|
from .catalog import SettingCatalog
|
|
9
|
+
from .errors import SettingDefinitionError
|
|
9
10
|
from .manager import SettingManager
|
|
10
11
|
from .provider import SettingProvider
|
|
11
12
|
from .store import RuntimeSettingStore
|
|
13
|
+
from .values import SettingValueSource
|
|
12
14
|
|
|
13
15
|
|
|
14
16
|
def _provide_settings(
|
|
@@ -18,6 +20,18 @@ def _provide_settings(
|
|
|
18
20
|
*,
|
|
19
21
|
has_store: bool,
|
|
20
22
|
) -> None:
|
|
23
|
+
# 检查冻结的输入层,不能让存储覆盖或后续配置遮住被禁止的配置贡献。
|
|
24
|
+
for definition in catalog.definitions:
|
|
25
|
+
path = f"settings.{definition.name}"
|
|
26
|
+
if (
|
|
27
|
+
SettingValueSource.CONFIGURATION not in definition.allowed_sources
|
|
28
|
+
and configuration._section_inputs(path)
|
|
29
|
+
):
|
|
30
|
+
raise SettingDefinitionError(
|
|
31
|
+
setting=definition.name,
|
|
32
|
+
reason=f"configuration source is not allowed at {path}",
|
|
33
|
+
source=catalog.sources.get(definition.name),
|
|
34
|
+
)
|
|
21
35
|
if has_store:
|
|
22
36
|
|
|
23
37
|
def reader(store: RuntimeSettingStore) -> SettingProvider:
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from enum import Enum
|
|
5
6
|
from typing import Generic, TypeVar, cast, get_args, get_origin
|
|
6
7
|
|
|
7
8
|
from pydantic import BaseModel, Secret, SecretBytes, SecretStr, TypeAdapter, ValidationError
|
|
8
9
|
|
|
10
|
+
from ..authorization import PermissionName
|
|
9
11
|
from ..configuration.immutability import (
|
|
10
12
|
_serialization_value,
|
|
11
13
|
freeze_typed_value,
|
|
@@ -13,16 +15,65 @@ from ..configuration.immutability import (
|
|
|
13
15
|
)
|
|
14
16
|
from ..configuration.values import _looks_secret_name, canonical_path
|
|
15
17
|
from .errors import RuntimeSettingError, SettingDefinitionError
|
|
18
|
+
from .values import SettingValueSource
|
|
16
19
|
|
|
17
20
|
_T = TypeVar("_T")
|
|
18
21
|
_MISSING = object()
|
|
22
|
+
_ALL_VALUE_SOURCES = frozenset(
|
|
23
|
+
source for source in SettingValueSource if source is not SettingValueSource.UNSET
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class SettingManagementAccess(str, Enum):
|
|
28
|
+
"""只限制通用管理入口;内部读写仍遵守设置自身的来源与值契约。"""
|
|
29
|
+
|
|
30
|
+
HIDDEN = "hidden"
|
|
31
|
+
READ_ONLY = "read_only"
|
|
32
|
+
READ_WRITE = "read_write"
|
|
19
33
|
|
|
20
34
|
|
|
21
35
|
class SettingDefinition(Generic[_T]):
|
|
22
|
-
__slots__ = (
|
|
36
|
+
__slots__ = (
|
|
37
|
+
"_adapter",
|
|
38
|
+
"_allowed_sources",
|
|
39
|
+
"_default",
|
|
40
|
+
"_management_access",
|
|
41
|
+
"_name",
|
|
42
|
+
"_read_permission",
|
|
43
|
+
"_value_type",
|
|
44
|
+
"_write_permission",
|
|
45
|
+
)
|
|
23
46
|
|
|
24
|
-
def __init__(
|
|
47
|
+
def __init__(
|
|
48
|
+
self,
|
|
49
|
+
name: str,
|
|
50
|
+
value_type: type[_T],
|
|
51
|
+
*,
|
|
52
|
+
default: object = _MISSING,
|
|
53
|
+
allowed_sources: frozenset[SettingValueSource] = _ALL_VALUE_SOURCES,
|
|
54
|
+
management_access: SettingManagementAccess = SettingManagementAccess.READ_WRITE,
|
|
55
|
+
read_permission: PermissionName | None = None,
|
|
56
|
+
write_permission: PermissionName | None = None,
|
|
57
|
+
) -> None:
|
|
25
58
|
_validate_setting_name(name)
|
|
59
|
+
if (
|
|
60
|
+
not isinstance(allowed_sources, frozenset)
|
|
61
|
+
or not allowed_sources
|
|
62
|
+
or any(
|
|
63
|
+
not isinstance(source, SettingValueSource) or source is SettingValueSource.UNSET
|
|
64
|
+
for source in allowed_sources
|
|
65
|
+
)
|
|
66
|
+
):
|
|
67
|
+
raise SettingDefinitionError(
|
|
68
|
+
setting=name, reason="allowed_sources must contain value sources, not UNSET"
|
|
69
|
+
)
|
|
70
|
+
if not isinstance(management_access, SettingManagementAccess):
|
|
71
|
+
raise SettingDefinitionError(setting=name, reason="invalid management_access")
|
|
72
|
+
for permission in (read_permission, write_permission):
|
|
73
|
+
if permission is not None and not isinstance(permission, PermissionName):
|
|
74
|
+
raise SettingDefinitionError(
|
|
75
|
+
setting=name, reason="permissions must be PermissionName values"
|
|
76
|
+
)
|
|
26
77
|
if not isinstance(value_type, type):
|
|
27
78
|
raise SettingDefinitionError(setting=name, reason="value_type must be a runtime type")
|
|
28
79
|
if _contains_secret_type(value_type):
|
|
@@ -46,6 +97,10 @@ class SettingDefinition(Generic[_T]):
|
|
|
46
97
|
self._value_type = value_type
|
|
47
98
|
self._adapter = adapter
|
|
48
99
|
self._default = validated_default
|
|
100
|
+
self._allowed_sources = allowed_sources
|
|
101
|
+
self._management_access = management_access
|
|
102
|
+
self._read_permission = read_permission
|
|
103
|
+
self._write_permission = write_permission
|
|
49
104
|
|
|
50
105
|
@property
|
|
51
106
|
def name(self) -> str:
|
|
@@ -59,6 +114,22 @@ class SettingDefinition(Generic[_T]):
|
|
|
59
114
|
def has_default(self) -> bool:
|
|
60
115
|
return self._default is not _MISSING
|
|
61
116
|
|
|
117
|
+
@property
|
|
118
|
+
def allowed_sources(self) -> frozenset[SettingValueSource]:
|
|
119
|
+
return self._allowed_sources
|
|
120
|
+
|
|
121
|
+
@property
|
|
122
|
+
def management_access(self) -> SettingManagementAccess:
|
|
123
|
+
return self._management_access
|
|
124
|
+
|
|
125
|
+
@property
|
|
126
|
+
def read_permission(self) -> PermissionName | None:
|
|
127
|
+
return self._read_permission
|
|
128
|
+
|
|
129
|
+
@property
|
|
130
|
+
def write_permission(self) -> PermissionName | None:
|
|
131
|
+
return self._write_permission
|
|
132
|
+
|
|
62
133
|
def _validate_python(self, value: object) -> _T:
|
|
63
134
|
return cast(
|
|
64
135
|
_T, freeze_typed_value(self._adapter.validate_python(value), allow_secrets=False)
|
|
@@ -49,7 +49,7 @@ class SettingManager:
|
|
|
49
49
|
async def update(
|
|
50
50
|
self, definition: SettingDefinition[_T], value: _T, *, expected_version: UUID | None
|
|
51
51
|
) -> SettingWriteOutcome[_T]:
|
|
52
|
-
self.
|
|
52
|
+
self._require_write(definition, operation="set")
|
|
53
53
|
try:
|
|
54
54
|
validated, serialized = definition._dump_json(value)
|
|
55
55
|
except (TypeError, ValidationError, PydanticSerializationError):
|
|
@@ -68,13 +68,20 @@ class SettingManager:
|
|
|
68
68
|
async def reset(
|
|
69
69
|
self, definition: SettingDefinition[_T], *, expected_version: UUID | None
|
|
70
70
|
) -> SettingWriteOutcome[_T]:
|
|
71
|
-
self.
|
|
71
|
+
self._require_write(definition, operation="reset")
|
|
72
72
|
# 默认值先校验,不能在物理删除已经提交之后再抛出配置校验失败。
|
|
73
73
|
fallback = self._provider._resolve(definition, StoredSetting(None, expected_version))
|
|
74
74
|
saved = await self._store.write(definition.name, None, expected_version=expected_version)
|
|
75
75
|
snapshot = SettingSnapshot(definition.name, fallback.value, fallback.source, saved.version)
|
|
76
76
|
return SettingWriteOutcome(snapshot, await self._committed(definition.name))
|
|
77
77
|
|
|
78
|
+
def _require_write(self, definition: SettingDefinition[Any], *, operation: str) -> None:
|
|
79
|
+
self._catalog.require_owned(definition)
|
|
80
|
+
if SettingValueSource.RUNTIME not in definition.allowed_sources:
|
|
81
|
+
raise RuntimeSettingError(
|
|
82
|
+
setting=definition.name, operation=operation, error_type="SourceNotAllowed"
|
|
83
|
+
)
|
|
84
|
+
|
|
78
85
|
async def _committed(self, name: str) -> NotificationPublishStatus:
|
|
79
86
|
# 本地刷新先入队;Redis 降级不会撤销短事务已经提交的结果。
|
|
80
87
|
if self._refresh is not None:
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from dishka import DEFAULT_COMPONENT, DependencyKey, Provider, Scope
|
|
4
4
|
|
|
5
|
+
from ..authorization.module import AuthorizationModule
|
|
5
6
|
from ..lifecycle import ConfigureContext
|
|
6
7
|
from ..modularity import AppModule, ModuleRef
|
|
7
8
|
from ..services.composition import (
|
|
@@ -12,6 +13,7 @@ from ..services.composition import (
|
|
|
12
13
|
from ..services.registration import RegistrationDecision, RegistrationKind
|
|
13
14
|
from .binding import _provide_settings
|
|
14
15
|
from .catalog import SettingCatalog, _build_setting_catalog, _contribute_setting_handler_defaults
|
|
16
|
+
from .errors import SettingDefinitionError
|
|
15
17
|
from .store import RuntimeSettingStore
|
|
16
18
|
|
|
17
19
|
|
|
@@ -57,3 +59,19 @@ class SettingsManagementModule(AppModule):
|
|
|
57
59
|
"python_ddd_framework.settings.application",
|
|
58
60
|
"python_ddd_framework.settings.permissions",
|
|
59
61
|
)
|
|
62
|
+
|
|
63
|
+
def configure(self, context: ConfigureContext) -> None:
|
|
64
|
+
context.services.add_composition(ServiceComposition(bind=self._bind))
|
|
65
|
+
|
|
66
|
+
def _bind(self, context: ServiceBindingContext) -> None:
|
|
67
|
+
# 全局 discovery 屏障后核对实际权限目录;只读 Settings 无需装配授权服务。
|
|
68
|
+
catalog = context.modules.instance(SettingsModule).catalog
|
|
69
|
+
permissions = context.modules.instance(AuthorizationModule).catalog
|
|
70
|
+
for definition in catalog.definitions:
|
|
71
|
+
for permission in (definition.read_permission, definition.write_permission):
|
|
72
|
+
if permission is not None and permission not in permissions:
|
|
73
|
+
raise SettingDefinitionError(
|
|
74
|
+
setting=definition.name,
|
|
75
|
+
reason=f"permission {permission} is not defined",
|
|
76
|
+
source=catalog.sources.get(definition.name),
|
|
77
|
+
)
|
|
@@ -43,7 +43,7 @@ class SettingProvider:
|
|
|
43
43
|
self._catalog.require_owned(definition)
|
|
44
44
|
stored = (
|
|
45
45
|
await self._store.read(definition.name)
|
|
46
|
-
if self._store is not None
|
|
46
|
+
if self._store is not None and SettingValueSource.RUNTIME in definition.allowed_sources
|
|
47
47
|
else StoredSetting(None, None)
|
|
48
48
|
)
|
|
49
49
|
return self._resolve(definition, stored)
|
|
@@ -56,11 +56,18 @@ class SettingProvider:
|
|
|
56
56
|
value = definition._validate_json(stored.value_json)
|
|
57
57
|
source = SettingValueSource.RUNTIME
|
|
58
58
|
else:
|
|
59
|
-
configured =
|
|
59
|
+
configured = (
|
|
60
|
+
self._configuration.get_path(f"settings.{definition.name}", _MISSING)
|
|
61
|
+
if SettingValueSource.CONFIGURATION in definition.allowed_sources
|
|
62
|
+
else _MISSING
|
|
63
|
+
)
|
|
60
64
|
if configured is not _MISSING:
|
|
61
65
|
value = definition._validate_python(configured)
|
|
62
66
|
source = SettingValueSource.CONFIGURATION
|
|
63
|
-
elif
|
|
67
|
+
elif (
|
|
68
|
+
definition.has_default
|
|
69
|
+
and SettingValueSource.DEFINITION in definition.allowed_sources
|
|
70
|
+
):
|
|
64
71
|
value = definition._default_value()
|
|
65
72
|
source = SettingValueSource.DEFINITION
|
|
66
73
|
else:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|