orchestrator-core 2.9.1rc1__tar.gz → 2.9.2rc1__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.
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.bumpversion.cfg +1 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/workflows/run-unit-tests.yml +1 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/PKG-INFO +1 -1
- orchestrator_core-2.9.2rc1/docs/architecture/product_modelling/backfilling.md +77 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/mkdocs.yml +1 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/__init__.py +1 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/endpoints/processes.py +1 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +9 -2
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/models.py +2 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/devtools/populator.py +18 -5
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/domain/base.py +6 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/domain/customer_description.py +9 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/mutations/customer_description.py +7 -4
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/subscription.py +1 -0
- orchestrator_core-2.9.2rc1/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +64 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/subscription.py +1 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/subscription_descriptions.py +8 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/enrich_process.py +1 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/errors.py +8 -0
- orchestrator_core-2.9.2rc1/orchestrator/utils/validate_data_version.py +2 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflows/translations/en-GB.json +1 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflows/utils.py +15 -3
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_processes.py +48 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_subscription_customer_descriptions.py +55 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_subscriptions.py +2 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/domain/test_base.py +2 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/mutations/test_customer_description.py +85 -2
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_subscriptions.py +7 -2
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/services/test_subscriptions.py +1 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/test_db.py +1 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.coveragerc +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/dependabot.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/workflows/README.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/workflows/build-push-container.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/workflows/changelog.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/workflows/codeql-analysis.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/workflows/gh-pages.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/workflows/issues.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/workflows/publish-package.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/workflows/run-linting-tests.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.github/workflows/scheduled-build.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.gitignore +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.pre-commit-config.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/.stignore +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/CHANGELOG.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/Dockerfile +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/LICENSE +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/NOTICE +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/README.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/codecov.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/application/domainmodels.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/application/forms-frontend.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/application/tasks.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/application/workflow.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/framework.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/img/base-orchestrator-setup.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/img/custom-orchestrator-setup.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/orchestration/img/Custom-orchestrator-ui-using-override.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/orchestration/img/Standard-orchestrator-ui.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/orchestration/orchestrator-ui.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/orchestration/philosophy.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/context.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/imports.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/introduction.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/ip_static.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/ip_static.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/l2_point_to_point.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/l2_point_to_point.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/l2_vpn.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/l2_vpn.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/modelling.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/node.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/node.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/port.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/port.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/product_block_graph.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/product_block_graph.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/standards.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/product_modelling/terminology.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/architecture/tldr.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/contributing/development.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/contributing/guidelines.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/contributing/testing.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/css/custom.css +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/css/style.css +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/css/termynal.css +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/getting-started/base.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/getting-started/docker.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/getting-started/orchestration-ui.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/getting-started/prepare-source-folder.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/getting-started/versions.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/img/WFO-Emblem-White.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/img/favicon.ico +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/index.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/js/custom.js +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/js/termynal.js +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/migration-guide/2.0.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/api.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/app/app.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/app/scaling.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/auth-backend-and-frontend.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/cli.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/database.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/generator.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/instantiating.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/model_attributes.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/overview.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/product_blocks.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/product_types.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/properties.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/pydantic_hooks.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/type_casting.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/union_types.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/domain_models/validation.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/forms.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/graphql.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/python.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/search.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/search_overview.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/serialization.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/tasks.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/tests.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/tldr.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/websockets.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/workflows/callbacks.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/workflows/workflow-lifecycles.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/reference-docs/workflows/workflow-steps.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/bootstrap.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/create-your-own.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/docker-installation.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/domain-models.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/execute-workflows.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/generator.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/l2_point_to_point.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/node-create.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/node-modify.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/node-terminate.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/node-validate.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/overview.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/scenario.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/workflow-basics.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/advanced/workflow-introduction.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/create-user-group.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/create-user.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/database-migration.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/debian.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/docker.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/domain-models.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/explore.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/input-forms.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/macos.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/modify-user-group.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/modify-user.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/register-workflows.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/start-applications.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/terminate-user-group.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/terminate-user.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/workflow-introduction.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/beginner/workshop-overview.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/images/Software-topology.drawio.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/images/clab_topology.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/images/metadata_products.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/images/netbox_devices_active.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/images/subscriptions.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/docs/workshops/images/topology.drawio.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/includes/abbreviations.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/mutmut_config.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/nitpick-style.toml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/api.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/endpoints/health.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/endpoints/products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/endpoints/subscriptions.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/endpoints/user.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/error_handling.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/api/models.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/app.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/database.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generate.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/custom_templates/README +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/enums.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/migration.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/translations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/unittest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/validations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/generator/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/enums.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/macros.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/product.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/helpers/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/helpers/input_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/helpers/print_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/main.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/migrate_domain_models.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/migrate_workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/migration_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/cli/scheduler.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/config/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/config/assignee.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/database.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/filters/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/filters/filters.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/filters/process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/filters/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/filters/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/filters/resource_type.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/filters/search_filters/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/filters/subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/filters/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/listeners.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/loaders.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/range/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/range/range.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/sorting/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/sorting/process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/sorting/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/sorting/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/sorting/resource_type.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/sorting/sorting.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/sorting/subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/db/sorting/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/devtools/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/devtools/scripts/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/devtools/scripts/migrate_20.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/distlock/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/distlock/distlock_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/distlock/managers/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/domain/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/domain/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/domain/lifecycle.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/exception_handlers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/forms/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/forms/validators/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/forms/validators/customer_contact_list.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/forms/validators/customer_id.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/forms/validators/display_subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/forms/validators/network_type_validators.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/forms/validators/product_id.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/autoregistration.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/extensions/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/extensions/stats.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/loaders/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/loaders/subscriptions.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/mutations/start_process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/pagination.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/resolvers/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/resolvers/customer.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/resolvers/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/resolvers/process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/resolvers/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/resolvers/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/resolvers/resource_type.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/resolvers/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/resolvers/subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/resolvers/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schema.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/customer.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/customer_description.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/errors.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/fixed_input.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/resource_type.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/schemas/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/utils/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/utils/override_class.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/log_config.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/README +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/alembic.ini +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/env.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/script.py.mako +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/templates/env.py.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/py.typed +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schedules/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schedules/resume_workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schedules/scheduling.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schedules/task_vacuum.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schedules/validate_products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schedules/validate_subscriptions.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/base.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/engine_settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/fixed_input.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/problem_detail.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/resource_type.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/security.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/celery.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/fixed_inputs.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/process_broadcast_thread.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/processes.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/resource_types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/subscription_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/subscriptions.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/tasks.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/translations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/services/workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/targets.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/crypt.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/datetime.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/deprecation_logger.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/docs.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/fixed_inputs.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/functional.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/get_subscription_dict.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/get_updated_properties.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/json.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/redis.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/search_query.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/state.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/strings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/version.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/websocket/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/websocket/websocket_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflows/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflows/modify_note.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflows/removed_workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflows/steps.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflows/tasks/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/workflows/tasks/validate_products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/pyproject.toml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/setup.cfg +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/setup.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/conftest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/fixtures/test_orchestrator/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/test_product_populator.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/fixtures/test_orchestrator/main.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/test_product_blocks.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/fixtures/test_orchestrator/products/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/fixtures/test_orchestrator/products/test_product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/fixtures/test_orchestrator/workflows/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/fixtures/test_orchestrator/workflows/create_test_product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/acceptance_tests/test_test_product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_caching.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_health.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_models.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_processes_ws.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_product_blocks.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_ws.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/conftest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/alembic.ini +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/main.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/migrations/env.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/migrations/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/migrations/script.py.mako +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_59e1199aff7f_create_data_head.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_85be1c80731c_add_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_ea9e6c9de75c_add_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-06-07_380a5b0c928c_add_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/products/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/products/product_blocks/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/products/product_blocks/example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/products/product_blocks/example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/products/product_blocks/example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/products/product_blocks/example4sub.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/products/product_types/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/products/product_types/example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/products/product_types/example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/products/product_types/example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_create_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_modify_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_terminate_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_validate_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_create_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_modify_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_terminate_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_validate_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_create_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_modify_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_terminate_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_validate_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/translations/en-GB.json +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example1/create_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example1/modify_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example1/shared/forms.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example1/terminate_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example1/validate_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example2/create_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example2/modify_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example2/shared/forms.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example2/terminate_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example4/create_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example4/modify_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example4/shared/forms.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/example4/terminate_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate/workflows/shared.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/generate.sh +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/invalid_product_config1.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/invalid_product_config2.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/product_config1.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/product_config2.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/product_config3.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/data/product_config4.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/generator/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/generator/test_enums.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/test_cli_generate.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/test_config_validation.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/test_generate_code.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/test_migrate_domain_models_with_instances.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/cli/test_migrate_domain_models_without_instances.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/config.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/conftest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/db/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/db/test_listeners.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/domain/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/domain/test_base_multiple.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/domain/test_base_with_list_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/domain/test_base_with_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/domain/test_lifecycle.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/processes.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_blocks/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_blocks/product_block_list_nested.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_blocks/product_block_one.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_blocks/product_block_one_nested.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_blocks/product_block_with_list_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_blocks/product_block_with_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_blocks/product_sub_block_one.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_blocks/product_sub_block_two.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/product_type_list_nested.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/product_type_list_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/product_type_list_union_overlap.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/product_type_one.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/product_type_one_nested.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/product_type_sub_list_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/product_type_sub_one.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/product_type_sub_two.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/product_type_sub_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/product_type_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/product_types/subscription_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/products/resource_types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/fixtures/workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/forms/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/forms/test_customer_contact_list.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/forms/test_customer_id.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/forms/test_display_subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/forms/test_generic_validators.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/conftest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/extensions/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/extensions/test_stats.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/mutations/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/mutations/test_start_process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_customer.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_processes.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_product_blocks.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_resource_types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_sort_and_filter_fields.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_subscription_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/test_workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/utils/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/utils/fixtures.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/utils/test_autoregistration.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/utils/test_get_query_loaders.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/utils/test_get_selected_paths.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/utils/test_is_query_detailed.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/utils/test_is_querying_page_data.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/graphql/utils/test_override_class.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/schedules/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/schedules/test_scheduling.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/services/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/services/test_processes.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/services/test_products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/services/test_subscription_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/services/test_translations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/test_types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/test_workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/utils/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/utils/get_subscription_dict.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/utils/test_datetime.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/utils/test_errors.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/utils/test_functional.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/utils/test_get_updated_properties.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/utils/test_json.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/utils/test_search_query.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/utils/test_state.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/utils/test_strings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/websocket/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/websocket/test_broadcast.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/conftest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/shared/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/shared/test_validate_subscriptions.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/tasks/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/tasks/test_clean_up_task_log.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/tasks/test_resume_workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/tasks/test_validate_products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/test_async_workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/test_config_db_code.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/test_generic_workflow_steps.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/workflows/test_modify_note.py +0 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Backfilling Existing Subscriptions
|
|
2
|
+
When updating a product block that already exists in your orchestrator, it could be the case that new attributes are
|
|
3
|
+
added or removed. When removing resource types from a `ProductBlock`, the `migrate-domain-models` command is able to
|
|
4
|
+
pick up on this change, and generates a migration that removes these resource types from your database completely.
|
|
5
|
+
|
|
6
|
+
However, when adding a new resource type to a `ProductBlock`, pre-existing product instances in the subscription
|
|
7
|
+
database are not backfilled. For this, another SQL transaction must be added to the generated migration file.
|
|
8
|
+
|
|
9
|
+
## Generating a Database Migration
|
|
10
|
+
After the new resource type is added to the product block, the generated migration file should already contain at least the following two transactions:
|
|
11
|
+
|
|
12
|
+
```python
|
|
13
|
+
conn.execute(sa.text("""
|
|
14
|
+
INSERT INTO resource_types (resource_type, description) VALUES ('site_contains_optical_equipment', 'Whether a site contains optical equipment') RETURNING resource_types.resource_type_id
|
|
15
|
+
"""))
|
|
16
|
+
|
|
17
|
+
conn.execute(sa.text("""
|
|
18
|
+
INSERT INTO product_block_resource_types (product_block_id, resource_type_id) VALUES ((SELECT product_blocks.product_block_id FROM product_blocks WHERE product_blocks.name IN ('SiteBlock')), (SELECT resource_types.resource_type_id FROM resource_types WHERE resource_types.resource_type IN ('site_contains_optical_equipment')))
|
|
19
|
+
"""))
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Note that this will correctly add the new resource type to the database, but is missing a backfill for a default value.
|
|
23
|
+
In the case of this example, a new resource type `site_contains_optical_equipment` is added. Assume that all
|
|
24
|
+
subscriptions that already exist in the database already are sites that contain optical equipment. It would therefore
|
|
25
|
+
make sense to backfill the value `True` into all subscriptions that already exist.
|
|
26
|
+
|
|
27
|
+
## Adapting the Generated Database Migration
|
|
28
|
+
To implement this backfilling mechanism, only one SQL statement needs to be added to the migration, given below.
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
conn.execute(sa.text("""
|
|
32
|
+
WITH rt_id AS (SELECT resource_type_id FROM resource_types WHERE resource_type = 'site_contains_optical_equipment') INSERT INTO subscription_instance_values (subscription_instance_id, resource_type_id, value) SELECT subscription_instance_id, rt_id.resource_type_id, 'True' FROM rt_id, subscription_instances WHERE product_block_id = (SELECT product_block_id FROM product_blocks WHERE name = 'SiteBlock');
|
|
33
|
+
"""))
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Adding this statement at the end of the `upgrade()` method in the generated migration file, will set the value of
|
|
37
|
+
`site_contains_optical_equipment` in all existing Site subscriptions to `True`. A more formatted version of this SQL
|
|
38
|
+
statement is given here. To adapt this example to your needs, update the resource type name, default value, and name of
|
|
39
|
+
the product block where this resource type is added.
|
|
40
|
+
|
|
41
|
+
```sql
|
|
42
|
+
WITH rt_id AS (
|
|
43
|
+
SELECT
|
|
44
|
+
resource_type_id
|
|
45
|
+
FROM
|
|
46
|
+
resource_types
|
|
47
|
+
WHERE
|
|
48
|
+
-- The name of your new resource type
|
|
49
|
+
resource_type = 'site_contains_optical_equipment'
|
|
50
|
+
)
|
|
51
|
+
INSERT INTO
|
|
52
|
+
subscription_instance_values (
|
|
53
|
+
subscription_instance_id,
|
|
54
|
+
resource_type_id,
|
|
55
|
+
value
|
|
56
|
+
)
|
|
57
|
+
SELECT
|
|
58
|
+
subscription_instance_id,
|
|
59
|
+
rt_id.resource_type_id,
|
|
60
|
+
'True' -- The new value that is backfilled
|
|
61
|
+
FROM
|
|
62
|
+
rt_id,
|
|
63
|
+
subscription_instances
|
|
64
|
+
WHERE
|
|
65
|
+
product_block_id = (
|
|
66
|
+
SELECT
|
|
67
|
+
product_block_id
|
|
68
|
+
FROM
|
|
69
|
+
product_blocks
|
|
70
|
+
WHERE
|
|
71
|
+
-- The name of the product block where this value is backfilled
|
|
72
|
+
name = 'SiteBlock'
|
|
73
|
+
);
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
The `downgrade()` method of the generated migration does not need any modification to work. It simply removes the
|
|
77
|
+
resource type from the subscription database altogether.
|
|
@@ -145,6 +145,7 @@ nav:
|
|
|
145
145
|
- IP Static: architecture/product_modelling/ip_static.md
|
|
146
146
|
- Product Block Graph: architecture/product_modelling/product_block_graph.md
|
|
147
147
|
- Importing Existing Products: architecture/product_modelling/imports.md
|
|
148
|
+
- Backfilling Existing Subscriptions: architecture/product_modelling/backfilling.md
|
|
148
149
|
- Getting Started:
|
|
149
150
|
- Prerequisites: getting-started/versions.md
|
|
150
151
|
- Base Application:
|
|
@@ -133,7 +133,7 @@ def delete(process_id: UUID) -> None:
|
|
|
133
133
|
status_code=HTTPStatus.CREATED,
|
|
134
134
|
dependencies=[Depends(check_global_lock, use_cache=False)],
|
|
135
135
|
)
|
|
136
|
-
def new_process(
|
|
136
|
+
async def new_process(
|
|
137
137
|
workflow_key: str,
|
|
138
138
|
request: Request,
|
|
139
139
|
json_data: list[dict[str, Any]] | None = Body(...),
|
|
@@ -26,6 +26,8 @@ from orchestrator.domain.customer_description import (
|
|
|
26
26
|
update_subscription_customer_description,
|
|
27
27
|
)
|
|
28
28
|
from orchestrator.schemas import SubscriptionDescriptionBaseSchema, SubscriptionDescriptionSchema
|
|
29
|
+
from orchestrator.schemas.subscription_descriptions import UpdateSubscriptionDescriptionSchema
|
|
30
|
+
from orchestrator.utils.errors import StaleDataError
|
|
29
31
|
from orchestrator.utils.redis import delete_from_redis
|
|
30
32
|
|
|
31
33
|
router = APIRouter()
|
|
@@ -37,10 +39,15 @@ async def save_subscription_customer_description_endpoint(data: SubscriptionDesc
|
|
|
37
39
|
|
|
38
40
|
|
|
39
41
|
@router.put("/", response_model=None, status_code=HTTPStatus.NO_CONTENT)
|
|
40
|
-
async def update_subscription_customer_description_endpoint(
|
|
42
|
+
async def update_subscription_customer_description_endpoint(
|
|
43
|
+
data: UpdateSubscriptionDescriptionSchema = Body(...),
|
|
44
|
+
) -> None:
|
|
41
45
|
description = get_customer_description_by_customer_subscription(data.customer_id, data.subscription_id)
|
|
42
46
|
if description:
|
|
43
|
-
|
|
47
|
+
try:
|
|
48
|
+
await update_subscription_customer_description(description, data.description, data.created_at, data.version)
|
|
49
|
+
except StaleDataError as error:
|
|
50
|
+
raise_status(HTTPStatus.BAD_REQUEST, str(error))
|
|
44
51
|
|
|
45
52
|
|
|
46
53
|
@router.delete("/{_id}", response_model=None, status_code=HTTPStatus.NO_CONTENT)
|
|
@@ -554,6 +554,7 @@ class SubscriptionCustomerDescriptionTable(BaseModel):
|
|
|
554
554
|
customer_id = mapped_column(String, nullable=False, index=True)
|
|
555
555
|
description = mapped_column(Text(), nullable=False)
|
|
556
556
|
created_at = mapped_column(UtcTimestamp, nullable=False, server_default=text("current_timestamp()"))
|
|
557
|
+
version = mapped_column(Integer, nullable=False, server_default="1")
|
|
557
558
|
|
|
558
559
|
subscription = relationship("SubscriptionTable", back_populates="customer_descriptions")
|
|
559
560
|
|
|
@@ -572,6 +573,7 @@ class SubscriptionTable(BaseModel):
|
|
|
572
573
|
start_date = mapped_column(UtcTimestamp, nullable=True)
|
|
573
574
|
end_date = mapped_column(UtcTimestamp)
|
|
574
575
|
note = mapped_column(Text())
|
|
576
|
+
version = mapped_column(Integer, nullable=False, server_default="1")
|
|
575
577
|
|
|
576
578
|
product = relationship("ProductTable", foreign_keys=[product_id])
|
|
577
579
|
instances = relationship(
|
{orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/devtools/populator.py
RENAMED
|
@@ -435,16 +435,29 @@ class Populator:
|
|
|
435
435
|
self.log.info("Providing user input.")
|
|
436
436
|
|
|
437
437
|
user_inputs: list[State] = [self.get_form_data(form)] if form else []
|
|
438
|
+
# Keep submitting the form until it has been successfully submitted
|
|
438
439
|
while True:
|
|
439
440
|
self.log.info("Submitting user input", data=user_inputs)
|
|
440
441
|
response = self.session.request(method, url, json=user_inputs)
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
442
|
+
self.log.debug("Response", response=response.content)
|
|
443
|
+
|
|
444
|
+
# Return the response if the form has been successfully submitted
|
|
444
445
|
if response.status_code != HTTPStatus.NOT_EXTENDED:
|
|
445
446
|
return response
|
|
446
|
-
|
|
447
|
-
|
|
447
|
+
|
|
448
|
+
response_json = response.json()
|
|
449
|
+
meta = response_json.get("meta", {}) or {}
|
|
450
|
+
no_next = meta.get("hasNext") is False
|
|
451
|
+
is_summary_form = response_json.get("form", {}).get("title", "").endswith("Summary")
|
|
452
|
+
|
|
453
|
+
# If there are no next pages and a summary form is expected then append an empty form/dict
|
|
454
|
+
if no_next and is_summary_form:
|
|
455
|
+
self.log.info("Append empty form", response=response_json)
|
|
456
|
+
user_inputs.append({})
|
|
457
|
+
# Otherwise resolve the values for the input fields on the form
|
|
458
|
+
else:
|
|
459
|
+
input_fields = response_json["form"]
|
|
460
|
+
user_inputs.append(self.get_form_data(input_fields))
|
|
448
461
|
|
|
449
462
|
def reset(self) -> None:
|
|
450
463
|
"""Reset internal state."""
|
|
@@ -1017,6 +1017,7 @@ class SubscriptionModel(DomainModel):
|
|
|
1017
1017
|
start_date: datetime | None = None # pragma: no mutate
|
|
1018
1018
|
end_date: datetime | None = None # pragma: no mutate
|
|
1019
1019
|
note: str | None = None # pragma: no mutate
|
|
1020
|
+
version: int = 1 # pragma: no mutate
|
|
1020
1021
|
|
|
1021
1022
|
def __new__(cls, *args: Any, status: SubscriptionLifecycle | None = None, **kwargs: Any) -> "SubscriptionModel":
|
|
1022
1023
|
# status can be none if created during change_lifecycle
|
|
@@ -1108,6 +1109,7 @@ class SubscriptionModel(DomainModel):
|
|
|
1108
1109
|
start_date: datetime | None = None,
|
|
1109
1110
|
end_date: datetime | None = None,
|
|
1110
1111
|
note: str | None = None,
|
|
1112
|
+
version: int = 1,
|
|
1111
1113
|
) -> S:
|
|
1112
1114
|
"""Use product_id (and customer_id) to return required fields of a new empty subscription."""
|
|
1113
1115
|
# Caller wants a new instance and provided a product_id and customer_id
|
|
@@ -1140,6 +1142,7 @@ class SubscriptionModel(DomainModel):
|
|
|
1140
1142
|
start_date=start_date,
|
|
1141
1143
|
end_date=end_date,
|
|
1142
1144
|
note=note,
|
|
1145
|
+
version=version,
|
|
1143
1146
|
)
|
|
1144
1147
|
db.session.add(subscription)
|
|
1145
1148
|
|
|
@@ -1156,6 +1159,7 @@ class SubscriptionModel(DomainModel):
|
|
|
1156
1159
|
start_date=start_date,
|
|
1157
1160
|
end_date=end_date,
|
|
1158
1161
|
note=note,
|
|
1162
|
+
version=version,
|
|
1159
1163
|
**fixed_inputs,
|
|
1160
1164
|
**instances,
|
|
1161
1165
|
)
|
|
@@ -1270,6 +1274,7 @@ class SubscriptionModel(DomainModel):
|
|
|
1270
1274
|
start_date=subscription.start_date,
|
|
1271
1275
|
end_date=subscription.end_date,
|
|
1272
1276
|
note=subscription.note,
|
|
1277
|
+
version=subscription.version,
|
|
1273
1278
|
**fixed_inputs,
|
|
1274
1279
|
**instances,
|
|
1275
1280
|
)
|
|
@@ -1320,6 +1325,7 @@ class SubscriptionModel(DomainModel):
|
|
|
1320
1325
|
start_date=subscription.start_date,
|
|
1321
1326
|
end_date=subscription.end_date,
|
|
1322
1327
|
note=subscription.note,
|
|
1328
|
+
version=subscription.version,
|
|
1323
1329
|
**fixed_inputs,
|
|
1324
1330
|
**instances,
|
|
1325
1331
|
)
|
|
@@ -20,7 +20,9 @@ from sqlalchemy import select
|
|
|
20
20
|
|
|
21
21
|
from orchestrator.api.models import delete
|
|
22
22
|
from orchestrator.db import SubscriptionCustomerDescriptionTable, db
|
|
23
|
+
from orchestrator.utils.errors import StaleDataError
|
|
23
24
|
from orchestrator.utils.redis import delete_subscription_from_redis
|
|
25
|
+
from orchestrator.utils.validate_data_version import validate_data_version
|
|
24
26
|
from orchestrator.websocket import invalidate_subscription_cache
|
|
25
27
|
|
|
26
28
|
router = APIRouter()
|
|
@@ -53,8 +55,14 @@ async def create_subscription_customer_description(
|
|
|
53
55
|
|
|
54
56
|
@delete_subscription_from_redis()
|
|
55
57
|
async def update_subscription_customer_description(
|
|
56
|
-
customer_description: SubscriptionCustomerDescriptionTable,
|
|
58
|
+
customer_description: SubscriptionCustomerDescriptionTable,
|
|
59
|
+
description: str,
|
|
60
|
+
created_at: datetime | None = None,
|
|
61
|
+
version: int | None = None,
|
|
57
62
|
) -> SubscriptionCustomerDescriptionTable:
|
|
63
|
+
if not validate_data_version(customer_description.version, version):
|
|
64
|
+
raise StaleDataError(customer_description.version, version)
|
|
65
|
+
|
|
58
66
|
customer_description.description = description
|
|
59
67
|
customer_description.created_at = created_at if created_at else datetime.now(tz=timezone("UTC"))
|
|
60
68
|
db.session.commit()
|
|
@@ -25,25 +25,28 @@ from orchestrator.domain.customer_description import (
|
|
|
25
25
|
)
|
|
26
26
|
from orchestrator.graphql.schemas.customer_description import CustomerDescription
|
|
27
27
|
from orchestrator.graphql.types import MutationError, NotFoundError
|
|
28
|
+
from orchestrator.utils.errors import StaleDataError
|
|
28
29
|
|
|
29
30
|
logger = structlog.get_logger(__name__)
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
async def upsert_customer_description(
|
|
33
|
-
customer_id: str, subscription_id: UUID, description: str
|
|
34
|
+
customer_id: str, subscription_id: UUID, description: str, version: int | None
|
|
34
35
|
) -> SubscriptionCustomerDescriptionTable | NotFoundError:
|
|
35
36
|
current_description = get_customer_description_by_customer_subscription(customer_id, subscription_id)
|
|
36
37
|
|
|
37
38
|
if current_description:
|
|
38
|
-
return await update_subscription_customer_description(current_description, description)
|
|
39
|
+
return await update_subscription_customer_description(current_description, description, version=version)
|
|
39
40
|
return await create_subscription_customer_description(customer_id, subscription_id, description)
|
|
40
41
|
|
|
41
42
|
|
|
42
43
|
async def resolve_upsert_customer_description(
|
|
43
|
-
customer_id: str, subscription_id: UUID, description: str
|
|
44
|
+
customer_id: str, subscription_id: UUID, description: str, version: int | None = None
|
|
44
45
|
) -> CustomerDescription | NotFoundError | MutationError:
|
|
45
46
|
try:
|
|
46
|
-
customer_description = await upsert_customer_description(customer_id, subscription_id, description)
|
|
47
|
+
customer_description = await upsert_customer_description(customer_id, subscription_id, description, version)
|
|
48
|
+
except StaleDataError as error:
|
|
49
|
+
return MutationError(message=str(error))
|
|
47
50
|
except Exception:
|
|
48
51
|
return NotFoundError(message="Subscription not found")
|
|
49
52
|
return CustomerDescription.from_pydantic(customer_description) # type: ignore
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"""Add version column to subscription and subscription customer descriptions.
|
|
2
|
+
|
|
3
|
+
Revision ID: 4c5859620539
|
|
4
|
+
Revises: 460ec6748e37
|
|
5
|
+
Create Date: 2025-01-08 15:07:41.957937
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import sqlalchemy as sa
|
|
10
|
+
from alembic import op
|
|
11
|
+
|
|
12
|
+
# revision identifiers, used by Alembic.
|
|
13
|
+
revision = "4c5859620539"
|
|
14
|
+
down_revision = "460ec6748e37"
|
|
15
|
+
branch_labels = None
|
|
16
|
+
depends_on = None
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def upgrade() -> None:
|
|
20
|
+
conn = op.get_bind()
|
|
21
|
+
op.add_column(
|
|
22
|
+
"subscription_customer_descriptions", sa.Column("version", sa.Integer(), server_default="1", nullable=False)
|
|
23
|
+
)
|
|
24
|
+
op.add_column("subscriptions", sa.Column("version", sa.Integer(), server_default="1", nullable=False))
|
|
25
|
+
|
|
26
|
+
conn.execute(
|
|
27
|
+
sa.text(
|
|
28
|
+
"""
|
|
29
|
+
CREATE OR REPLACE FUNCTION increment_version()
|
|
30
|
+
RETURNS TRIGGER AS $$
|
|
31
|
+
BEGIN
|
|
32
|
+
NEW.version := OLD.version + 1;
|
|
33
|
+
RETURN NEW;
|
|
34
|
+
END;
|
|
35
|
+
$$ LANGUAGE plpgsql;
|
|
36
|
+
|
|
37
|
+
CREATE TRIGGER subscriptions_increment_version_trigger
|
|
38
|
+
BEFORE UPDATE ON subscriptions
|
|
39
|
+
FOR EACH ROW
|
|
40
|
+
EXECUTE FUNCTION increment_version();
|
|
41
|
+
|
|
42
|
+
CREATE TRIGGER subscription_customer_descriptions_increment_version_trigger
|
|
43
|
+
BEFORE UPDATE ON subscription_customer_descriptions
|
|
44
|
+
FOR EACH ROW
|
|
45
|
+
EXECUTE FUNCTION increment_version();
|
|
46
|
+
"""
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def downgrade() -> None:
|
|
52
|
+
conn = op.get_bind()
|
|
53
|
+
op.drop_column("subscriptions", "version")
|
|
54
|
+
op.drop_column("subscription_customer_descriptions", "version")
|
|
55
|
+
|
|
56
|
+
conn.execute(
|
|
57
|
+
sa.text(
|
|
58
|
+
"""
|
|
59
|
+
DROP TRIGGER IF EXISTS subscriptions_increment_version_trigger on subscriptions;
|
|
60
|
+
DROP TRIGGER IF EXISTS subscription_customer_descriptions_increment_version_trigger on subscription_customer_descriptions;
|
|
61
|
+
DROP FUNCTION IF EXISTS increment_version;
|
|
62
|
+
"""
|
|
63
|
+
)
|
|
64
|
+
)
|
{orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/schemas/subscription.py
RENAMED
|
@@ -84,6 +84,7 @@ class SubscriptionSchema(SubscriptionBaseSchema):
|
|
|
84
84
|
product: ProductBaseSchema | None = None
|
|
85
85
|
customer_descriptions: list[SubscriptionDescriptionSchema] | None = None
|
|
86
86
|
tag: str | None = None
|
|
87
|
+
version: int
|
|
87
88
|
model_config = ConfigDict(from_attributes=True)
|
|
88
89
|
|
|
89
90
|
|
|
@@ -28,4 +28,12 @@ class SubscriptionDescriptionBaseSchema(OrchestratorBaseModel):
|
|
|
28
28
|
class SubscriptionDescriptionSchema(SubscriptionDescriptionBaseSchema):
|
|
29
29
|
id: UUID
|
|
30
30
|
created_at: datetime | None = None
|
|
31
|
+
version: int
|
|
32
|
+
model_config = ConfigDict(from_attributes=True)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class UpdateSubscriptionDescriptionSchema(SubscriptionDescriptionBaseSchema):
|
|
36
|
+
id: UUID
|
|
37
|
+
created_at: datetime | None = None
|
|
38
|
+
version: int | None = None
|
|
31
39
|
model_config = ConfigDict(from_attributes=True)
|
{orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/orchestrator/utils/enrich_process.py
RENAMED
|
@@ -33,6 +33,7 @@ def format_subscription(subscription: SubscriptionTable) -> dict:
|
|
|
33
33
|
"note": subscription.note,
|
|
34
34
|
"start_date": subscription.start_date if subscription.start_date else None,
|
|
35
35
|
"end_date": subscription.end_date if subscription.end_date else None,
|
|
36
|
+
"version": subscription.version,
|
|
36
37
|
"product": {
|
|
37
38
|
"product_id": prod.product_id,
|
|
38
39
|
"description": prod.description,
|
|
@@ -74,6 +74,14 @@ class InconsistentDataError(ProcessFailureError):
|
|
|
74
74
|
pass
|
|
75
75
|
|
|
76
76
|
|
|
77
|
+
class StaleDataError(ValueError):
|
|
78
|
+
"""The version of the update payload does not match the version in the database."""
|
|
79
|
+
|
|
80
|
+
def __init__(self, current_version: int, new_version: int | None = None) -> None:
|
|
81
|
+
message = f"Stale data: given version ({new_version}) does not match the current version ({current_version})"
|
|
82
|
+
super().__init__(message)
|
|
83
|
+
|
|
84
|
+
|
|
77
85
|
def is_api_exception(ex: Exception) -> bool:
|
|
78
86
|
"""Test for swagger-codegen ApiException.
|
|
79
87
|
|
|
@@ -13,11 +13,11 @@
|
|
|
13
13
|
|
|
14
14
|
from collections.abc import Callable
|
|
15
15
|
from inspect import isgeneratorfunction
|
|
16
|
-
from typing import cast
|
|
16
|
+
from typing import Self, cast
|
|
17
17
|
from uuid import UUID
|
|
18
18
|
|
|
19
19
|
from more_itertools import first_true
|
|
20
|
-
from pydantic import field_validator
|
|
20
|
+
from pydantic import field_validator, model_validator
|
|
21
21
|
from sqlalchemy import select
|
|
22
22
|
|
|
23
23
|
from orchestrator.db import ProductTable, SubscriptionTable, db
|
|
@@ -26,8 +26,10 @@ from orchestrator.services import subscriptions
|
|
|
26
26
|
from orchestrator.settings import app_settings
|
|
27
27
|
from orchestrator.targets import Target
|
|
28
28
|
from orchestrator.types import State, SubscriptionLifecycle
|
|
29
|
+
from orchestrator.utils.errors import StaleDataError
|
|
29
30
|
from orchestrator.utils.redis import caching_models_enabled
|
|
30
31
|
from orchestrator.utils.state import form_inject_args
|
|
32
|
+
from orchestrator.utils.validate_data_version import validate_data_version
|
|
31
33
|
from orchestrator.workflow import StepList, Workflow, conditional, done, init, make_workflow, step
|
|
32
34
|
from orchestrator.workflows.steps import (
|
|
33
35
|
cache_domain_models,
|
|
@@ -116,6 +118,7 @@ def _generate_modify_form(workflow_target: str, workflow_name: str) -> InputForm
|
|
|
116
118
|
# We use UUID instead of SubscriptionId here because we don't want the allowed_status check and
|
|
117
119
|
# we do our own validation here.
|
|
118
120
|
subscription_id: UUID
|
|
121
|
+
version: int | None = None
|
|
119
122
|
|
|
120
123
|
@field_validator("subscription_id")
|
|
121
124
|
@classmethod
|
|
@@ -140,6 +143,15 @@ def _generate_modify_form(workflow_target: str, workflow_name: str) -> InputForm
|
|
|
140
143
|
|
|
141
144
|
return subscription_id
|
|
142
145
|
|
|
146
|
+
@model_validator(mode="after")
|
|
147
|
+
def version_validator(self) -> Self:
|
|
148
|
+
current_version = db.session.scalars(
|
|
149
|
+
select(SubscriptionTable.version).where(SubscriptionTable.subscription_id == self.subscription_id)
|
|
150
|
+
).one()
|
|
151
|
+
if not validate_data_version(current_version, self.version):
|
|
152
|
+
raise StaleDataError(current_version, self.version)
|
|
153
|
+
return self
|
|
154
|
+
|
|
143
155
|
return ModifySubscriptionPage
|
|
144
156
|
|
|
145
157
|
|
|
@@ -157,11 +169,11 @@ def wrap_modify_initial_input_form(initial_input_form: InputStepFunc | None) ->
|
|
|
157
169
|
user_input = yield _generate_modify_form(workflow_target, workflow_name)
|
|
158
170
|
|
|
159
171
|
subscription = SubscriptionTable.query.get(user_input.subscription_id)
|
|
160
|
-
|
|
161
172
|
begin_state = {
|
|
162
173
|
"subscription_id": str(subscription.subscription_id),
|
|
163
174
|
"product": str(subscription.product_id),
|
|
164
175
|
"customer_id": subscription.customer_id,
|
|
176
|
+
"version": subscription.version,
|
|
165
177
|
}
|
|
166
178
|
|
|
167
179
|
if initial_input_form is None:
|
{orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_processes.py
RENAMED
|
@@ -531,3 +531,51 @@ def test_create_process_reporter(test_client, fastapi_app, oidc_user, reporter,
|
|
|
531
531
|
assert response.status_code == 201, response.text
|
|
532
532
|
mock_start_process.assert_called()
|
|
533
533
|
assert mock_start_process.mock_calls[0].kwargs["user"] == expected_user
|
|
534
|
+
|
|
535
|
+
|
|
536
|
+
def test_new_process_without_version(test_client, generic_subscription_1):
|
|
537
|
+
|
|
538
|
+
response = test_client.post(
|
|
539
|
+
"/api/processes/modify_note",
|
|
540
|
+
json=[{"subscription_id": generic_subscription_1}, {"note": "test note"}],
|
|
541
|
+
)
|
|
542
|
+
assert HTTPStatus.CREATED == response.status_code
|
|
543
|
+
new_version = db.session.get(SubscriptionTable, generic_subscription_1).version
|
|
544
|
+
assert new_version == 3
|
|
545
|
+
|
|
546
|
+
|
|
547
|
+
def test_new_process_version_check(test_client, generic_subscription_1):
|
|
548
|
+
version = 2
|
|
549
|
+
|
|
550
|
+
response = test_client.post(
|
|
551
|
+
"/api/processes/modify_note",
|
|
552
|
+
json=[{"subscription_id": generic_subscription_1, "version": version}, {"note": "test note"}],
|
|
553
|
+
)
|
|
554
|
+
assert HTTPStatus.CREATED == response.status_code
|
|
555
|
+
new_version = db.session.get(SubscriptionTable, generic_subscription_1).version
|
|
556
|
+
assert new_version == version + 1
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
def test_new_process_lower_version_invalid(test_client, generic_subscription_1):
|
|
560
|
+
response = test_client.post(
|
|
561
|
+
"/api/processes/modify_note",
|
|
562
|
+
json=[{"subscription_id": generic_subscription_1, "version": 0}, {"note": "test note"}],
|
|
563
|
+
)
|
|
564
|
+
assert HTTPStatus.BAD_REQUEST == response.status_code
|
|
565
|
+
payload = response.json()
|
|
566
|
+
assert (
|
|
567
|
+
payload["validation_errors"][0]["msg"] == "Stale data: given version (0) does not match the current version (2)"
|
|
568
|
+
)
|
|
569
|
+
|
|
570
|
+
|
|
571
|
+
def test_new_process_higher_version_invalid(test_client, generic_subscription_1):
|
|
572
|
+
response = test_client.post(
|
|
573
|
+
"/api/processes/modify_note",
|
|
574
|
+
json=[{"subscription_id": generic_subscription_1, "version": 10}, {"note": "test note"}],
|
|
575
|
+
)
|
|
576
|
+
assert HTTPStatus.BAD_REQUEST == response.status_code
|
|
577
|
+
payload = response.json()
|
|
578
|
+
assert (
|
|
579
|
+
payload["validation_errors"][0]["msg"]
|
|
580
|
+
== "Stale data: given version (10) does not match the current version (2)"
|
|
581
|
+
)
|
|
@@ -27,6 +27,7 @@ def seed():
|
|
|
27
27
|
id=SUBSCRIPTION_CUSTOMER_DESCRIPTION_ID, customer_id=CUSTOMER_ID, description="customer other alias"
|
|
28
28
|
)
|
|
29
29
|
],
|
|
30
|
+
version=1,
|
|
30
31
|
)
|
|
31
32
|
|
|
32
33
|
db.session.add(product)
|
|
@@ -81,6 +82,60 @@ def test_update(seed, test_client):
|
|
|
81
82
|
|
|
82
83
|
customer_description = db.session.query(SubscriptionCustomerDescriptionTable).first()
|
|
83
84
|
assert new_desc == customer_description.description
|
|
85
|
+
assert 2 == customer_description.version
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def test_update_with_version(seed, test_client):
|
|
89
|
+
new_desc = "Updated specific alias"
|
|
90
|
+
version = 1
|
|
91
|
+
body = {
|
|
92
|
+
"id": SUBSCRIPTION_CUSTOMER_DESCRIPTION_ID,
|
|
93
|
+
"subscription_id": SUBSCRIPTION_ID,
|
|
94
|
+
"customer_id": CUSTOMER_ID,
|
|
95
|
+
"description": new_desc,
|
|
96
|
+
"version": version,
|
|
97
|
+
}
|
|
98
|
+
response = test_client.put("/api/subscription_customer_descriptions/", json=body)
|
|
99
|
+
assert HTTPStatus.NO_CONTENT == response.status_code
|
|
100
|
+
|
|
101
|
+
count = db.session.query(SubscriptionCustomerDescriptionTable).count()
|
|
102
|
+
assert 1 == count
|
|
103
|
+
|
|
104
|
+
customer_description = db.session.query(SubscriptionCustomerDescriptionTable).first()
|
|
105
|
+
assert new_desc == customer_description.description
|
|
106
|
+
assert version + 1 == customer_description.version
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def test_update_with_lower_version_invalid(seed, test_client):
|
|
110
|
+
new_desc = "Updated specific alias"
|
|
111
|
+
body = {
|
|
112
|
+
"id": SUBSCRIPTION_CUSTOMER_DESCRIPTION_ID,
|
|
113
|
+
"subscription_id": SUBSCRIPTION_ID,
|
|
114
|
+
"customer_id": CUSTOMER_ID,
|
|
115
|
+
"description": new_desc,
|
|
116
|
+
"version": 0,
|
|
117
|
+
}
|
|
118
|
+
response = test_client.put("/api/subscription_customer_descriptions/", json=body)
|
|
119
|
+
assert HTTPStatus.BAD_REQUEST == response.status_code
|
|
120
|
+
|
|
121
|
+
data = response.json()
|
|
122
|
+
assert "Stale data: given version (0) does not match the current version (1)" == data["detail"]
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def test_update_with_higher_version_invalid(seed, test_client):
|
|
126
|
+
new_desc = "Updated specific alias"
|
|
127
|
+
body = {
|
|
128
|
+
"id": SUBSCRIPTION_CUSTOMER_DESCRIPTION_ID,
|
|
129
|
+
"subscription_id": SUBSCRIPTION_ID,
|
|
130
|
+
"customer_id": CUSTOMER_ID,
|
|
131
|
+
"description": new_desc,
|
|
132
|
+
"version": 10,
|
|
133
|
+
}
|
|
134
|
+
response = test_client.put("/api/subscription_customer_descriptions/", json=body)
|
|
135
|
+
assert HTTPStatus.BAD_REQUEST == response.status_code
|
|
136
|
+
|
|
137
|
+
data = response.json()
|
|
138
|
+
assert "Stale data: given version (10) does not match the current version (1)" == data["detail"]
|
|
84
139
|
|
|
85
140
|
|
|
86
141
|
def test_delete(seed, test_client):
|
{orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc1}/test/unit_tests/api/test_subscriptions.py
RENAMED
|
@@ -817,6 +817,7 @@ def test_subscription_detail_special_fields(mock_from_redis, test_client):
|
|
|
817
817
|
"status": "active",
|
|
818
818
|
"customer_id": "f711c6fe-6de3-40bd-a4e7-9ac9d183a788",
|
|
819
819
|
"insync": True,
|
|
820
|
+
"version": 1,
|
|
820
821
|
"product": {
|
|
821
822
|
"name": "fake name",
|
|
822
823
|
"description": "fake description",
|
|
@@ -854,6 +855,7 @@ def test_subscription_detail_special_fields(mock_from_redis, test_client):
|
|
|
854
855
|
},
|
|
855
856
|
"customer_descriptions": [],
|
|
856
857
|
"tag": None,
|
|
858
|
+
"version": 1,
|
|
857
859
|
"ip_address": "127.0.0.1",
|
|
858
860
|
}
|
|
859
861
|
|