orchestrator-core 2.9.1rc1__tar.gz → 2.9.2rc2__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.2rc2}/.bumpversion.cfg +1 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/workflows/run-unit-tests.yml +1 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/PKG-INFO +1 -1
- orchestrator_core-2.9.2rc2/docs/architecture/product_modelling/backfilling.md +77 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/mkdocs.yml +1 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/__init__.py +1 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/endpoints/processes.py +1 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +9 -2
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/subscription.py +1 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/models.py +2 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/devtools/populator.py +18 -5
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/domain/base.py +6 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/domain/customer_description.py +9 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/mutations/customer_description.py +7 -4
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/subscription.py +1 -0
- orchestrator_core-2.9.2rc2/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +64 -0
- orchestrator_core-2.9.2rc2/orchestrator/migrations/versions/schema/2025-10-19_4fjdn13f83ga_add_validate_product_type_task.py +41 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schedules/validate_subscriptions.py +16 -23
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/subscription.py +1 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/subscription_descriptions.py +8 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/subscriptions.py +10 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/workflows.py +47 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/enrich_process.py +1 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/errors.py +8 -0
- orchestrator_core-2.9.2rc2/orchestrator/utils/validate_data_version.py +2 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/__init__.py +1 -0
- orchestrator_core-2.9.2rc2/orchestrator/workflows/tasks/validate_product_type.py +92 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/translations/en-GB.json +4 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/utils.py +15 -3
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_processes.py +48 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_subscription_customer_descriptions.py +55 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_subscriptions.py +2 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/domain/test_base.py +2 -1
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/mutations/test_customer_description.py +85 -2
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_subscriptions.py +36 -2
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_workflows.py +22 -10
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/services/test_subscriptions.py +1 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/test_db.py +1 -1
- orchestrator_core-2.9.2rc2/test/unit_tests/workflows/tasks/test_validate_product_type.py +39 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.coveragerc +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/dependabot.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/workflows/README.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/workflows/build-push-container.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/workflows/changelog.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/workflows/codeql-analysis.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/workflows/gh-pages.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/workflows/issues.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/workflows/publish-package.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/workflows/run-linting-tests.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.github/workflows/scheduled-build.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.gitignore +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.pre-commit-config.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/.stignore +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/CHANGELOG.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/Dockerfile +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/LICENSE +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/NOTICE +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/README.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/codecov.yml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/application/domainmodels.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/application/forms-frontend.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/application/tasks.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/application/workflow.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/framework.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/img/base-orchestrator-setup.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/img/custom-orchestrator-setup.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/orchestration/img/Custom-orchestrator-ui-using-override.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/orchestration/img/Standard-orchestrator-ui.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/orchestration/orchestrator-ui.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/orchestration/philosophy.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/context.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/imports.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/introduction.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/ip_static.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/ip_static.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/l2_point_to_point.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/l2_point_to_point.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/l2_vpn.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/l2_vpn.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/modelling.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/node.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/node.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/port.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/port.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/product_block_graph.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/product_block_graph.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/standards.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/product_modelling/terminology.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/architecture/tldr.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/contributing/development.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/contributing/guidelines.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/contributing/testing.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/css/custom.css +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/css/style.css +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/css/termynal.css +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/getting-started/base.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/getting-started/docker.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/getting-started/orchestration-ui.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/getting-started/prepare-source-folder.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/getting-started/versions.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/img/WFO-Emblem-White.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/img/favicon.ico +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/index.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/js/custom.js +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/js/termynal.js +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/migration-guide/2.0.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/api.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/app/app.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/app/scaling.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/auth-backend-and-frontend.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/cli.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/database.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/generator.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/instantiating.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/model_attributes.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/overview.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/product_blocks.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/product_types.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/properties.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/pydantic_hooks.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/type_casting.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/union_types.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/domain_models/validation.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/forms.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/graphql.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/python.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/search.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/search_overview.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/serialization.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/tasks.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/tests.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/tldr.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/websockets.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/workflows/callbacks.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/workflows/workflow-lifecycles.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/reference-docs/workflows/workflow-steps.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/bootstrap.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/create-your-own.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/docker-installation.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/domain-models.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/execute-workflows.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/generator.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/l2_point_to_point.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/node-create.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/node-modify.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/node-terminate.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/node-validate.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/overview.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/scenario.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/workflow-basics.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/advanced/workflow-introduction.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/create-user-group.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/create-user.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/database-migration.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/debian.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/docker.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/domain-models.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/explore.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/input-forms.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/macos.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/modify-user-group.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/modify-user.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/register-workflows.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/start-applications.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/terminate-user-group.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/terminate-user.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/workflow-introduction.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/beginner/workshop-overview.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/images/Software-topology.drawio.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/images/clab_topology.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/images/metadata_products.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/images/netbox_devices_active.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/images/subscriptions.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/docs/workshops/images/topology.drawio.png +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/includes/abbreviations.md +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/mutmut_config.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/nitpick-style.toml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/api.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/endpoints/health.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/endpoints/products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/endpoints/subscriptions.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/endpoints/user.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/error_handling.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/api/models.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/app.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/database.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generate.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/custom_templates/README +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/enums.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/migration.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/translations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/unittest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/validations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/generator/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/enums.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/macros.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/product.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/helpers/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/helpers/input_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/helpers/print_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/main.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/migrate_domain_models.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/migrate_workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/migration_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/cli/scheduler.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/config/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/config/assignee.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/database.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/filters.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/resource_type.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/search_filters/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/listeners.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/loaders.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/range/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/range/range.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/sorting/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/sorting/process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/sorting/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/sorting/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/sorting/resource_type.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/sorting/sorting.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/sorting/subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/sorting/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/devtools/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/devtools/scripts/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/devtools/scripts/migrate_20.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/distlock/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/distlock/distlock_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/distlock/managers/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/domain/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/domain/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/domain/lifecycle.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/exception_handlers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/forms/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/forms/validators/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/forms/validators/customer_contact_list.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/forms/validators/customer_id.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/forms/validators/display_subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/forms/validators/network_type_validators.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/forms/validators/product_id.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/autoregistration.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/extensions/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/extensions/stats.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/loaders/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/loaders/subscriptions.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/mutations/start_process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/pagination.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/resolvers/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/resolvers/customer.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/resolvers/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/resolvers/process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/resolvers/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/resolvers/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/resolvers/resource_type.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/resolvers/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/resolvers/subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/resolvers/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schema.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/customer.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/customer_description.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/errors.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/fixed_input.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/resource_type.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/schemas/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/utils/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/utils/override_class.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/log_config.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/README +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/alembic.ini +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/env.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/script.py.mako +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/templates/env.py.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/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.2rc2}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/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.2rc2}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/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.2rc2}/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.2rc2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/py.typed +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schedules/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schedules/resume_workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schedules/scheduling.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schedules/task_vacuum.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schedules/validate_products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/base.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/engine_settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/fixed_input.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/problem_detail.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/product_block.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/resource_type.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/schemas/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/security.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/celery.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/fixed_inputs.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/process_broadcast_thread.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/processes.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/resource_types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/subscription_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/tasks.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/translations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/targets.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/crypt.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/datetime.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/deprecation_logger.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/docs.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/fixed_inputs.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/functional.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/get_subscription_dict.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/get_updated_properties.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/json.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/redis.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/search_query.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/state.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/utils/strings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/version.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/websocket/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/websocket/websocket_manager.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/modify_note.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/removed_workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/steps.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/tasks/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/tasks/validate_products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/pyproject.toml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/setup.cfg +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/setup.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/conftest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/fixtures/test_orchestrator/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/test_product_populator.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/fixtures/test_orchestrator/main.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/test_product_blocks.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/fixtures/test_orchestrator/products/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/fixtures/test_orchestrator/products/test_product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/fixtures/test_orchestrator/workflows/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/fixtures/test_orchestrator/workflows/create_test_product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/acceptance_tests/test_test_product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_caching.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_health.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_models.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_processes_ws.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_product_blocks.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/api/test_ws.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/conftest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/alembic.ini +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/main.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/migrations/env.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/migrations/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/migrations/script.py.mako +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/test/unit_tests/cli/data/generate/products/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/products/product_blocks/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/products/product_blocks/example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/products/product_blocks/example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/products/product_blocks/example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/products/product_blocks/example4sub.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/products/product_types/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/products/product_types/example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/products/product_types/example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/products/product_types/example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/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.2rc2}/test/unit_tests/cli/data/generate/translations/en-GB.json +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example1/create_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example1/modify_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example1/shared/forms.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example1/terminate_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example1/validate_example1.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example2/create_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example2/modify_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example2/shared/forms.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example2/terminate_example2.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example4/create_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example4/modify_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example4/shared/forms.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/example4/terminate_example4.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate/workflows/shared.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/generate.sh +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/invalid_product_config1.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/invalid_product_config2.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/product_config1.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/product_config2.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/product_config3.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/data/product_config4.yaml +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/generator/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/generator/test_enums.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/test_cli_generate.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/test_config_validation.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/test_generate_code.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/test_migrate_domain_models_with_instances.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/cli/test_migrate_domain_models_without_instances.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/config.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/conftest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/db/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/db/test_listeners.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/domain/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/domain/test_base_multiple.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/domain/test_base_with_list_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/domain/test_base_with_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/domain/test_lifecycle.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/processes.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_blocks/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_blocks/product_block_list_nested.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_blocks/product_block_one.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_blocks/product_block_one_nested.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_blocks/product_block_with_list_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_blocks/product_block_with_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_blocks/product_sub_block_one.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_blocks/product_sub_block_two.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/product_type_list_nested.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/product_type_list_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/product_type_list_union_overlap.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/product_type_one.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/product_type_one_nested.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/product_type_sub_list_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/product_type_sub_one.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/product_type_sub_two.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/product_type_sub_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/product_type_union.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/product_types/subscription_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/products/resource_types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/fixtures/workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/forms/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/forms/test_customer_contact_list.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/forms/test_customer_id.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/forms/test_display_subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/forms/test_generic_validators.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/conftest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/extensions/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/extensions/test_stats.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/mutations/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/mutations/test_start_process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_customer.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_process.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_processes.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_product.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_product_blocks.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_resource_types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_settings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_sort_and_filter_fields.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_subscription.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/test_subscription_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/utils/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/utils/fixtures.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/utils/test_autoregistration.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/utils/test_get_query_loaders.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/utils/test_get_selected_paths.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/utils/test_is_query_detailed.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/utils/test_is_querying_page_data.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/graphql/utils/test_override_class.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/helpers.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/schedules/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/schedules/test_scheduling.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/services/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/services/test_processes.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/services/test_products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/services/test_subscription_relations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/services/test_translations.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/test_types.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/test_workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/utils/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/utils/get_subscription_dict.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/utils/test_datetime.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/utils/test_errors.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/utils/test_functional.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/utils/test_get_updated_properties.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/utils/test_json.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/utils/test_search_query.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/utils/test_state.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/utils/test_strings.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/websocket/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/websocket/test_broadcast.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/conftest.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/shared/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/shared/test_validate_subscriptions.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/tasks/__init__.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/tasks/test_clean_up_task_log.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/tasks/test_resume_workflows.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/tasks/test_validate_products.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/test_async_workflow.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/test_config_db_code.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/test/unit_tests/workflows/test_generic_workflow_steps.py +0 -0
- {orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/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)
|
{orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/db/filters/subscription.py
RENAMED
|
@@ -24,6 +24,7 @@ logger = structlog.get_logger(__name__)
|
|
|
24
24
|
SUBSCRIPTION_TABLE_COLUMN_CLAUSES = default_inferred_column_clauses(SubscriptionTable) | {
|
|
25
25
|
"product": inferred_filter(ProductTable.name),
|
|
26
26
|
"tag": filter_exact(ProductTable.tag),
|
|
27
|
+
"type": filter_exact(ProductTable.product_type),
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
subscription_filter_fields = create_memoized_field_list(SUBSCRIPTION_TABLE_COLUMN_CLAUSES)
|
|
@@ -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.2rc2}/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
|
+
)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""Validate Product Type.
|
|
2
|
+
|
|
3
|
+
Revision ID: 4fjdn13f83ga
|
|
4
|
+
Revises: 2c7e8a43d4f9
|
|
5
|
+
Create Date: 2025-10-13 16:21:43.956814
|
|
6
|
+
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from uuid import uuid4
|
|
10
|
+
|
|
11
|
+
import sqlalchemy as sa
|
|
12
|
+
from alembic import op
|
|
13
|
+
|
|
14
|
+
# revision identifiers, used by Alembic.
|
|
15
|
+
revision = "4fjdn13f83ga"
|
|
16
|
+
down_revision = "4c5859620539"
|
|
17
|
+
branch_labels = None
|
|
18
|
+
depends_on = None
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
workflow = {
|
|
22
|
+
"name": "task_validate_product_type",
|
|
23
|
+
"target": "SYSTEM",
|
|
24
|
+
"description": "Validate all subscriptions of Product Type",
|
|
25
|
+
"workflow_id": uuid4(),
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def upgrade() -> None:
|
|
30
|
+
conn = op.get_bind()
|
|
31
|
+
conn.execute(
|
|
32
|
+
sa.text(
|
|
33
|
+
"INSERT INTO workflows VALUES (:workflow_id, :name, :target, :description, now()) ON CONFLICT DO NOTHING"
|
|
34
|
+
),
|
|
35
|
+
workflow,
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def downgrade() -> None:
|
|
40
|
+
conn = op.get_bind()
|
|
41
|
+
conn.execute(sa.text("DELETE FROM workflows WHERE name = :name"), {"name": workflow["name"]})
|
|
@@ -15,14 +15,17 @@
|
|
|
15
15
|
from threading import BoundedSemaphore
|
|
16
16
|
|
|
17
17
|
import structlog
|
|
18
|
-
from sqlalchemy import select
|
|
19
18
|
|
|
20
|
-
from orchestrator.db import ProductTable, SubscriptionTable, db
|
|
21
19
|
from orchestrator.schedules.scheduling import scheduler
|
|
22
|
-
from orchestrator.services.
|
|
23
|
-
|
|
20
|
+
from orchestrator.services.subscriptions import (
|
|
21
|
+
get_subscriptions_on_product_table,
|
|
22
|
+
get_subscriptions_on_product_table_in_sync,
|
|
23
|
+
)
|
|
24
|
+
from orchestrator.services.workflows import (
|
|
25
|
+
get_system_product_workflows_for_subscription,
|
|
26
|
+
start_validation_workflow_for_workflows,
|
|
27
|
+
)
|
|
24
28
|
from orchestrator.settings import app_settings
|
|
25
|
-
from orchestrator.targets import Target
|
|
26
29
|
|
|
27
30
|
logger = structlog.get_logger(__name__)
|
|
28
31
|
|
|
@@ -34,29 +37,19 @@ task_semaphore = BoundedSemaphore(value=2)
|
|
|
34
37
|
def validate_subscriptions() -> None:
|
|
35
38
|
if app_settings.VALIDATE_OUT_OF_SYNC_SUBSCRIPTIONS:
|
|
36
39
|
# Automatically re-validate out-of-sync subscriptions. This is not recommended for production.
|
|
37
|
-
|
|
40
|
+
subscriptions = get_subscriptions_on_product_table()
|
|
38
41
|
else:
|
|
39
|
-
|
|
40
|
-
subscriptions = db.session.scalars(select_query)
|
|
41
|
-
for subscription in subscriptions:
|
|
42
|
-
validation_workflow = None
|
|
43
|
-
|
|
44
|
-
for workflow in subscription.product.workflows:
|
|
45
|
-
if workflow.target == Target.SYSTEM:
|
|
46
|
-
validation_workflow = workflow.name
|
|
47
|
-
|
|
48
|
-
if validation_workflow:
|
|
49
|
-
default = TARGET_DEFAULT_USABLE_MAP[Target.SYSTEM]
|
|
50
|
-
usable_when = WF_USABLE_MAP.get(validation_workflow, default)
|
|
42
|
+
subscriptions = get_subscriptions_on_product_table_in_sync()
|
|
51
43
|
|
|
52
|
-
|
|
53
|
-
|
|
44
|
+
for subscription in subscriptions:
|
|
45
|
+
system_product_workflows = get_system_product_workflows_for_subscription(subscription)
|
|
54
46
|
|
|
55
|
-
|
|
56
|
-
validate_func(validation_workflow, json=json)
|
|
57
|
-
else:
|
|
47
|
+
if not system_product_workflows:
|
|
58
48
|
logger.warning(
|
|
59
49
|
"SubscriptionTable has no validation workflow",
|
|
60
50
|
subscription=subscription,
|
|
61
51
|
product=subscription.product.name,
|
|
62
52
|
)
|
|
53
|
+
break
|
|
54
|
+
|
|
55
|
+
start_validation_workflow_for_workflows(subscription=subscription, workflows=system_product_workflows)
|
{orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/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.2rc2}/orchestrator/services/subscriptions.py
RENAMED
|
@@ -670,3 +670,13 @@ def format_extended_domain_model(subscription: dict, filter_owner_relations: boo
|
|
|
670
670
|
filter_instance_ids_on_subscription()
|
|
671
671
|
|
|
672
672
|
return subscription
|
|
673
|
+
|
|
674
|
+
|
|
675
|
+
def get_subscriptions_on_product_table() -> list[SubscriptionTable]:
|
|
676
|
+
select_query = select(SubscriptionTable).join(ProductTable)
|
|
677
|
+
return list(db.session.scalars(select_query))
|
|
678
|
+
|
|
679
|
+
|
|
680
|
+
def get_subscriptions_on_product_table_in_sync(in_sync: bool = True) -> list[SubscriptionTable]:
|
|
681
|
+
select_query = select(SubscriptionTable).join(ProductTable).filter(SubscriptionTable.insync.is_(in_sync))
|
|
682
|
+
return list(db.session.scalars(select_query))
|
{orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/services/workflows.py
RENAMED
|
@@ -2,8 +2,14 @@ from collections.abc import Iterable
|
|
|
2
2
|
|
|
3
3
|
from sqlalchemy import Select, select
|
|
4
4
|
|
|
5
|
-
from orchestrator.db import
|
|
5
|
+
from orchestrator.db import (
|
|
6
|
+
SubscriptionTable,
|
|
7
|
+
WorkflowTable,
|
|
8
|
+
db,
|
|
9
|
+
)
|
|
6
10
|
from orchestrator.schemas import StepSchema, WorkflowSchema
|
|
11
|
+
from orchestrator.services.subscriptions import TARGET_DEFAULT_USABLE_MAP, WF_USABLE_MAP
|
|
12
|
+
from orchestrator.targets import Target
|
|
7
13
|
from orchestrator.workflows import get_workflow
|
|
8
14
|
|
|
9
15
|
|
|
@@ -42,3 +48,43 @@ def get_workflows(
|
|
|
42
48
|
|
|
43
49
|
def get_workflow_by_name(workflow_name: str) -> WorkflowTable | None:
|
|
44
50
|
return db.session.scalar(select(WorkflowTable).where(WorkflowTable.name == workflow_name))
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def get_system_product_workflows_for_subscription(
|
|
54
|
+
subscription: SubscriptionTable,
|
|
55
|
+
) -> list:
|
|
56
|
+
return [workflow.name for workflow in subscription.product.workflows if workflow.target == Target.SYSTEM]
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def start_validation_workflow_for_workflows(
|
|
60
|
+
subscription: SubscriptionTable,
|
|
61
|
+
workflows: list,
|
|
62
|
+
product_type_filter: str | None = None,
|
|
63
|
+
) -> list:
|
|
64
|
+
"""Start validation workflows for a subscription."""
|
|
65
|
+
result = []
|
|
66
|
+
|
|
67
|
+
for workflow_name in workflows:
|
|
68
|
+
default = TARGET_DEFAULT_USABLE_MAP[Target.SYSTEM]
|
|
69
|
+
usable_when = WF_USABLE_MAP.get(workflow_name, default)
|
|
70
|
+
|
|
71
|
+
if subscription.status in usable_when and (
|
|
72
|
+
product_type_filter is None or subscription.product.product_type == product_type_filter
|
|
73
|
+
):
|
|
74
|
+
json = [{"subscription_id": str(subscription.subscription_id)}]
|
|
75
|
+
|
|
76
|
+
# against circular import
|
|
77
|
+
from orchestrator.services.processes import get_execution_context
|
|
78
|
+
|
|
79
|
+
validate_func = get_execution_context()["validate"]
|
|
80
|
+
validate_func(workflow_name, json=json)
|
|
81
|
+
|
|
82
|
+
result.append(
|
|
83
|
+
{
|
|
84
|
+
"workflow_name": workflow_name,
|
|
85
|
+
"subscription_id": subscription.subscription_id,
|
|
86
|
+
"product_type": subscription.product.product_type,
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
return result
|
{orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/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
|
|
{orchestrator_core-2.9.1rc1 → orchestrator_core-2.9.2rc2}/orchestrator/workflows/__init__.py
RENAMED
|
@@ -110,5 +110,6 @@ LazyWorkflowInstance(".modify_note", "modify_note")
|
|
|
110
110
|
LazyWorkflowInstance(".tasks.cleanup_tasks_log", "task_clean_up_tasks")
|
|
111
111
|
LazyWorkflowInstance(".tasks.resume_workflows", "task_resume_workflows")
|
|
112
112
|
LazyWorkflowInstance(".tasks.validate_products", "task_validate_products")
|
|
113
|
+
LazyWorkflowInstance(".tasks.validate_product_type", "task_validate_product_type")
|
|
113
114
|
|
|
114
115
|
__doc__ = make_workflow_index_doc(ALL_WORKFLOWS)
|