orchestrator-core 3.1.1__tar.gz → 3.1.2__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-3.1.1 → orchestrator_core-3.1.2}/.bumpversion.cfg +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/run-codspeed-tests.yml +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/run-linting-tests.yml +2 -2
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/run-unit-tests.yml +3 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.pre-commit-config.yaml +3 -4
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/PKG-INFO +10 -10
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/getting-started/versions.md +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/app/scaling.md +106 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/workflows/callbacks.md +8 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/macos.md +3 -3
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/__init__.py +2 -2
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/api.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/processes.py +29 -9
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/settings.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/subscriptions.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/app.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/database.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/migration.py +2 -5
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/migrate_tasks.py +13 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/config/assignee.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/__init__.py +2 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/models.py +6 -4
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/populator.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/domain/__init__.py +2 -3
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/domain/base.py +74 -5
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/domain/lifecycle.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schema.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/types.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/get_subscription_product_blocks.py +13 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/env.py +15 -2
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/helpers.py +6 -6
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/engine_settings.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/subscription.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/security.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/celery.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/processes.py +99 -18
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/products.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/subscriptions.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/tasks.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/settings.py +2 -23
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/targets.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/types.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/errors.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/state.py +74 -54
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/websocket/websocket_manager.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflow.py +20 -4
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/modify_note.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/steps.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/tasks/cleanup_tasks_log.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/tasks/resume_workflows.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/tasks/validate_product_type.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/tasks/validate_products.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/utils.py +40 -5
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/pyproject.toml +9 -9
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/test_product_populator.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/workflows/create_test_product.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_processes.py +14 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/shared.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/conftest.py +9 -9
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_base.py +154 -2
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/forms/test_display_subscription.py +5 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_subscriptions.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/helpers.py +1 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_input_state.py +1 -2
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_state.py +190 -1
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/test_async_workflow.py +116 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/test_generic_workflow_steps.py +1 -1
- orchestrator_core-3.1.2/test/unit_tests/workflows/test_lifecycle_status_manager.py +64 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.coveragerc +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/dependabot.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/README.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/build-push-container.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/changelog.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/codeql-analysis.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/gh-pages.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/issues.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/publish-package.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/scheduled-build.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.gitignore +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.stignore +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/CHANGELOG.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/Dockerfile +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/LICENSE +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/NOTICE +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/README.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/codecov.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/application/domainmodels.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/application/forms-frontend.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/application/tasks.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/application/workflow.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/framework.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/img/base-orchestrator-setup.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/img/custom-orchestrator-setup.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/orchestration/img/Custom-orchestrator-ui-using-override.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/orchestration/img/Standard-orchestrator-ui.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/orchestration/orchestrator-ui.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/orchestration/philosophy.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/backfilling.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/context.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/imports.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/introduction.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/ip_static.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/ip_static.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/l2_point_to_point.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/l2_point_to_point.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/l2_vpn.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/l2_vpn.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/modelling.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/node.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/node.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/port.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/port.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/product_block_graph.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/product_block_graph.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/standards.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/terminology.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/tldr.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/contributing/development.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/contributing/guidelines.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/contributing/testing.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/css/custom.css +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/css/style.css +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/css/termynal.css +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/getting-started/base.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/getting-started/docker.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/getting-started/orchestration-ui.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/getting-started/prepare-source-folder.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/img/WFO-Emblem-White.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/img/favicon.ico +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/index.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/js/custom.js +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/js/termynal.js +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/migration-guide/2.0.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/migration-guide/3.0.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/api.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/app/app.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/auth-backend-and-frontend.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/cli.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/database.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/generator.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/instantiating.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/model_attributes.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/overview.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/product_blocks.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/product_types.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/properties.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/pydantic_hooks.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/type_casting.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/union_types.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/validation.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/forms.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/graphql.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/python.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/search.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/search_overview.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/serialization.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/tasks.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/tests.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/tldr.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/websockets.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/workflows/workflow-lifecycles.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/workflows/workflow-steps.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/bootstrap.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/create-your-own.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/docker-installation.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/domain-models.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/execute-workflows.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/generator.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/l2_point_to_point.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/node-create.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/node-modify.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/node-terminate.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/node-validate.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/overview.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/scenario.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/workflow-basics.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/workflow-introduction.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/create-user-group.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/create-user.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/database-migration.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/debian.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/docker.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/domain-models.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/explore.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/input-forms.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/modify-user-group.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/modify-user.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/register-workflows.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/start-applications.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/terminate-user-group.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/terminate-user.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/workflow-introduction.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/workshop-overview.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/Software-topology.drawio.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/clab_topology.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/metadata_products.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/netbox_devices_active.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/subscriptions.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/topology.drawio.png +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/includes/abbreviations.md +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/mkdocs.yml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/nitpick-style.toml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/health.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/products.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/user.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/error_handling.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/models.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generate.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/README +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/enums.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/product.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/product_block.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/settings.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/translations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/unittest.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/validations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/workflow.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/enums.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/macros.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/product.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/helpers/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/helpers/input_helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/helpers/print_helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/main.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/migrate_domain_models.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/migrate_workflows.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/migration_helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/scheduler.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/config/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/database.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/filters.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/process.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/product.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/product_block.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/resource_type.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/search_filters/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/subscription.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/workflow.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/listeners.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/loaders.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/range/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/range/range.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/process.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/product.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/product_block.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/resource_type.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/sorting.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/subscription.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/workflow.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/scripts/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/scripts/migrate_20.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/scripts/migrate_30.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/scripts/shared.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/distlock/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/distlock/distlock_manager.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/distlock/managers/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/domain/customer_description.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/domain/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/exception_handlers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/customer_contact_list.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/customer_id.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/display_subscription.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/network_type_validators.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/product_id.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/autoregistration.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/extensions/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/extensions/stats.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/loaders/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/loaders/subscriptions.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/mutations/customer_description.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/mutations/start_process.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/pagination.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/customer.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/process.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/product.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/product_block.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/resource_type.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/settings.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/subscription.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/version.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/workflow.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/customer.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/customer_description.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/errors.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/fixed_input.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/process.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/product.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/product_block.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/resource_type.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/settings.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/subscription.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/version.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/workflow.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/override_class.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/log_config.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/README +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/alembic.ini +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/script.py.mako +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/templates/env.py.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2025-10-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/py.typed +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/resume_workflows.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/scheduling.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/task_vacuum.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/validate_products.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/validate_subscriptions.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/base.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/fixed_input.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/problem_detail.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/process.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/product.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/product_block.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/resource_type.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/subscription_descriptions.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/workflow.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/fixed_inputs.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/input_state.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/process_broadcast_thread.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/resource_types.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/settings.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/subscription_relations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/translations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/workflows.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/crypt.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/datetime.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/deprecation_logger.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/docs.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/enrich_process.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/fixed_inputs.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/functional.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/get_subscription_dict.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/get_updated_properties.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/json.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/redis.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/redis_client.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/search_query.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/strings.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/validate_data_version.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/version.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/websocket/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/removed_workflow.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/tasks/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/translations/en-GB.json +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/setup.cfg +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/setup.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/conftest.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/main.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/test_product_blocks.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/products/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/products/test_product.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/workflows/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/test_test_product.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_caching.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_health.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_models.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_processes_ws.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_product_blocks.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_products.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_resource_types.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_settings.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_subscription_customer_descriptions.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_subscriptions.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_workflows.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_ws.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/conftest.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/alembic.ini +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/main.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/env.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/script.py.mako +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_59e1199aff7f_create_data_head.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_85be1c80731c_add_example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_ea9e6c9de75c_add_example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-06-07_380a5b0c928c_add_example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_blocks/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_blocks/example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_blocks/example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_blocks/example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_blocks/example4sub.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_types/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_types/example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_types/example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_types/example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_create_example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_modify_example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_terminate_example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_validate_example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_create_example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_modify_example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_terminate_example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_validate_example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_create_example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_modify_example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_terminate_example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_validate_example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/translations/en-GB.json +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example1/create_example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example1/modify_example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example1/shared/forms.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example1/terminate_example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example1/validate_example1.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example2/create_example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example2/modify_example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example2/shared/forms.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example2/terminate_example2.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example4/create_example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example4/modify_example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example4/shared/forms.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example4/terminate_example4.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate.sh +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/invalid_product_config1.yaml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/invalid_product_config2.yaml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/product_config1.yaml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/product_config2.yaml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/product_config3.yaml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/product_config4.yaml +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/generator/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/generator/test_enums.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/test_cli_generate.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/test_config_validation.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/test_generate_code.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/test_migrate_domain_models_with_instances.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/test_migrate_domain_models_without_instances.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/config.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/db/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/db/test_listeners.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_base_multiple.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_base_performance.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_base_with_list_union.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_base_with_union.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_lifecycle.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/processes.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_block_list_nested.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_block_one.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_block_one_nested.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_block_with_list_union.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_block_with_union.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_sub_block_one.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_sub_block_two.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_list_nested.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_list_union.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_list_union_overlap.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_one.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_one_nested.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_sub_list_union.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_sub_one.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_sub_two.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_sub_union.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_union.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/subscription_relations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/resource_types.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/workflows.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/forms/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/forms/test_customer_contact_list.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/forms/test_customer_id.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/forms/test_generic_validators.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/conftest.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/extensions/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/extensions/test_stats.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/mutations/helpers.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/mutations/test_customer_description.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/mutations/test_start_process.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_customer.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_process.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_processes.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_product.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_product_blocks.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_resource_types.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_settings.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_sort_and_filter_fields.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_subscription.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_subscription_relations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_version.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_workflows.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/fixtures.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_autoregistration.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_get_query_loaders.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_get_selected_paths.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_is_query_detailed.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_is_querying_page_data.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_override_class.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/schedules/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/schedules/test_scheduling.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_processes.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_products.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_subscription_relations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_subscriptions.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_translations.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/test_db.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/test_types.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/test_workflow.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/get_subscription_dict.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_datetime.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_errors.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_functional.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_get_updated_properties.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_json.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_search_query.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_strings.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/websocket/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/websocket/test_broadcast.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/conftest.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/shared/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/shared/test_validate_subscriptions.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/tasks/__init__.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/tasks/test_clean_up_task_log.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/tasks/test_resume_workflows.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/tasks/test_validate_product_type.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/tasks/test_validate_products.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/test_config_db_code.py +0 -0
- {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/test_modify_note.py +0 -0
{orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/run-codspeed-tests.yml
RENAMED
|
@@ -61,7 +61,7 @@ jobs:
|
|
|
61
61
|
|
|
62
62
|
- uses: CodSpeedHQ/action@v3
|
|
63
63
|
with:
|
|
64
|
-
run: CACHE_URI=redis://redis DATABASE_URI=postgresql
|
|
64
|
+
run: CACHE_URI=redis://redis DATABASE_URI=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB pytest test/unit_tests --codspeed
|
|
65
65
|
token: ${{ secrets.CODSPEED_TOKEN }}
|
|
66
66
|
env:
|
|
67
67
|
POSTGRES_DB: orchestrator-core-test
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
name: Unit tests
|
|
2
2
|
on:
|
|
3
3
|
push:
|
|
4
|
+
branches: [ main ]
|
|
4
5
|
workflow_call:
|
|
6
|
+
pull_request:
|
|
5
7
|
|
|
6
8
|
jobs:
|
|
7
9
|
container_job:
|
|
@@ -51,7 +53,7 @@ jobs:
|
|
|
51
53
|
env:
|
|
52
54
|
FLIT_ROOT_INSTALL: 1
|
|
53
55
|
- name: Run Unit tests
|
|
54
|
-
run: CACHE_URI=redis://redis DATABASE_URI=postgresql
|
|
56
|
+
run: CACHE_URI=redis://redis DATABASE_URI=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB pytest --cov-branch --cov=orchestrator --cov-report=xml --ignore=test --ignore=orchestrator/devtools --ignore=examples --ignore=docs --ignore=orchestrator/vendor
|
|
55
57
|
env:
|
|
56
58
|
POSTGRES_DB: orchestrator-core-test
|
|
57
59
|
POSTGRES_USER: nwa
|
|
@@ -17,13 +17,12 @@ repos:
|
|
|
17
17
|
rev: v0.9.6
|
|
18
18
|
hooks:
|
|
19
19
|
- id: ruff
|
|
20
|
-
args: [
|
|
20
|
+
args: [--fix, --exit-non-zero-on-fix, --show-fixes]
|
|
21
21
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
22
22
|
rev: v5.0.0
|
|
23
23
|
hooks:
|
|
24
24
|
- id: trailing-whitespace
|
|
25
|
-
exclude:
|
|
26
|
-
.bumpversion.cfg
|
|
25
|
+
exclude: .bumpversion.cfg
|
|
27
26
|
args: [--markdown-linebreak-ext=md]
|
|
28
27
|
- id: end-of-file-fixer
|
|
29
28
|
- id: check-docstring-first
|
|
@@ -62,7 +61,7 @@ repos:
|
|
|
62
61
|
name: mypy
|
|
63
62
|
language: system
|
|
64
63
|
entry: "mypy"
|
|
65
|
-
types: [
|
|
64
|
+
types: [python]
|
|
66
65
|
require_serial: true
|
|
67
66
|
verbose: true
|
|
68
67
|
args:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: orchestrator-core
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.2
|
|
4
4
|
Summary: This is the orchestrator workflow engine.
|
|
5
5
|
Requires-Python: >=3.11,<3.14
|
|
6
6
|
Classifier: Intended Audience :: Information Technology
|
|
@@ -28,7 +28,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
28
28
|
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
29
29
|
Classifier: Topic :: Internet :: WWW/HTTP
|
|
30
30
|
License-File: LICENSE
|
|
31
|
-
Requires-Dist: alembic==1.
|
|
31
|
+
Requires-Dist: alembic==1.15.2
|
|
32
32
|
Requires-Dist: anyio>=3.7.0
|
|
33
33
|
Requires-Dist: click==8.*
|
|
34
34
|
Requires-Dist: deprecated
|
|
@@ -37,18 +37,18 @@ Requires-Dist: fastapi~=0.115.2
|
|
|
37
37
|
Requires-Dist: fastapi-etag==0.4.0
|
|
38
38
|
Requires-Dist: more-itertools~=10.6.0
|
|
39
39
|
Requires-Dist: itsdangerous
|
|
40
|
-
Requires-Dist: Jinja2==3.1.
|
|
41
|
-
Requires-Dist: orjson==3.10.
|
|
42
|
-
Requires-Dist:
|
|
43
|
-
Requires-Dist: pydantic[email]~=2.
|
|
40
|
+
Requires-Dist: Jinja2==3.1.6
|
|
41
|
+
Requires-Dist: orjson==3.10.16
|
|
42
|
+
Requires-Dist: psycopg2-binary==2.9.10
|
|
43
|
+
Requires-Dist: pydantic[email]~=2.8.2
|
|
44
44
|
Requires-Dist: pydantic-settings~=2.8.0
|
|
45
45
|
Requires-Dist: python-dateutil==2.8.2
|
|
46
46
|
Requires-Dist: python-rapidjson>=1.18,<1.21
|
|
47
|
-
Requires-Dist: pytz==2025.
|
|
48
|
-
Requires-Dist: redis==5.
|
|
47
|
+
Requires-Dist: pytz==2025.2
|
|
48
|
+
Requires-Dist: redis==5.1.1
|
|
49
49
|
Requires-Dist: schedule==1.1.0
|
|
50
|
-
Requires-Dist: sentry-sdk[fastapi]~=2.
|
|
51
|
-
Requires-Dist: SQLAlchemy==2.0.
|
|
50
|
+
Requires-Dist: sentry-sdk[fastapi]~=2.25.1
|
|
51
|
+
Requires-Dist: SQLAlchemy==2.0.40
|
|
52
52
|
Requires-Dist: SQLAlchemy-Utils==0.41.2
|
|
53
53
|
Requires-Dist: structlog
|
|
54
54
|
Requires-Dist: typer==0.15.2
|
|
@@ -108,6 +108,112 @@ The code above sets our local Celery instance (which initializes the workflows)
|
|
|
108
108
|
going to be used by the orchestrator-core. Without this code, the orchestrator-core would be only aware of a limited
|
|
109
109
|
set of workflows that are part of orchestrator-core itself.
|
|
110
110
|
|
|
111
|
+
### An example implementation
|
|
112
|
+
|
|
113
|
+
When using Celery and Websockets you can use the following example and change it to your needs.
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
"""This module contains functions and classes necessary for celery worker processes.
|
|
117
|
+
|
|
118
|
+
When the orchestrator-core's thread process executor is specified as "celery", the `OrchestratorCore` FastAPI
|
|
119
|
+
application registers celery-specific task functions and `start_process` and `resume_process` now defer to the
|
|
120
|
+
celery task queue.
|
|
121
|
+
|
|
122
|
+
Celery's task queue enables features like nightly validations by providing a task queue and workers to execute
|
|
123
|
+
workflows that are all started in parallel, which would crash a single-threaded orchestrator-core.
|
|
124
|
+
|
|
125
|
+
The application flow looks like this when "celery" is the executor (and websockets are enabled):
|
|
126
|
+
|
|
127
|
+
- FastAPI application validates form input, and places a task on celery queue (create new process).
|
|
128
|
+
- If websockets are enabled, a connection should exist already b/t the client and backend.
|
|
129
|
+
- FastAPI application begins watching redis pubsub channel for process updates from celery.
|
|
130
|
+
- Celery worker picks up task from queue and begins executing.
|
|
131
|
+
- On each step completion, it publishes state information to redis pubsub channel.
|
|
132
|
+
- FastAPI application grabs this information and publishes it to the client websocket connection.
|
|
133
|
+
|
|
134
|
+
A celery worker container will start by calling this module instead of `main.py` like so:
|
|
135
|
+
```sh
|
|
136
|
+
celery -A esnetorch.celery_worker worker -E -l INFO -Q new_tasks,resume_tasks,new_workflows,resume_workflows
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
* `-A` points to this module where the worker class is defined
|
|
140
|
+
* `-E` sends task-related events (capturable and monitorable)
|
|
141
|
+
* `-l` is the short flag for --loglevel
|
|
142
|
+
* `-Q` specifies the queues which the worker should watch for new tasks
|
|
143
|
+
|
|
144
|
+
See https://workfloworchestrator.org/orchestrator-core/reference-docs/app/scaling for more information.
|
|
145
|
+
"""
|
|
146
|
+
|
|
147
|
+
from uuid import UUID
|
|
148
|
+
|
|
149
|
+
from celery import Celery
|
|
150
|
+
from celery.signals import worker_shutting_down
|
|
151
|
+
from orchestrator.db import init_database
|
|
152
|
+
from orchestrator.domain import SUBSCRIPTION_MODEL_REGISTRY
|
|
153
|
+
from orchestrator.services.tasks import initialise_celery
|
|
154
|
+
from orchestrator.types import BroadcastFunc
|
|
155
|
+
from orchestrator.websocket import broadcast_process_update_to_websocket, init_websocket_manager
|
|
156
|
+
from orchestrator.websocket.websocket_manager import WebSocketManager
|
|
157
|
+
from orchestrator.workflows import ALL_WORKFLOWS
|
|
158
|
+
from structlog import get_logger
|
|
159
|
+
|
|
160
|
+
from esnetorch.settings import app_settings
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
logger = get_logger(__name__)
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
def process_broadcast_fn(process_id: UUID) -> None:
|
|
167
|
+
# Catch all exceptions as broadcasting failure is noncritical to workflow completion
|
|
168
|
+
try:
|
|
169
|
+
broadcast_process_update_to_websocket(process_id)
|
|
170
|
+
except Exception as e:
|
|
171
|
+
logger.exception(e)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
class OrchestratorWorker(Celery):
|
|
175
|
+
websocket_manager: WebSocketManager
|
|
176
|
+
process_broadcast_fn: BroadcastFunc
|
|
177
|
+
|
|
178
|
+
def on_init(self) -> None:
|
|
179
|
+
init_database(app_settings)
|
|
180
|
+
|
|
181
|
+
# Prepare the wrapped_websocket_manager
|
|
182
|
+
# Note: cannot prepare the redis connections here as broadcasting is async
|
|
183
|
+
self.websocket_manager = init_websocket_manager(app_settings)
|
|
184
|
+
self.process_broadcast_fn = process_broadcast_fn
|
|
185
|
+
|
|
186
|
+
# Load the products and load the workflows
|
|
187
|
+
import esnetorch.products # noqa: F401 Side-effects
|
|
188
|
+
import esnetorch.workflows # noqa: F401 Side-effects
|
|
189
|
+
|
|
190
|
+
logger.info(
|
|
191
|
+
"Loaded the workflows and products",
|
|
192
|
+
workflows=len(ALL_WORKFLOWS.values()),
|
|
193
|
+
products=len(SUBSCRIPTION_MODEL_REGISTRY.values()),
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
def close(self) -> None:
|
|
197
|
+
super().close()
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
celery = OrchestratorWorker(
|
|
201
|
+
f"{app_settings.SERVICE_NAME}-worker", broker=str(app_settings.CACHE_URI), include=["orchestrator.services.tasks"]
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
if app_settings.TESTING:
|
|
205
|
+
celery.conf.update(backend=str(app_settings.CACHE_URI), task_ignore_result=False)
|
|
206
|
+
else:
|
|
207
|
+
celery.conf.update(task_ignore_result=True)
|
|
208
|
+
|
|
209
|
+
celery.conf.update(
|
|
210
|
+
result_expires=3600,
|
|
211
|
+
worker_prefetch_multiplier=1,
|
|
212
|
+
worker_send_task_event=True,
|
|
213
|
+
task_send_sent_event=True,
|
|
214
|
+
)
|
|
215
|
+
```
|
|
216
|
+
|
|
111
217
|
### Running locally
|
|
112
218
|
|
|
113
219
|
If you want to test your application locally you have to start both the orchestrator-api and one or more workers.
|
{orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/workflows/callbacks.md
RENAMED
|
@@ -168,3 +168,11 @@ def create_l2vpn() -> StepList:
|
|
|
168
168
|
>> set_status(SubscriptionLifecycle.ACTIVE)
|
|
169
169
|
)
|
|
170
170
|
```
|
|
171
|
+
|
|
172
|
+
## Callback progress during execution
|
|
173
|
+
|
|
174
|
+
For long-running jobs, such as executing Terraform or Ansible playbooks, the Orchestrator allows callback jobs to send real-time progress updates which can be used to provide operators with feedback on the progress of the running task.
|
|
175
|
+
|
|
176
|
+
Progress updates should be delivered to `{callback_route}/progress`, where `"/progress"` is a fixed endpoint appended to the callback URL.
|
|
177
|
+
|
|
178
|
+
The remote service should send a JSON or plain string payload with each progress callback, this replaces the previous progress update and refreshes the UI. Once the final callback is triggered and the job completes, progress updates are removed, leaving only the callback result. Therefore, all troubleshooting or diagnostic information must be included in the final callback payload, as progress updates are not retained for debugging.
|
|
@@ -10,14 +10,14 @@ This installation instruction assumes the use of [Homebrew](https://brew.sh/).
|
|
|
10
10
|
The following software dependencies need to be installed:
|
|
11
11
|
|
|
12
12
|
* Python 3.11
|
|
13
|
-
*
|
|
13
|
+
* Postgres >= 15
|
|
14
14
|
* virtualenvwrapper (or use any other tool to create virtual Python
|
|
15
15
|
environments)
|
|
16
16
|
* Node.js (version 14)
|
|
17
17
|
* yarn
|
|
18
18
|
|
|
19
19
|
``` shell
|
|
20
|
-
brew install python@3.11 postgresql@
|
|
20
|
+
brew install python@3.11 postgresql@15 virtualenvwrapper node@14 yarn
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
### Step 2 - Database setup
|
|
@@ -26,7 +26,7 @@ Start the database server and create the database with the following commands,
|
|
|
26
26
|
use `nwa` as password:
|
|
27
27
|
|
|
28
28
|
``` shell
|
|
29
|
-
brew services start postgresql@
|
|
29
|
+
brew services start postgresql@15
|
|
30
30
|
createuser -sP nwa
|
|
31
31
|
createdb orchestrator-core -O nwa
|
|
32
32
|
```
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2019-
|
|
1
|
+
# Copyright 2019-2025 SURF, GÉANT.
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
"""This is the orchestrator workflow engine."""
|
|
15
15
|
|
|
16
|
-
__version__ = "3.1.
|
|
16
|
+
__version__ = "3.1.2"
|
|
17
17
|
|
|
18
18
|
from orchestrator.app import OrchestratorCore
|
|
19
19
|
from orchestrator.settings import app_settings
|
{orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/processes.py
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2019-
|
|
1
|
+
# Copyright 2019-2025 SURF, GÉANT, ESnet.
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -40,13 +40,7 @@ from orchestrator.db.filters import Filter
|
|
|
40
40
|
from orchestrator.db.filters.process import filter_processes
|
|
41
41
|
from orchestrator.db.sorting import Sort, SortOrder
|
|
42
42
|
from orchestrator.db.sorting.process import sort_processes
|
|
43
|
-
from orchestrator.schemas import
|
|
44
|
-
ProcessIdSchema,
|
|
45
|
-
ProcessResumeAllSchema,
|
|
46
|
-
ProcessSchema,
|
|
47
|
-
ProcessStatusCounts,
|
|
48
|
-
Reporter,
|
|
49
|
-
)
|
|
43
|
+
from orchestrator.schemas import ProcessIdSchema, ProcessResumeAllSchema, ProcessSchema, ProcessStatusCounts, Reporter
|
|
50
44
|
from orchestrator.security import authenticate
|
|
51
45
|
from orchestrator.services.process_broadcast_thread import api_broadcast_process_data
|
|
52
46
|
from orchestrator.services.processes import (
|
|
@@ -58,6 +52,7 @@ from orchestrator.services.processes import (
|
|
|
58
52
|
load_process,
|
|
59
53
|
resume_process,
|
|
60
54
|
start_process,
|
|
55
|
+
update_awaiting_process_progress,
|
|
61
56
|
)
|
|
62
57
|
from orchestrator.services.settings import get_engine_settings
|
|
63
58
|
from orchestrator.settings import app_settings
|
|
@@ -138,9 +133,12 @@ async def new_process(
|
|
|
138
133
|
request: Request,
|
|
139
134
|
json_data: list[dict[str, Any]] | None = Body(...),
|
|
140
135
|
user: str = Depends(user_name),
|
|
136
|
+
user_model: OIDCUserModel | None = Depends(authenticate),
|
|
141
137
|
) -> dict[str, UUID]:
|
|
142
138
|
broadcast_func = api_broadcast_process_data(request)
|
|
143
|
-
process_id = start_process(
|
|
139
|
+
process_id = start_process(
|
|
140
|
+
workflow_key, user_inputs=json_data, user_model=user_model, user=user, broadcast_func=broadcast_func
|
|
141
|
+
)
|
|
144
142
|
|
|
145
143
|
return {"id": process_id}
|
|
146
144
|
|
|
@@ -197,6 +195,28 @@ def continue_awaiting_process_endpoint(
|
|
|
197
195
|
raise_status(HTTPStatus.NOT_FOUND, str(e))
|
|
198
196
|
|
|
199
197
|
|
|
198
|
+
@router.post(
|
|
199
|
+
"/{process_id}/callback/{token}/progress",
|
|
200
|
+
response_model=None,
|
|
201
|
+
status_code=HTTPStatus.OK,
|
|
202
|
+
dependencies=[Depends(check_global_lock, use_cache=False)],
|
|
203
|
+
)
|
|
204
|
+
def update_progress_on_awaiting_process_endpoint(
|
|
205
|
+
process_id: UUID,
|
|
206
|
+
token: str,
|
|
207
|
+
data: str | State = Body(...),
|
|
208
|
+
) -> None:
|
|
209
|
+
process = _get_process(process_id)
|
|
210
|
+
|
|
211
|
+
if process.last_status != ProcessStatus.AWAITING_CALLBACK:
|
|
212
|
+
raise_status(HTTPStatus.CONFLICT, "This process is not in an awaiting state.")
|
|
213
|
+
|
|
214
|
+
try:
|
|
215
|
+
update_awaiting_process_progress(process, token=token, data=data)
|
|
216
|
+
except AssertionError as exc:
|
|
217
|
+
raise_status(HTTPStatus.NOT_FOUND, str(exc))
|
|
218
|
+
|
|
219
|
+
|
|
200
220
|
@router.put(
|
|
201
221
|
"/resume-all", response_model=ProcessResumeAllSchema, dependencies=[Depends(check_global_lock, use_cache=False)]
|
|
202
222
|
)
|
|
@@ -5,7 +5,7 @@ This module contains the main `OrchestratorCore` class for the `FastAPI` backend
|
|
|
5
5
|
provides the ability to run the CLI.
|
|
6
6
|
"""
|
|
7
7
|
|
|
8
|
-
# Copyright 2019-2020 SURF, ESnet
|
|
8
|
+
# Copyright 2019-2020 SURF, ESnet, GÉANT.
|
|
9
9
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
10
10
|
# you may not use this file except in compliance with the License.
|
|
11
11
|
# You may obtain a copy of the License at
|
|
@@ -31,16 +31,13 @@ from orchestrator.cli.generator.generator.helpers import (
|
|
|
31
31
|
sort_product_blocks_by_dependencies,
|
|
32
32
|
)
|
|
33
33
|
from orchestrator.cli.generator.generator.settings import product_generator_settings as settings
|
|
34
|
-
from orchestrator.settings import convert_database_uri
|
|
35
34
|
|
|
36
35
|
logger = structlog.getLogger(__name__)
|
|
37
36
|
|
|
38
37
|
|
|
39
38
|
def create_migration_file(message: str, head: str) -> Path | None:
|
|
40
|
-
if environ.get("DATABASE_URI"):
|
|
41
|
-
environ.update({"DATABASE_URI":
|
|
42
|
-
else:
|
|
43
|
-
environ.update({"DATABASE_URI": "postgresql+psycopg://nwa:nwa@localhost/orchestrator-core"})
|
|
39
|
+
if not environ.get("DATABASE_URI"):
|
|
40
|
+
environ.update({"DATABASE_URI": "postgresql://nwa:nwa@localhost/orchestrator-core"})
|
|
44
41
|
if not environ.get("PYTHONPATH"):
|
|
45
42
|
environ.update({"PYTHONPATH": "."})
|
|
46
43
|
logger.info(
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
# Copyright 2019-2025 SURF, GÉANT.
|
|
2
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
|
+
# you may not use this file except in compliance with the License.
|
|
4
|
+
# You may obtain a copy of the License at
|
|
5
|
+
#
|
|
6
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
7
|
+
#
|
|
8
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
9
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
10
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
11
|
+
# See the License for the specific language governing permissions and
|
|
12
|
+
# limitations under the License.
|
|
13
|
+
|
|
1
14
|
import itertools
|
|
2
15
|
import operator
|
|
3
16
|
from collections.abc import Iterable
|
|
@@ -19,6 +19,7 @@ from orchestrator.db.database import Database, transactional
|
|
|
19
19
|
from orchestrator.db.models import ( # noqa: F401
|
|
20
20
|
EngineSettingsTable,
|
|
21
21
|
FixedInputTable,
|
|
22
|
+
InputStateTable,
|
|
22
23
|
ProcessStepTable,
|
|
23
24
|
ProcessSubscriptionTable,
|
|
24
25
|
ProcessTable,
|
|
@@ -85,6 +86,7 @@ __all__ = [
|
|
|
85
86
|
"SubscriptionMetadataTable",
|
|
86
87
|
"ResourceTypeTable",
|
|
87
88
|
"FixedInputTable",
|
|
89
|
+
"InputStateTable",
|
|
88
90
|
"EngineSettingsTable",
|
|
89
91
|
"WorkflowTable",
|
|
90
92
|
"SubscriptionCustomerDescriptionTable",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2019-2020 SURF.
|
|
1
|
+
# Copyright 2019-2020 SURF, GÉANT.
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -92,7 +92,7 @@ class InputStateTable(BaseModel):
|
|
|
92
92
|
|
|
93
93
|
input_state_id = mapped_column(UUIDType, primary_key=True, server_default=text("uuid_generate_v4()"), index=True)
|
|
94
94
|
process_id = mapped_column("pid", UUIDType, ForeignKey("processes.pid"), nullable=False)
|
|
95
|
-
input_state = mapped_column(pg.JSONB(), nullable=False)
|
|
95
|
+
input_state = mapped_column(pg.JSONB(), nullable=False)
|
|
96
96
|
input_time = mapped_column(UtcTimestamp, server_default=text("current_timestamp()"), nullable=False)
|
|
97
97
|
input_type = mapped_column(Enum(InputType), nullable=False)
|
|
98
98
|
|
|
@@ -137,7 +137,7 @@ class ProcessStepTable(BaseModel):
|
|
|
137
137
|
)
|
|
138
138
|
name = mapped_column(String(), nullable=False)
|
|
139
139
|
status = mapped_column(String(50), nullable=False)
|
|
140
|
-
state = mapped_column(pg.JSONB(), nullable=False)
|
|
140
|
+
state = mapped_column(pg.JSONB(), nullable=False)
|
|
141
141
|
created_by = mapped_column(String(255), nullable=True)
|
|
142
142
|
executed_at = mapped_column(UtcTimestamp, server_default=text("statement_timestamp()"), nullable=False)
|
|
143
143
|
commit_hash = mapped_column(String(40), nullable=True, default=GIT_COMMIT_HASH)
|
|
@@ -642,7 +642,7 @@ class SubscriptionMetadataTable(BaseModel):
|
|
|
642
642
|
primary_key=True,
|
|
643
643
|
index=True,
|
|
644
644
|
)
|
|
645
|
-
metadata_ = mapped_column("metadata", pg.JSONB(), nullable=False)
|
|
645
|
+
metadata_ = mapped_column("metadata", pg.JSONB(), nullable=False)
|
|
646
646
|
|
|
647
647
|
@staticmethod
|
|
648
648
|
def find_by_subscription_id(subscription_id: str) -> SubscriptionMetadataTable | None:
|
|
@@ -651,6 +651,8 @@ class SubscriptionMetadataTable(BaseModel):
|
|
|
651
651
|
|
|
652
652
|
class SubscriptionSearchView(BaseModel):
|
|
653
653
|
__tablename__ = "subscriptions_search"
|
|
654
|
+
__table_args__ = {"info": {"materialized_view": True}}
|
|
655
|
+
|
|
654
656
|
subscription_id = mapped_column(
|
|
655
657
|
UUIDType, ForeignKey("subscriptions.subscription_id"), nullable=False, index=True, primary_key=True
|
|
656
658
|
)
|
|
@@ -11,11 +11,10 @@
|
|
|
11
11
|
# See the License for the specific language governing permissions and
|
|
12
12
|
# limitations under the License.
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
from orchestrator.domain.base import SubscriptionModel
|
|
14
|
+
from orchestrator.domain.base import SubscriptionModel, SubscriptionModelRegistry
|
|
16
15
|
from orchestrator.utils.docs import make_product_type_index_doc
|
|
17
16
|
|
|
18
|
-
SUBSCRIPTION_MODEL_REGISTRY:
|
|
17
|
+
SUBSCRIPTION_MODEL_REGISTRY: SubscriptionModelRegistry = SubscriptionModelRegistry()
|
|
19
18
|
|
|
20
19
|
__doc__ = make_product_type_index_doc(SUBSCRIPTION_MODEL_REGISTRY)
|
|
21
20
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2019-
|
|
1
|
+
# Copyright 2019-2025 SURF, ESnet, GÉANT.
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -12,14 +12,16 @@
|
|
|
12
12
|
# limitations under the License.
|
|
13
13
|
import itertools
|
|
14
14
|
from collections import defaultdict
|
|
15
|
-
from collections.abc import Callable, Iterable
|
|
16
15
|
from datetime import datetime
|
|
17
|
-
from inspect import get_annotations
|
|
16
|
+
from inspect import get_annotations, isclass
|
|
18
17
|
from itertools import groupby, zip_longest
|
|
19
18
|
from operator import attrgetter
|
|
20
19
|
from typing import (
|
|
21
20
|
Any,
|
|
21
|
+
Callable,
|
|
22
22
|
ClassVar,
|
|
23
|
+
Iterable,
|
|
24
|
+
Mapping,
|
|
23
25
|
Optional,
|
|
24
26
|
TypeVar,
|
|
25
27
|
Union,
|
|
@@ -596,7 +598,9 @@ class ProductBlockModel(DomainModel):
|
|
|
596
598
|
product_blocks_in_model = cls._get_depends_on_product_block_types()
|
|
597
599
|
product_blocks_types_in_model = get_depends_on_product_block_type_list(product_blocks_in_model)
|
|
598
600
|
|
|
599
|
-
product_blocks_in_model = set(
|
|
601
|
+
product_blocks_in_model = set(
|
|
602
|
+
flatten(map(attrgetter("__names__"), product_blocks_types_in_model))
|
|
603
|
+
) # type: ignore
|
|
600
604
|
|
|
601
605
|
missing_product_blocks_in_db = product_blocks_in_model - product_blocks_in_db # type: ignore
|
|
602
606
|
missing_product_blocks_in_model = product_blocks_in_db - product_blocks_in_model # type: ignore
|
|
@@ -1051,7 +1055,9 @@ class SubscriptionModel(DomainModel):
|
|
|
1051
1055
|
product_blocks_in_model = cls._get_depends_on_product_block_types()
|
|
1052
1056
|
product_blocks_types_in_model = get_depends_on_product_block_type_list(product_blocks_in_model)
|
|
1053
1057
|
|
|
1054
|
-
product_blocks_in_model = set(
|
|
1058
|
+
product_blocks_in_model = set(
|
|
1059
|
+
flatten(map(attrgetter("__names__"), product_blocks_types_in_model))
|
|
1060
|
+
) # type: ignore
|
|
1055
1061
|
|
|
1056
1062
|
missing_product_blocks_in_db = product_blocks_in_model - product_blocks_in_db # type: ignore
|
|
1057
1063
|
missing_product_blocks_in_model = product_blocks_in_db - product_blocks_in_model # type: ignore
|
|
@@ -1402,6 +1408,69 @@ class SubscriptionModel(DomainModel):
|
|
|
1402
1408
|
return self._db_model
|
|
1403
1409
|
|
|
1404
1410
|
|
|
1411
|
+
def validate_base_model(
|
|
1412
|
+
name: str, cls: type[Any], base_model: type[BaseModel] = DomainModel, errors: list[str] | None = None
|
|
1413
|
+
) -> None:
|
|
1414
|
+
"""Validates that the given class is not Pydantic BaseModel or its direct subclass."""
|
|
1415
|
+
# Instantiate errors list if not provided and avoid mutating default
|
|
1416
|
+
if errors is None:
|
|
1417
|
+
errors = []
|
|
1418
|
+
# Return early when the node is not a class as there is nothing to be done
|
|
1419
|
+
if not isclass(cls):
|
|
1420
|
+
return
|
|
1421
|
+
# Validate each field in the ProductBlockModel's field dictionaries
|
|
1422
|
+
if issubclass(cls, ProductBlockModel) or issubclass(cls, SubscriptionModel):
|
|
1423
|
+
for name, clz in cls._product_block_fields_.items():
|
|
1424
|
+
validate_base_model(name, clz, ProductBlockModel, errors)
|
|
1425
|
+
for name, clz in cls._non_product_block_fields_.items():
|
|
1426
|
+
validate_base_model(name, clz, SubscriptionModel, errors)
|
|
1427
|
+
# Generate error if node is Pydantic BaseModel or direct subclass
|
|
1428
|
+
if issubclass(cls, BaseModel):
|
|
1429
|
+
err_msg: str = (
|
|
1430
|
+
f"If this field was intended to be a {base_model.__name__}, define {name}:{cls.__name__} with "
|
|
1431
|
+
f"{base_model.__name__} as its superclass instead. e.g., class {cls.__name__}({base_model.__name__}):"
|
|
1432
|
+
)
|
|
1433
|
+
if cls is BaseModel:
|
|
1434
|
+
errors.append(f"Field {name}: {cls.__name__} can not be {BaseModel.__name__}. " + err_msg)
|
|
1435
|
+
if len(cls.__mro__) > 1 and cls.__mro__[1] is BaseModel:
|
|
1436
|
+
errors.append(
|
|
1437
|
+
f"Field {name}: {cls.__name__} can not be a direct subclass of {BaseModel.__name__}. " + err_msg
|
|
1438
|
+
)
|
|
1439
|
+
# Format all errors as one per line and raise a TypeError when they exist
|
|
1440
|
+
if errors:
|
|
1441
|
+
raise TypeError("\n".join(errors))
|
|
1442
|
+
|
|
1443
|
+
|
|
1444
|
+
class SubscriptionModelRegistry(dict[str, type[SubscriptionModel]]):
|
|
1445
|
+
"""A registry for all subscription models."""
|
|
1446
|
+
|
|
1447
|
+
def __setitem__(self, __key: str, __value: type[SubscriptionModel]) -> None:
|
|
1448
|
+
"""Set value for key in while validating against Pydantic BaseModel."""
|
|
1449
|
+
validate_base_model(__key, __value)
|
|
1450
|
+
super().__setitem__(__key, __value)
|
|
1451
|
+
|
|
1452
|
+
def update(
|
|
1453
|
+
self,
|
|
1454
|
+
m: Any = None,
|
|
1455
|
+
/,
|
|
1456
|
+
**kwargs: type[SubscriptionModel],
|
|
1457
|
+
) -> None:
|
|
1458
|
+
"""Update dictionary with mapping and/or kwargs using `__setitem__`."""
|
|
1459
|
+
if m:
|
|
1460
|
+
if isinstance(m, Mapping):
|
|
1461
|
+
for key, value in m.items():
|
|
1462
|
+
self[key] = value
|
|
1463
|
+
elif isinstance(m, Iterable):
|
|
1464
|
+
for index, item in enumerate(m):
|
|
1465
|
+
try:
|
|
1466
|
+
key, value = item
|
|
1467
|
+
except ValueError:
|
|
1468
|
+
raise TypeError(f"dictionary update sequence element #{index} is not an iterable of length 2")
|
|
1469
|
+
self[key] = value
|
|
1470
|
+
for key, value in kwargs.items():
|
|
1471
|
+
self[key] = value
|
|
1472
|
+
|
|
1473
|
+
|
|
1405
1474
|
def _validate_lifecycle_change_for_product_block(
|
|
1406
1475
|
used_by: SubscriptionInstanceTable,
|
|
1407
1476
|
product_block_model: ProductBlockModel,
|