orchestrator-core 4.1.0rc2__tar.gz → 4.2.0rc2__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-4.2.0rc2/PKG-INFO +167 -0
- orchestrator_core-4.2.0rc2/README.md +96 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/__init__.py +1 -1
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/processes.py +6 -2
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/subscriptions.py +25 -2
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/database.py +8 -1
- orchestrator_core-4.2.0rc2/orchestrator/cli/domain_gen_helpers/helpers.py +97 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +35 -15
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +5 -5
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/domain_gen_helpers/types.py +7 -1
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/create_product.j2 +1 -2
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/migrate_domain_models.py +16 -5
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/models.py +6 -3
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/process.py +21 -2
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/product.py +8 -9
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/workflow.py +9 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/types.py +7 -1
- orchestrator_core-4.2.0rc2/orchestrator/migrations/versions/schema/2025-07-01_93fc5834c7e5_changed_timestamping_fields_in_process_steps.py +65 -0
- orchestrator_core-4.2.0rc2/orchestrator/migrations/versions/schema/2025-07-04_4b58e336d1bf_deprecating_workflow_target_in_.py +30 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/process.py +5 -1
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/processes.py +11 -2
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/enrich_process.py +4 -2
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/errors.py +2 -1
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflow.py +7 -2
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/modify_note.py +1 -1
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/steps.py +14 -8
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/utils.py +3 -3
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/pyproject.toml +91 -92
- orchestrator_core-4.1.0rc2/.bumpversion.cfg +0 -12
- orchestrator_core-4.1.0rc2/.coveragerc +0 -2
- orchestrator_core-4.1.0rc2/.github/ISSUE_TEMPLATE/bug-report.yml +0 -52
- orchestrator_core-4.1.0rc2/.github/ISSUE_TEMPLATE/feature-request.yml +0 -32
- orchestrator_core-4.1.0rc2/.github/dependabot.yml +0 -11
- orchestrator_core-4.1.0rc2/.github/workflows/README.md +0 -65
- orchestrator_core-4.1.0rc2/.github/workflows/build-push-container.yml +0 -58
- orchestrator_core-4.1.0rc2/.github/workflows/changelog.yml +0 -13
- orchestrator_core-4.1.0rc2/.github/workflows/codeql-analysis.yml +0 -68
- orchestrator_core-4.1.0rc2/.github/workflows/gh-pages.yml +0 -17
- orchestrator_core-4.1.0rc2/.github/workflows/issues.yml +0 -13
- orchestrator_core-4.1.0rc2/.github/workflows/publish-package.yml +0 -25
- orchestrator_core-4.1.0rc2/.github/workflows/run-codspeed-tests.yml +0 -71
- orchestrator_core-4.1.0rc2/.github/workflows/run-linting-tests.yml +0 -36
- orchestrator_core-4.1.0rc2/.github/workflows/run-unit-tests.yml +0 -68
- orchestrator_core-4.1.0rc2/.github/workflows/scheduled-build.yml +0 -42
- orchestrator_core-4.1.0rc2/.gitignore +0 -135
- orchestrator_core-4.1.0rc2/.pre-commit-config.yaml +0 -86
- orchestrator_core-4.1.0rc2/.stignore +0 -101
- orchestrator_core-4.1.0rc2/CHANGELOG.md +0 -481
- orchestrator_core-4.1.0rc2/Dockerfile +0 -24
- orchestrator_core-4.1.0rc2/NOTICE +0 -7
- orchestrator_core-4.1.0rc2/PKG-INFO +0 -118
- orchestrator_core-4.1.0rc2/README.md +0 -200
- orchestrator_core-4.1.0rc2/codecov.yml +0 -8
- orchestrator_core-4.1.0rc2/docs/architecture/application/domainmodels.md +0 -236
- orchestrator_core-4.1.0rc2/docs/architecture/application/forms-frontend.md +0 -231
- orchestrator_core-4.1.0rc2/docs/architecture/application/tasks.md +0 -169
- orchestrator_core-4.1.0rc2/docs/architecture/application/workflow.md +0 -295
- orchestrator_core-4.1.0rc2/docs/architecture/framework.md +0 -28
- orchestrator_core-4.1.0rc2/docs/architecture/img/base-orchestrator-setup.png +0 -0
- orchestrator_core-4.1.0rc2/docs/architecture/img/custom-orchestrator-setup.png +0 -0
- orchestrator_core-4.1.0rc2/docs/architecture/orchestration/img/Custom-orchestrator-ui-using-override.png +0 -0
- orchestrator_core-4.1.0rc2/docs/architecture/orchestration/img/Standard-orchestrator-ui.png +0 -0
- orchestrator_core-4.1.0rc2/docs/architecture/orchestration/orchestrator-ui.md +0 -265
- orchestrator_core-4.1.0rc2/docs/architecture/orchestration/philosophy.md +0 -16
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/backfilling.md +0 -77
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/context.md +0 -11
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/imports.md +0 -90
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/introduction.md +0 -13
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/ip_static.md +0 -27
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/ip_static.png +0 -0
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/l2_point_to_point.md +0 -21
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/l2_point_to_point.png +0 -0
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/l2_vpn.md +0 -15
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/l2_vpn.png +0 -0
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/modelling.md +0 -22
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/node.md +0 -20
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/node.png +0 -0
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/port.md +0 -20
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/port.png +0 -0
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/product_block_graph.md +0 -26
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/product_block_graph.png +0 -0
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/standards.md +0 -16
- orchestrator_core-4.1.0rc2/docs/architecture/product_modelling/terminology.md +0 -17
- orchestrator_core-4.1.0rc2/docs/architecture/tldr.md +0 -40
- orchestrator_core-4.1.0rc2/docs/contributing/development.md +0 -109
- orchestrator_core-4.1.0rc2/docs/contributing/guidelines.md +0 -41
- orchestrator_core-4.1.0rc2/docs/contributing/testing.md +0 -278
- orchestrator_core-4.1.0rc2/docs/css/custom.css +0 -24
- orchestrator_core-4.1.0rc2/docs/css/style.css +0 -27
- orchestrator_core-4.1.0rc2/docs/css/termynal.css +0 -108
- orchestrator_core-4.1.0rc2/docs/getting-started/base.md +0 -99
- orchestrator_core-4.1.0rc2/docs/getting-started/docker.md +0 -23
- orchestrator_core-4.1.0rc2/docs/getting-started/orchestration-ui.md +0 -59
- orchestrator_core-4.1.0rc2/docs/getting-started/prepare-source-folder.md +0 -110
- orchestrator_core-4.1.0rc2/docs/getting-started/versions.md +0 -12
- orchestrator_core-4.1.0rc2/docs/img/WFO-Emblem-White.png +0 -0
- orchestrator_core-4.1.0rc2/docs/img/favicon.ico +0 -0
- orchestrator_core-4.1.0rc2/docs/index.md +0 -82
- orchestrator_core-4.1.0rc2/docs/js/custom.js +0 -105
- orchestrator_core-4.1.0rc2/docs/js/termynal.js +0 -264
- orchestrator_core-4.1.0rc2/docs/migration-guide/2.0.md +0 -331
- orchestrator_core-4.1.0rc2/docs/migration-guide/3.0.md +0 -14
- orchestrator_core-4.1.0rc2/docs/migration-guide/4.0.md +0 -73
- orchestrator_core-4.1.0rc2/docs/reference-docs/api.md +0 -6
- orchestrator_core-4.1.0rc2/docs/reference-docs/app/app.md +0 -26
- orchestrator_core-4.1.0rc2/docs/reference-docs/app/scaling.md +0 -250
- orchestrator_core-4.1.0rc2/docs/reference-docs/app/settings_overview.md +0 -89
- orchestrator_core-4.1.0rc2/docs/reference-docs/auth-backend-and-frontend.md +0 -595
- orchestrator_core-4.1.0rc2/docs/reference-docs/cli.md +0 -761
- orchestrator_core-4.1.0rc2/docs/reference-docs/database.md +0 -36
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/generator.md +0 -3
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/instantiating.md +0 -0
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/model_attributes.md +0 -57
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/overview.md +0 -4
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/product_blocks.md +0 -44
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/product_types.md +0 -56
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/properties.md +0 -0
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/pydantic_hooks.md +0 -0
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/type_casting.md +0 -0
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/union_types.md +0 -0
- orchestrator_core-4.1.0rc2/docs/reference-docs/domain_models/validation.md +0 -0
- orchestrator_core-4.1.0rc2/docs/reference-docs/forms.md +0 -438
- orchestrator_core-4.1.0rc2/docs/reference-docs/graphql.md +0 -686
- orchestrator_core-4.1.0rc2/docs/reference-docs/metrics.md +0 -45
- orchestrator_core-4.1.0rc2/docs/reference-docs/python.md +0 -27
- orchestrator_core-4.1.0rc2/docs/reference-docs/search.md +0 -264
- orchestrator_core-4.1.0rc2/docs/reference-docs/search_overview.png +0 -0
- orchestrator_core-4.1.0rc2/docs/reference-docs/serialization.md +0 -0
- orchestrator_core-4.1.0rc2/docs/reference-docs/tasks.md +0 -0
- orchestrator_core-4.1.0rc2/docs/reference-docs/tests.md +0 -0
- orchestrator_core-4.1.0rc2/docs/reference-docs/tldr.md +0 -3
- orchestrator_core-4.1.0rc2/docs/reference-docs/websockets.md +0 -107
- orchestrator_core-4.1.0rc2/docs/reference-docs/workflows/callbacks.md +0 -178
- orchestrator_core-4.1.0rc2/docs/reference-docs/workflows/workflow-lifecycles.md +0 -9
- orchestrator_core-4.1.0rc2/docs/reference-docs/workflows/workflow-steps.md +0 -28
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/bootstrap.md +0 -168
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/create-your-own.md +0 -9
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/docker-installation.md +0 -89
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/domain-models.md +0 -10
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/execute-workflows.md +0 -46
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/generator.md +0 -169
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/l2_point_to_point.png +0 -0
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/node-create.md +0 -2
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/node-modify.md +0 -2
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/node-terminate.md +0 -2
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/node-validate.md +0 -2
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/overview.md +0 -86
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/scenario.md +0 -19
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/workflow-basics.md +0 -3
- orchestrator_core-4.1.0rc2/docs/workshops/advanced/workflow-introduction.md +0 -36
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/create-user-group.md +0 -132
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/create-user.md +0 -137
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/database-migration.md +0 -192
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/debian.md +0 -145
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/docker.md +0 -78
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/domain-models.md +0 -187
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/explore.md +0 -73
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/input-forms.md +0 -111
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/macos.md +0 -146
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/modify-user-group.md +0 -79
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/modify-user.md +0 -61
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/register-workflows.md +0 -113
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/start-applications.md +0 -40
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/terminate-user-group.md +0 -79
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/terminate-user.md +0 -44
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/workflow-introduction.md +0 -78
- orchestrator_core-4.1.0rc2/docs/workshops/beginner/workshop-overview.md +0 -92
- orchestrator_core-4.1.0rc2/docs/workshops/images/Software-topology.drawio.png +0 -0
- orchestrator_core-4.1.0rc2/docs/workshops/images/clab_topology.png +0 -0
- orchestrator_core-4.1.0rc2/docs/workshops/images/metadata_products.png +0 -0
- orchestrator_core-4.1.0rc2/docs/workshops/images/netbox_devices_active.png +0 -0
- orchestrator_core-4.1.0rc2/docs/workshops/images/subscriptions.png +0 -0
- orchestrator_core-4.1.0rc2/docs/workshops/images/topology.drawio.png +0 -0
- orchestrator_core-4.1.0rc2/includes/abbreviations.md +0 -6
- orchestrator_core-4.1.0rc2/mkdocs.yml +0 -248
- orchestrator_core-4.1.0rc2/nitpick-style.toml +0 -2
- orchestrator_core-4.1.0rc2/orchestrator/cli/domain_gen_helpers/helpers.py +0 -55
- orchestrator_core-4.1.0rc2/setup.cfg +0 -69
- orchestrator_core-4.1.0rc2/setup.py +0 -20
- orchestrator_core-4.1.0rc2/test/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/acceptance_tests/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/acceptance_tests/conftest.py +0 -110
- orchestrator_core-4.1.0rc2/test/acceptance_tests/fixtures/test_orchestrator/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/test_product_populator.py +0 -61
- orchestrator_core-4.1.0rc2/test/acceptance_tests/fixtures/test_orchestrator/main.py +0 -40
- orchestrator_core-4.1.0rc2/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/test_product_blocks.py +0 -46
- orchestrator_core-4.1.0rc2/test/acceptance_tests/fixtures/test_orchestrator/products/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/acceptance_tests/fixtures/test_orchestrator/products/test_product.py +0 -33
- orchestrator_core-4.1.0rc2/test/acceptance_tests/fixtures/test_orchestrator/workflows/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/acceptance_tests/fixtures/test_orchestrator/workflows/create_test_product.py +0 -84
- orchestrator_core-4.1.0rc2/test/acceptance_tests/test_test_product.py +0 -23
- orchestrator_core-4.1.0rc2/test/unit_tests/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/api/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_health.py +0 -30
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_helpers.py +0 -85
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_models.py +0 -45
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_processes.py +0 -756
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_processes_ws.py +0 -334
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_product_blocks.py +0 -58
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_products.py +0 -202
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_resource_types.py +0 -56
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_settings.py +0 -98
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_subscription_customer_descriptions.py +0 -145
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_subscriptions.py +0 -846
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_workflows.py +0 -57
- orchestrator_core-4.1.0rc2/test/unit_tests/api/test_ws.py +0 -103
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/conftest.py +0 -33
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/alembic.ini +0 -45
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/main.py +0 -7
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/migrations/env.py +0 -89
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/migrations/helpers.py +0 -3
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/migrations/script.py.mako +0 -23
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_59e1199aff7f_create_data_head.py +0 -21
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_85be1c80731c_add_example2.py +0 -93
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_ea9e6c9de75c_add_example1.py +0 -135
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-06-07_380a5b0c928c_add_example4.py +0 -105
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/products/__init__.py +0 -26
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/products/product_blocks/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/products/product_blocks/example1.py +0 -61
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/products/product_blocks/example2.py +0 -30
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/products/product_blocks/example4.py +0 -26
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/products/product_blocks/example4sub.py +0 -21
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/products/product_types/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/products/product_types/example1.py +0 -28
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/products/product_types/example2.py +0 -16
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/products/product_types/example4.py +0 -16
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example1.py +0 -53
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example2.py +0 -53
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example4.py +0 -53
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_create_example1.py +0 -83
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_modify_example1.py +0 -70
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_terminate_example1.py +0 -43
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_validate_example1.py +0 -35
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_create_example2.py +0 -32
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_modify_example2.py +0 -33
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_terminate_example2.py +0 -26
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_validate_example2.py +0 -16
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_create_example4.py +0 -32
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_modify_example4.py +0 -33
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_terminate_example4.py +0 -26
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_validate_example4.py +0 -16
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/translations/en-GB.json +0 -16
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/__init__.py +0 -14
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example1/create_example1.py +0 -110
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example1/modify_example1.py +0 -98
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example1/shared/forms.py +0 -15
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example1/terminate_example1.py +0 -46
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example1/validate_example1.py +0 -29
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example2/create_example2.py +0 -79
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example2/modify_example2.py +0 -73
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example2/shared/forms.py +0 -1
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example2/terminate_example2.py +0 -39
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example4/create_example4.py +0 -78
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example4/modify_example4.py +0 -71
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example4/shared/forms.py +0 -1
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/example4/terminate_example4.py +0 -39
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate/workflows/shared.py +0 -36
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/generate.sh +0 -25
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/invalid_product_config1.yaml +0 -20
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/invalid_product_config2.yaml +0 -24
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/product_config1.yaml +0 -87
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/product_config2.yaml +0 -29
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/product_config3.yaml +0 -26
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/data/product_config4.yaml +0 -32
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/generator/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/generator/test_enums.py +0 -27
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/helpers.py +0 -19
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/test_cli_generate.py +0 -68
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/test_config_validation.py +0 -20
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/test_generate_code.py +0 -152
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/test_migrate_domain_models_with_instances.py +0 -764
- orchestrator_core-4.1.0rc2/test/unit_tests/cli/test_migrate_domain_models_without_instances.py +0 -728
- orchestrator_core-4.1.0rc2/test/unit_tests/config.py +0 -12
- orchestrator_core-4.1.0rc2/test/unit_tests/conftest.py +0 -805
- orchestrator_core-4.1.0rc2/test/unit_tests/db/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/db/test_listeners.py +0 -23
- orchestrator_core-4.1.0rc2/test/unit_tests/db/test_migration_does_column_exist.py +0 -10
- orchestrator_core-4.1.0rc2/test/unit_tests/domain/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/domain/test_base.py +0 -1301
- orchestrator_core-4.1.0rc2/test/unit_tests/domain/test_base_multiple.py +0 -226
- orchestrator_core-4.1.0rc2/test/unit_tests/domain/test_base_performance.py +0 -160
- orchestrator_core-4.1.0rc2/test/unit_tests/domain/test_base_serializable_property.py +0 -170
- orchestrator_core-4.1.0rc2/test/unit_tests/domain/test_base_with_list_union.py +0 -189
- orchestrator_core-4.1.0rc2/test/unit_tests/domain/test_base_with_union.py +0 -108
- orchestrator_core-4.1.0rc2/test/unit_tests/domain/test_lifecycle.py +0 -49
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/__init__.py +0 -88
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/processes.py +0 -180
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_blocks/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_blocks/product_block_list_nested.py +0 -67
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_blocks/product_block_one.py +0 -84
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_blocks/product_block_one_nested.py +0 -55
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_blocks/product_block_with_list_union.py +0 -64
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_blocks/product_block_with_union.py +0 -59
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_blocks/product_sub_block_one.py +0 -35
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_blocks/product_sub_block_two.py +0 -32
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/product_type_list_nested.py +0 -64
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/product_type_list_union.py +0 -52
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/product_type_list_union_overlap.py +0 -101
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/product_type_one.py +0 -95
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/product_type_one_nested.py +0 -65
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/product_type_sub_list_union.py +0 -82
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/product_type_sub_one.py +0 -57
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/product_type_sub_two.py +0 -57
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/product_type_sub_union.py +0 -45
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/product_type_union.py +0 -41
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/product_types/subscription_relations.py +0 -300
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/products/resource_types.py +0 -28
- orchestrator_core-4.1.0rc2/test/unit_tests/fixtures/workflows.py +0 -22
- orchestrator_core-4.1.0rc2/test/unit_tests/forms/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/forms/test_customer_contact_list.py +0 -140
- orchestrator_core-4.1.0rc2/test/unit_tests/forms/test_customer_id.py +0 -17
- orchestrator_core-4.1.0rc2/test/unit_tests/forms/test_display_subscription.py +0 -77
- orchestrator_core-4.1.0rc2/test/unit_tests/forms/test_generic_validators.py +0 -121
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/conftest.py +0 -55
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/extensions/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/extensions/test_stats.py +0 -30
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/mutations/helpers.py +0 -17
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/mutations/test_customer_description.py +0 -296
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/mutations/test_start_process.py +0 -86
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_customer.py +0 -69
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_process.py +0 -42
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_processes.py +0 -679
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_product.py +0 -350
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_product_blocks.py +0 -317
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_resource_types.py +0 -174
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_settings.py +0 -166
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_sort_and_filter_fields.py +0 -74
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_subscription.py +0 -105
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_subscription_relations.py +0 -617
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_subscriptions.py +0 -1581
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_version.py +0 -21
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/test_workflows.py +0 -234
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/utils/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/utils/fixtures.py +0 -157
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/utils/test_autoregistration.py +0 -12
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/utils/test_get_query_loaders.py +0 -55
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/utils/test_get_selected_paths.py +0 -49
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/utils/test_is_query_detailed.py +0 -207
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/utils/test_is_querying_page_data.py +0 -95
- orchestrator_core-4.1.0rc2/test/unit_tests/graphql/utils/test_override_class.py +0 -290
- orchestrator_core-4.1.0rc2/test/unit_tests/helpers.py +0 -32
- orchestrator_core-4.1.0rc2/test/unit_tests/metrics/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/metrics/conftest.py +0 -27
- orchestrator_core-4.1.0rc2/test/unit_tests/metrics/test_engine_metrics.py +0 -18
- orchestrator_core-4.1.0rc2/test/unit_tests/metrics/test_process_metrics.py +0 -27
- orchestrator_core-4.1.0rc2/test/unit_tests/metrics/test_subscription_metrics.py +0 -60
- orchestrator_core-4.1.0rc2/test/unit_tests/migrations/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/migrations/test_cascade_constraint.py +0 -55
- orchestrator_core-4.1.0rc2/test/unit_tests/schedules/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/schedules/test_scheduling.py +0 -26
- orchestrator_core-4.1.0rc2/test/unit_tests/services/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/services/test_expose_settings.py +0 -35
- orchestrator_core-4.1.0rc2/test/unit_tests/services/test_input_state.py +0 -62
- orchestrator_core-4.1.0rc2/test/unit_tests/services/test_processes.py +0 -927
- orchestrator_core-4.1.0rc2/test/unit_tests/services/test_products.py +0 -39
- orchestrator_core-4.1.0rc2/test/unit_tests/services/test_subscription_relations.py +0 -190
- orchestrator_core-4.1.0rc2/test/unit_tests/services/test_subscriptions.py +0 -160
- orchestrator_core-4.1.0rc2/test/unit_tests/services/test_translations.py +0 -61
- orchestrator_core-4.1.0rc2/test/unit_tests/test_db.py +0 -183
- orchestrator_core-4.1.0rc2/test/unit_tests/test_types.py +0 -12
- orchestrator_core-4.1.0rc2/test/unit_tests/test_workflow.py +0 -630
- orchestrator_core-4.1.0rc2/test/unit_tests/utils/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/utils/get_subscription_dict.py +0 -11
- orchestrator_core-4.1.0rc2/test/unit_tests/utils/test_datetime.py +0 -6
- orchestrator_core-4.1.0rc2/test/unit_tests/utils/test_errors.py +0 -54
- orchestrator_core-4.1.0rc2/test/unit_tests/utils/test_functional.py +0 -127
- orchestrator_core-4.1.0rc2/test/unit_tests/utils/test_get_updated_properties.py +0 -127
- orchestrator_core-4.1.0rc2/test/unit_tests/utils/test_json.py +0 -119
- orchestrator_core-4.1.0rc2/test/unit_tests/utils/test_search_query.py +0 -170
- orchestrator_core-4.1.0rc2/test/unit_tests/utils/test_state.py +0 -490
- orchestrator_core-4.1.0rc2/test/unit_tests/utils/test_strings.py +0 -6
- orchestrator_core-4.1.0rc2/test/unit_tests/websocket/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/websocket/test_broadcast.py +0 -93
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/__init__.py +0 -384
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/conftest.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/shared/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/shared/test_validate_subscriptions.py +0 -58
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/tasks/__init__.py +0 -0
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/tasks/test_clean_up_task_log.py +0 -75
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/tasks/test_resume_workflows.py +0 -79
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/tasks/test_validate_product_type.py +0 -39
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/tasks/test_validate_products.py +0 -9
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/test_async_workflow.py +0 -331
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/test_config_db_code.py +0 -77
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/test_generic_workflow_steps.py +0 -103
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/test_lifecycle_status_manager.py +0 -64
- orchestrator_core-4.1.0rc2/test/unit_tests/workflows/test_modify_note.py +0 -26
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/LICENSE +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/api.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/health.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/products.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/user.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/error_handling.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/api/models.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/app.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generate.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/custom_templates/README +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/enums.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/migration.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/product.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/product_block.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/settings.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/translations.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/unittest.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/validations.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/generator/workflow.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/enums.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/macros.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/product.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/helpers/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/helpers/input_helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/helpers/print_helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/main.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/migrate_tasks.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/migrate_workflows.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/migration_helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/cli/scheduler.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/config/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/config/assignee.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/database.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/filters/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/filters/filters.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/filters/process.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/filters/product.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/filters/product_block.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/filters/resource_type.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/filters/search_filters/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/filters/subscription.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/filters/workflow.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/listeners.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/loaders.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/queries/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/queries/subscription.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/queries/subscription_instance.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/range/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/range/range.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/sorting/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/sorting/process.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/sorting/product.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/sorting/product_block.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/sorting/resource_type.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/sorting/sorting.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/sorting/subscription.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/db/sorting/workflow.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/devtools/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/devtools/populator.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/devtools/scripts/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/devtools/scripts/migrate_20.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/devtools/scripts/migrate_30.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/devtools/scripts/shared.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/distlock/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/distlock/distlock_manager.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/distlock/managers/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/domain/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/domain/base.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/domain/context_cache.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/domain/customer_description.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/domain/helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/domain/lifecycle.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/domain/subscription_instance_transform.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/exception_handlers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/forms/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/forms/validators/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/forms/validators/customer_contact_list.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/forms/validators/customer_id.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/forms/validators/display_subscription.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/forms/validators/network_type_validators.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/forms/validators/product_id.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/autoregistration.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/extensions/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/extensions/model_cache.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/extensions/stats.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/loaders/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/loaders/subscriptions.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/mutations/customer_description.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/mutations/start_process.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/pagination.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/customer.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/process.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/product.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/product_block.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/resource_type.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/settings.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/subscription.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/version.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/resolvers/workflow.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schema.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/customer.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/customer_description.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/errors.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/fixed_input.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/product_block.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/resource_type.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/settings.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/subscription.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/schemas/version.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/utils/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/utils/override_class.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/log_config.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/metrics/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/metrics/engine.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/metrics/init.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/metrics/processes.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/metrics/subscriptions.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/README +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/alembic.ini +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/env.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/script.py.mako +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/templates/env.py.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/py.typed +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schedules/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schedules/resume_workflows.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schedules/scheduling.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schedules/task_vacuum.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schedules/validate_products.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schedules/validate_subscriptions.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/base.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/engine_settings.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/fixed_input.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/problem_detail.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/product.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/product_block.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/resource_type.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/subscription.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/subscription_descriptions.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/schemas/workflow.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/security.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/celery.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/fixed_inputs.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/input_state.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/process_broadcast_thread.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/products.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/resource_types.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/settings.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/settings_env_variables.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/subscription_relations.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/subscriptions.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/tasks.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/translations.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/services/workflows.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/settings.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/targets.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/types.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/auth.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/crypt.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/datetime.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/deprecation_logger.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/docs.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/expose_settings.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/fixed_inputs.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/functional.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/get_subscription_dict.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/get_updated_properties.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/helpers.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/json.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/redis.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/redis_client.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/search_query.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/state.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/strings.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/utils/validate_data_version.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/version.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/websocket/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/websocket/websocket_manager.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/removed_workflow.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/tasks/__init__.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/tasks/validate_product_type.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/tasks/validate_products.py +0 -0
- {orchestrator_core-4.1.0rc2 → orchestrator_core-4.2.0rc2}/orchestrator/workflows/translations/en-GB.json +0 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: orchestrator-core
|
|
3
|
+
Version: 4.2.0rc2
|
|
4
|
+
Summary: This is the orchestrator workflow engine.
|
|
5
|
+
Author-email: SURF <automation-beheer@surf.nl>
|
|
6
|
+
Requires-Python: >=3.11,<3.14
|
|
7
|
+
Description-Content-Type: text/markdown
|
|
8
|
+
License-Expression: Apache-2.0
|
|
9
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
10
|
+
Classifier: Environment :: Web Environment
|
|
11
|
+
Classifier: Framework :: AsyncIO
|
|
12
|
+
Classifier: Framework :: FastAPI
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Information Technology
|
|
15
|
+
Classifier: Intended Audience :: System Administrators
|
|
16
|
+
Classifier: Intended Audience :: Telecommunications Industry
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python
|
|
24
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
|
|
25
|
+
Classifier: Topic :: Internet :: WWW/HTTP
|
|
26
|
+
Classifier: Topic :: Internet
|
|
27
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
28
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
29
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
30
|
+
Classifier: Topic :: Software Development
|
|
31
|
+
Classifier: Typing :: Typed
|
|
32
|
+
License-File: LICENSE
|
|
33
|
+
Requires-Dist: alembic==1.16.1
|
|
34
|
+
Requires-Dist: anyio>=3.7.0
|
|
35
|
+
Requires-Dist: click==8.*
|
|
36
|
+
Requires-Dist: deepmerge==2.0
|
|
37
|
+
Requires-Dist: deprecated>=1.2.18
|
|
38
|
+
Requires-Dist: fastapi~=0.115.2
|
|
39
|
+
Requires-Dist: fastapi-etag==0.4.0
|
|
40
|
+
Requires-Dist: itsdangerous>=2.2.0
|
|
41
|
+
Requires-Dist: jinja2==3.1.6
|
|
42
|
+
Requires-Dist: more-itertools~=10.7.0
|
|
43
|
+
Requires-Dist: nwa-stdlib~=1.9.0
|
|
44
|
+
Requires-Dist: oauth2-lib~=2.4.0
|
|
45
|
+
Requires-Dist: orjson==3.10.18
|
|
46
|
+
Requires-Dist: prometheus-client==0.22.1
|
|
47
|
+
Requires-Dist: psycopg2-binary==2.9.10
|
|
48
|
+
Requires-Dist: pydantic-forms>=1.4.0,<=2.1.0
|
|
49
|
+
Requires-Dist: pydantic-settings~=2.9.1
|
|
50
|
+
Requires-Dist: pydantic[email]~=2.8.2
|
|
51
|
+
Requires-Dist: python-dateutil==2.8.2
|
|
52
|
+
Requires-Dist: python-rapidjson>=1.18,<1.21
|
|
53
|
+
Requires-Dist: pytz==2025.2
|
|
54
|
+
Requires-Dist: redis==5.1.1
|
|
55
|
+
Requires-Dist: schedule==1.1.0
|
|
56
|
+
Requires-Dist: semver==3.0.4
|
|
57
|
+
Requires-Dist: sentry-sdk[fastapi]~=2.29.1
|
|
58
|
+
Requires-Dist: sqlalchemy==2.0.41
|
|
59
|
+
Requires-Dist: sqlalchemy-utils==0.41.2
|
|
60
|
+
Requires-Dist: strawberry-graphql>=0.246.2
|
|
61
|
+
Requires-Dist: structlog>=25.4.0
|
|
62
|
+
Requires-Dist: tabulate==0.9.0
|
|
63
|
+
Requires-Dist: typer==0.15.4
|
|
64
|
+
Requires-Dist: uvicorn[standard]~=0.34.0
|
|
65
|
+
Requires-Dist: celery~=5.5.1 ; extra == "celery"
|
|
66
|
+
Project-URL: Documentation, https://workfloworchestrator.org/orchestrator-core
|
|
67
|
+
Project-URL: Homepage, https://workfloworchestrator.org/orchestrator-core
|
|
68
|
+
Project-URL: Source, https://github.com/workfloworchestrator/orchestrator-core
|
|
69
|
+
Provides-Extra: celery
|
|
70
|
+
|
|
71
|
+
# Orchestrator-Core
|
|
72
|
+
|
|
73
|
+
[](https://pepy.tech/project/orchestrator-core)
|
|
74
|
+
[](https://codecov.io/gh/workfloworchestrator/orchestrator-core)
|
|
75
|
+
[](https://pypi.org/project/orchestrator-core)
|
|
76
|
+
[](https://pypi.org/project/orchestrator-core)
|
|
77
|
+

|
|
78
|
+
|
|
79
|
+
<p style="text-align: center"><em>Production ready Orchestration Framework to manage product lifecycle and workflows. Easy to use, built on top of FastAPI and Pydantic</em></p>
|
|
80
|
+
|
|
81
|
+
## Documentation
|
|
82
|
+
|
|
83
|
+
The documentation can be found at [workfloworchestrator.org](https://workfloworchestrator.org/orchestrator-core/).
|
|
84
|
+
|
|
85
|
+
## Installation (quick start)
|
|
86
|
+
|
|
87
|
+
Simplified steps to install and use the orchestrator-core.
|
|
88
|
+
For more details, read the [Getting started](https://workfloworchestrator.org/orchestrator-core/getting-started/base/) documentation.
|
|
89
|
+
|
|
90
|
+
### Step 1 - Install the package
|
|
91
|
+
|
|
92
|
+
Create a virtualenv and install the orchestrator-core.
|
|
93
|
+
|
|
94
|
+
```shell
|
|
95
|
+
python -m venv .venv
|
|
96
|
+
source .venv/bin/activate
|
|
97
|
+
pip install orchestrator-core
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Step 2 - Setup the database
|
|
101
|
+
|
|
102
|
+
Create a postgres database:
|
|
103
|
+
|
|
104
|
+
```shell
|
|
105
|
+
createuser -sP nwa
|
|
106
|
+
createdb orchestrator-core -O nwa # set password to 'nwa'
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Configure the database URI in your local environment:
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
export DATABASE_URI=postgresql://nwa:nwa@localhost:5432/orchestrator-core
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Step 3 - Create main.py
|
|
116
|
+
|
|
117
|
+
Create a `main.py` file.
|
|
118
|
+
|
|
119
|
+
```python
|
|
120
|
+
from orchestrator import OrchestratorCore
|
|
121
|
+
from orchestrator.cli.main import app as core_cli
|
|
122
|
+
from orchestrator.settings import AppSettings
|
|
123
|
+
|
|
124
|
+
app = OrchestratorCore(base_settings=AppSettings())
|
|
125
|
+
|
|
126
|
+
if __name__ == "__main__":
|
|
127
|
+
core_cli()
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Step 4 - Run the database migrations
|
|
131
|
+
|
|
132
|
+
Initialize the migration environment and database tables.
|
|
133
|
+
|
|
134
|
+
```shell
|
|
135
|
+
python main.py db init
|
|
136
|
+
python main.py db upgrade heads
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Step 5 - Run the app
|
|
140
|
+
|
|
141
|
+
```shell
|
|
142
|
+
export OAUTH2_ACTIVE=False
|
|
143
|
+
uvicorn --reload --host 127.0.0.1 --port 8080 main:app
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Visit the [ReDoc](http://127.0.0.1:8080/api/redoc) or [OpenAPI](http://127.0.0.1:8080/api/docs) page to view and interact with the API.
|
|
147
|
+
|
|
148
|
+
## Contributing
|
|
149
|
+
|
|
150
|
+
We use [uv](https://docs.astral.sh/uv/getting-started/installation/) to manage dependencies.
|
|
151
|
+
|
|
152
|
+
To get started, follow these steps:
|
|
153
|
+
|
|
154
|
+
```shell
|
|
155
|
+
# in your postgres database
|
|
156
|
+
createdb orchestrator-core-test -O nwa # set password to 'nwa'
|
|
157
|
+
|
|
158
|
+
# on your local machine
|
|
159
|
+
git clone https://github.com/workfloworchestrator/orchestrator-core
|
|
160
|
+
cd orchestrator-core
|
|
161
|
+
export DATABASE_URI=postgresql://nwa:nwa@localhost:5432/orchestrator-core-test
|
|
162
|
+
uv sync --all-extras --all-groups
|
|
163
|
+
uv run pytest
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
For more details please read the [development docs](https://workfloworchestrator.org/orchestrator-core/contributing/development/).
|
|
167
|
+
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# Orchestrator-Core
|
|
2
|
+
|
|
3
|
+
[](https://pepy.tech/project/orchestrator-core)
|
|
4
|
+
[](https://codecov.io/gh/workfloworchestrator/orchestrator-core)
|
|
5
|
+
[](https://pypi.org/project/orchestrator-core)
|
|
6
|
+
[](https://pypi.org/project/orchestrator-core)
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
<p style="text-align: center"><em>Production ready Orchestration Framework to manage product lifecycle and workflows. Easy to use, built on top of FastAPI and Pydantic</em></p>
|
|
10
|
+
|
|
11
|
+
## Documentation
|
|
12
|
+
|
|
13
|
+
The documentation can be found at [workfloworchestrator.org](https://workfloworchestrator.org/orchestrator-core/).
|
|
14
|
+
|
|
15
|
+
## Installation (quick start)
|
|
16
|
+
|
|
17
|
+
Simplified steps to install and use the orchestrator-core.
|
|
18
|
+
For more details, read the [Getting started](https://workfloworchestrator.org/orchestrator-core/getting-started/base/) documentation.
|
|
19
|
+
|
|
20
|
+
### Step 1 - Install the package
|
|
21
|
+
|
|
22
|
+
Create a virtualenv and install the orchestrator-core.
|
|
23
|
+
|
|
24
|
+
```shell
|
|
25
|
+
python -m venv .venv
|
|
26
|
+
source .venv/bin/activate
|
|
27
|
+
pip install orchestrator-core
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Step 2 - Setup the database
|
|
31
|
+
|
|
32
|
+
Create a postgres database:
|
|
33
|
+
|
|
34
|
+
```shell
|
|
35
|
+
createuser -sP nwa
|
|
36
|
+
createdb orchestrator-core -O nwa # set password to 'nwa'
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Configure the database URI in your local environment:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
export DATABASE_URI=postgresql://nwa:nwa@localhost:5432/orchestrator-core
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Step 3 - Create main.py
|
|
46
|
+
|
|
47
|
+
Create a `main.py` file.
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
from orchestrator import OrchestratorCore
|
|
51
|
+
from orchestrator.cli.main import app as core_cli
|
|
52
|
+
from orchestrator.settings import AppSettings
|
|
53
|
+
|
|
54
|
+
app = OrchestratorCore(base_settings=AppSettings())
|
|
55
|
+
|
|
56
|
+
if __name__ == "__main__":
|
|
57
|
+
core_cli()
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Step 4 - Run the database migrations
|
|
61
|
+
|
|
62
|
+
Initialize the migration environment and database tables.
|
|
63
|
+
|
|
64
|
+
```shell
|
|
65
|
+
python main.py db init
|
|
66
|
+
python main.py db upgrade heads
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Step 5 - Run the app
|
|
70
|
+
|
|
71
|
+
```shell
|
|
72
|
+
export OAUTH2_ACTIVE=False
|
|
73
|
+
uvicorn --reload --host 127.0.0.1 --port 8080 main:app
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Visit the [ReDoc](http://127.0.0.1:8080/api/redoc) or [OpenAPI](http://127.0.0.1:8080/api/docs) page to view and interact with the API.
|
|
77
|
+
|
|
78
|
+
## Contributing
|
|
79
|
+
|
|
80
|
+
We use [uv](https://docs.astral.sh/uv/getting-started/installation/) to manage dependencies.
|
|
81
|
+
|
|
82
|
+
To get started, follow these steps:
|
|
83
|
+
|
|
84
|
+
```shell
|
|
85
|
+
# in your postgres database
|
|
86
|
+
createdb orchestrator-core-test -O nwa # set password to 'nwa'
|
|
87
|
+
|
|
88
|
+
# on your local machine
|
|
89
|
+
git clone https://github.com/workfloworchestrator/orchestrator-core
|
|
90
|
+
cd orchestrator-core
|
|
91
|
+
export DATABASE_URI=postgresql://nwa:nwa@localhost:5432/orchestrator-core-test
|
|
92
|
+
uv sync --all-extras --all-groups
|
|
93
|
+
uv run pytest
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
For more details please read the [development docs](https://workfloworchestrator.org/orchestrator-core/contributing/development/).
|
|
@@ -123,6 +123,7 @@ def get_auth_callbacks(steps: StepList, workflow: Workflow) -> tuple[Authorizer
|
|
|
123
123
|
def can_be_resumed(status: ProcessStatus) -> bool:
|
|
124
124
|
return status in (
|
|
125
125
|
ProcessStatus.SUSPENDED, # Can be resumed
|
|
126
|
+
ProcessStatus.WAITING, # Can be retried
|
|
126
127
|
ProcessStatus.FAILED, # Can be retried
|
|
127
128
|
ProcessStatus.API_UNAVAILABLE, # subtype of FAILED
|
|
128
129
|
ProcessStatus.INCONSISTENT_DATA, # subtype of FAILED
|
|
@@ -158,6 +159,9 @@ def delete(process_id: UUID) -> None:
|
|
|
158
159
|
if not process:
|
|
159
160
|
raise_status(HTTPStatus.NOT_FOUND)
|
|
160
161
|
|
|
162
|
+
if not process.is_task:
|
|
163
|
+
raise_status(HTTPStatus.BAD_REQUEST)
|
|
164
|
+
|
|
161
165
|
db.session.delete(db.session.get(ProcessTable, process_id))
|
|
162
166
|
db.session.commit()
|
|
163
167
|
|
|
@@ -209,7 +213,7 @@ def resume_process_endpoint(
|
|
|
209
213
|
if process.last_status == ProcessStatus.SUSPENDED:
|
|
210
214
|
if auth_resume is not None and not auth_resume(user_model):
|
|
211
215
|
raise_status(HTTPStatus.FORBIDDEN, "User is not authorized to resume step")
|
|
212
|
-
elif process.last_status
|
|
216
|
+
elif process.last_status in (ProcessStatus.FAILED, ProcessStatus.WAITING):
|
|
213
217
|
if auth_retry is not None and not auth_retry(user_model):
|
|
214
218
|
raise_status(HTTPStatus.FORBIDDEN, "User is not authorized to retry step")
|
|
215
219
|
|
|
@@ -270,7 +274,7 @@ def update_progress_on_awaiting_process_endpoint(
|
|
|
270
274
|
@router.put(
|
|
271
275
|
"/resume-all", response_model=ProcessResumeAllSchema, dependencies=[Depends(check_global_lock, use_cache=False)]
|
|
272
276
|
)
|
|
273
|
-
async def
|
|
277
|
+
async def resume_all_processes_endpoint(request: Request, user: str = Depends(user_name)) -> dict[str, int]:
|
|
274
278
|
"""Retry all task processes in status Failed, Waiting, API Unavailable or Inconsistent Data.
|
|
275
279
|
|
|
276
280
|
The retry is started in the background, returning status 200 and number of processes in message.
|
|
@@ -47,10 +47,12 @@ from orchestrator.services.subscriptions import (
|
|
|
47
47
|
subscription_workflows,
|
|
48
48
|
)
|
|
49
49
|
from orchestrator.settings import app_settings
|
|
50
|
+
from orchestrator.targets import Target
|
|
50
51
|
from orchestrator.types import SubscriptionLifecycle
|
|
51
52
|
from orchestrator.utils.deprecation_logger import deprecated_endpoint
|
|
52
53
|
from orchestrator.utils.get_subscription_dict import get_subscription_dict
|
|
53
54
|
from orchestrator.websocket import sync_invalidate_subscription_cache
|
|
55
|
+
from orchestrator.workflows import get_workflow
|
|
54
56
|
|
|
55
57
|
router = APIRouter()
|
|
56
58
|
|
|
@@ -100,6 +102,25 @@ def _filter_statuses(filter_statuses: str | None = None) -> list[str]:
|
|
|
100
102
|
return statuses
|
|
101
103
|
|
|
102
104
|
|
|
105
|
+
def _authorized_subscription_workflows(
|
|
106
|
+
subscription: SubscriptionTable, current_user: OIDCUserModel | None
|
|
107
|
+
) -> dict[str, list[dict[str, list[Any] | str]]]:
|
|
108
|
+
subscription_workflows_dict = subscription_workflows(subscription)
|
|
109
|
+
|
|
110
|
+
for workflow_target in Target.values():
|
|
111
|
+
for workflow_dict in subscription_workflows_dict[workflow_target.lower()]:
|
|
112
|
+
workflow = get_workflow(workflow_dict["name"])
|
|
113
|
+
if not workflow:
|
|
114
|
+
continue
|
|
115
|
+
if (
|
|
116
|
+
not workflow.authorize_callback(current_user) # The current user isn't allowed to run this workflow
|
|
117
|
+
and "reason" not in workflow_dict # and there isn't already a reason why this workflow cannot run
|
|
118
|
+
):
|
|
119
|
+
workflow_dict["reason"] = "subscription.insufficient_workflow_permissions"
|
|
120
|
+
|
|
121
|
+
return subscription_workflows_dict
|
|
122
|
+
|
|
123
|
+
|
|
103
124
|
@router.get(
|
|
104
125
|
"/domain-model/{subscription_id}",
|
|
105
126
|
response_model=SubscriptionDomainModelSchema | None,
|
|
@@ -169,7 +190,9 @@ def subscriptions_search(
|
|
|
169
190
|
description="This endpoint is deprecated and will be removed in a future release. Please use the GraphQL query",
|
|
170
191
|
dependencies=[Depends(deprecated_endpoint)],
|
|
171
192
|
)
|
|
172
|
-
def subscription_workflows_by_id(
|
|
193
|
+
def subscription_workflows_by_id(
|
|
194
|
+
subscription_id: UUID, current_user: OIDCUserModel | None = Depends(authenticate)
|
|
195
|
+
) -> dict[str, list[dict[str, list[Any] | str]]]:
|
|
173
196
|
subscription = db.session.get(
|
|
174
197
|
SubscriptionTable,
|
|
175
198
|
subscription_id,
|
|
@@ -181,7 +204,7 @@ def subscription_workflows_by_id(subscription_id: UUID) -> dict[str, list[dict[s
|
|
|
181
204
|
if not subscription:
|
|
182
205
|
raise_status(HTTPStatus.NOT_FOUND)
|
|
183
206
|
|
|
184
|
-
return
|
|
207
|
+
return _authorized_subscription_workflows(subscription, current_user)
|
|
185
208
|
|
|
186
209
|
|
|
187
210
|
@router.put("/{subscription_id}/set_in_sync", response_model=None, status_code=HTTPStatus.OK)
|
|
@@ -256,6 +256,9 @@ def migrate_domain_models(
|
|
|
256
256
|
test: bool = typer.Option(False, help="Optional boolean if you don't want to generate a migration file"),
|
|
257
257
|
inputs: str = typer.Option("{}", help="Stringified dict to prefill inputs"),
|
|
258
258
|
updates: str = typer.Option("{}", help="Stringified dict to map updates instead of using inputs"),
|
|
259
|
+
confirm_warnings: bool = typer.Option(
|
|
260
|
+
False, help="Optional boolean if you want to accept all warning inputs, fully knowing things can go wrong"
|
|
261
|
+
),
|
|
259
262
|
) -> tuple[list[str], list[str]] | None:
|
|
260
263
|
"""Create migration file based on SubscriptionModel.diff_product_in_database. BACKUP DATABASE BEFORE USING THE MIGRATION!.
|
|
261
264
|
|
|
@@ -282,6 +285,8 @@ def migrate_domain_models(
|
|
|
282
285
|
- `updates = { "resource_types": { "old_resource_type_name": "new_resource_type_name" } }`
|
|
283
286
|
- renaming a resource type to existing resource type: `updates = { "resource_types": { "old_resource_type_name": "new_resource_type_name" } }`
|
|
284
287
|
|
|
288
|
+
confirm_warnings: Optional boolean if you want to accept all warning inputs, fully knowing things can go wrong.
|
|
289
|
+
|
|
285
290
|
Returns None unless `--test` is used, in which case it returns:
|
|
286
291
|
- tuple:
|
|
287
292
|
- list of upgrade SQL statements in string format.
|
|
@@ -304,7 +309,9 @@ def migrate_domain_models(
|
|
|
304
309
|
resource_types=updates_dict.get("resource_types", {}),
|
|
305
310
|
block_resource_types=updates_dict.get("block_resource_types", {}),
|
|
306
311
|
)
|
|
307
|
-
sql_upgrade_stmts, sql_downgrade_stmts = create_domain_models_migration_sql(
|
|
312
|
+
sql_upgrade_stmts, sql_downgrade_stmts = create_domain_models_migration_sql(
|
|
313
|
+
inputs_dict, updates_class, test, confirm_warnings
|
|
314
|
+
)
|
|
308
315
|
|
|
309
316
|
if test:
|
|
310
317
|
return sql_upgrade_stmts, sql_downgrade_stmts
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
from collections.abc import Iterable
|
|
2
|
+
from itertools import groupby
|
|
3
|
+
|
|
4
|
+
import structlog
|
|
5
|
+
import typer
|
|
6
|
+
from more_itertools import first
|
|
7
|
+
from sqlalchemy.dialects import postgresql
|
|
8
|
+
from sqlalchemy.sql.dml import UpdateBase
|
|
9
|
+
|
|
10
|
+
from orchestrator.cli.domain_gen_helpers.types import BlockRelationDict
|
|
11
|
+
from orchestrator.cli.helpers.input_helpers import _prompt_user_menu
|
|
12
|
+
from orchestrator.cli.helpers.print_helpers import noqa_print
|
|
13
|
+
from orchestrator.domain.base import ProductBlockModel, SubscriptionModel
|
|
14
|
+
|
|
15
|
+
logger = structlog.get_logger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def sql_compile(sql: UpdateBase) -> str:
|
|
19
|
+
sql_string = str(sql.compile(dialect=postgresql.dialect(), compile_kwargs={"literal_binds": True})) # type: ignore[no-untyped-call]
|
|
20
|
+
sql_string = sql_string.replace("\n", "")
|
|
21
|
+
logger.debug("generated SQL", sql_string=sql_string)
|
|
22
|
+
return sql_string
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def generic_mapper(prop_name: str, model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
|
|
26
|
+
model_by_resource = [
|
|
27
|
+
(prop_name_value, model_name)
|
|
28
|
+
for model_name, diff in model_diffs.items()
|
|
29
|
+
for prop_name_value in diff.get(prop_name, [])
|
|
30
|
+
]
|
|
31
|
+
grouped = groupby(model_by_resource, lambda x: x[0])
|
|
32
|
+
return {k: {val[1] for val in v} for k, v in grouped}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def map_create_fixed_inputs(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
|
|
36
|
+
return generic_mapper("missing_fixed_inputs_in_db", model_diffs)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def map_delete_fixed_inputs(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
|
|
40
|
+
return generic_mapper("missing_fixed_inputs_in_model", model_diffs)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def map_create_resource_type_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
|
|
44
|
+
return generic_mapper("missing_resource_types_in_db", model_diffs)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def map_delete_resource_type_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
|
|
48
|
+
return generic_mapper("missing_resource_types_in_model", model_diffs)
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def map_create_product_to_product_block_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
|
|
52
|
+
return generic_mapper("missing_product_blocks_in_db", model_diffs)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def format_block_relation_to_dict(
|
|
56
|
+
model_name: str,
|
|
57
|
+
block_to_find_in_props: str,
|
|
58
|
+
models: dict[str, type[SubscriptionModel]] | dict[str, type[ProductBlockModel]],
|
|
59
|
+
confirm_warnings: bool,
|
|
60
|
+
) -> BlockRelationDict:
|
|
61
|
+
model = models[model_name]
|
|
62
|
+
block_props = model._get_depends_on_product_block_types()
|
|
63
|
+
props = {k for k, v in block_props.items() if v.name == block_to_find_in_props} # type: ignore
|
|
64
|
+
|
|
65
|
+
if len(props) > 1 and not confirm_warnings:
|
|
66
|
+
noqa_print("WARNING: Relating a Product Block multiple times is not supported by this migrator!")
|
|
67
|
+
noqa_print(
|
|
68
|
+
"You will need to create your own migration to create a Product Block Instance for each attribute that is related"
|
|
69
|
+
)
|
|
70
|
+
noqa_print(f"Product Block '{block_to_find_in_props}' has been related multiple times to '{model_name}'")
|
|
71
|
+
noqa_print(f"Attributes the block ('{block_to_find_in_props}') has been related with: {', '.join(props)}")
|
|
72
|
+
noqa_print(f"The relation will only be added to the first attribute ('{first(props)}') want to continue?")
|
|
73
|
+
|
|
74
|
+
if _prompt_user_menu([("yes", "yes"), ("no", "no")]) == "no":
|
|
75
|
+
typer.echo("Aborted.")
|
|
76
|
+
raise typer.Exit(code=1)
|
|
77
|
+
|
|
78
|
+
return BlockRelationDict(name=model_name, attribute_name=first(props))
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
def map_create_product_block_relations(
|
|
82
|
+
model_diffs: dict[str, dict[str, set[str]]],
|
|
83
|
+
models: dict[str, type[SubscriptionModel]] | dict[str, type[ProductBlockModel]],
|
|
84
|
+
confirm_warnings: bool,
|
|
85
|
+
) -> dict[str, list[BlockRelationDict]]:
|
|
86
|
+
data = generic_mapper("missing_product_blocks_in_db", model_diffs)
|
|
87
|
+
return {
|
|
88
|
+
k: [format_block_relation_to_dict(b, k, models, confirm_warnings) for b in blocks] for k, blocks in data.items()
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def map_delete_product_block_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
|
|
93
|
+
return generic_mapper("missing_product_blocks_in_model", model_diffs)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def get_product_block_names(pbs: list[type[ProductBlockModel]]) -> Iterable[str]:
|
|
97
|
+
return filter(None, (pb.name for pb in pbs))
|
|
@@ -7,8 +7,12 @@ from sqlalchemy import select
|
|
|
7
7
|
from sqlalchemy.sql.expression import Delete, Insert
|
|
8
8
|
from sqlalchemy.sql.selectable import ScalarSelect
|
|
9
9
|
|
|
10
|
-
from orchestrator.cli.domain_gen_helpers.helpers import
|
|
11
|
-
|
|
10
|
+
from orchestrator.cli.domain_gen_helpers.helpers import (
|
|
11
|
+
format_block_relation_to_dict,
|
|
12
|
+
get_product_block_names,
|
|
13
|
+
sql_compile,
|
|
14
|
+
)
|
|
15
|
+
from orchestrator.cli.domain_gen_helpers.types import BlockRelationDict, DomainModelChanges
|
|
12
16
|
from orchestrator.cli.helpers.input_helpers import get_user_input
|
|
13
17
|
from orchestrator.cli.helpers.print_helpers import COLOR, print_fmt, str_fmt
|
|
14
18
|
from orchestrator.db import db
|
|
@@ -68,13 +72,17 @@ def map_delete_product_blocks(product_blocks: dict[str, type[ProductBlockModel]]
|
|
|
68
72
|
return {name for name in existing_product_blocks if name not in product_blocks}
|
|
69
73
|
|
|
70
74
|
|
|
71
|
-
def map_product_block_additional_relations(
|
|
75
|
+
def map_product_block_additional_relations(
|
|
76
|
+
changes: DomainModelChanges, models: dict[str, type[ProductBlockModel]], confirm_warnings: bool
|
|
77
|
+
) -> DomainModelChanges:
|
|
72
78
|
"""Map additional relations for created product blocks.
|
|
73
79
|
|
|
74
80
|
Adds resource type and product block relations.
|
|
75
81
|
|
|
76
82
|
Args:
|
|
77
83
|
changes: DomainModelChanges class with all changes.
|
|
84
|
+
models: All product block models.
|
|
85
|
+
confirm_warnings: confirm warnings to continue, fully knowing that things can go wrong.
|
|
78
86
|
|
|
79
87
|
Returns: Updated DomainModelChanges.
|
|
80
88
|
"""
|
|
@@ -86,7 +94,12 @@ def map_product_block_additional_relations(changes: DomainModelChanges) -> Domai
|
|
|
86
94
|
product_blocks_in_model = block_class._get_depends_on_product_block_types()
|
|
87
95
|
product_blocks_types_in_model = get_depends_on_product_block_type_list(product_blocks_in_model)
|
|
88
96
|
for product_block_name in get_product_block_names(product_blocks_types_in_model):
|
|
89
|
-
changes.create_product_block_relations.
|
|
97
|
+
relation_list = changes.create_product_block_relations.get(product_block_name, [])
|
|
98
|
+
new_relation = format_block_relation_to_dict(block_name, product_block_name, models, confirm_warnings)
|
|
99
|
+
|
|
100
|
+
if new_relation not in relation_list:
|
|
101
|
+
changes.create_product_block_relations[product_block_name] = relation_list + [new_relation]
|
|
102
|
+
|
|
90
103
|
return changes
|
|
91
104
|
|
|
92
105
|
|
|
@@ -147,31 +160,35 @@ def generate_delete_product_blocks_sql(delete_product_blocks: set[str]) -> list[
|
|
|
147
160
|
]
|
|
148
161
|
|
|
149
162
|
|
|
150
|
-
def generate_create_product_block_relations_sql(
|
|
163
|
+
def generate_create_product_block_relations_sql(
|
|
164
|
+
create_block_relations: dict[str, list[BlockRelationDict]],
|
|
165
|
+
) -> list[str]:
|
|
151
166
|
"""Generate SQL to create product block to product block relations.
|
|
152
167
|
|
|
153
168
|
Args:
|
|
154
169
|
create_block_relations: Dict with product blocks by product block
|
|
155
170
|
- key: product block name.
|
|
156
|
-
-
|
|
171
|
+
- list: List of product blocks to relate with by prop names.
|
|
157
172
|
|
|
158
173
|
Returns: List of SQL to create relation between product blocks.
|
|
159
174
|
"""
|
|
160
175
|
|
|
161
|
-
def create_block_relation(depends_block_name: str,
|
|
176
|
+
def create_block_relation(depends_block_name: str, block_relations: list[BlockRelationDict]) -> str:
|
|
162
177
|
depends_block_id_sql = get_product_block_id(depends_block_name)
|
|
163
178
|
|
|
164
|
-
def create_block_relation_dict(
|
|
165
|
-
block_id_sql = get_product_block_id(
|
|
179
|
+
def create_block_relation_dict(block_relation: BlockRelationDict) -> dict[str, ScalarSelect]:
|
|
180
|
+
block_id_sql = get_product_block_id(block_relation["name"])
|
|
166
181
|
return {"in_use_by_id": block_id_sql, "depends_on_id": depends_block_id_sql}
|
|
167
182
|
|
|
168
|
-
product_product_block_relation_dicts = [create_block_relation_dict(
|
|
183
|
+
product_product_block_relation_dicts = [create_block_relation_dict(block) for block in block_relations]
|
|
169
184
|
return sql_compile(Insert(ProductBlockRelationTable).values(product_product_block_relation_dicts))
|
|
170
185
|
|
|
171
186
|
return [create_block_relation(*item) for item in create_block_relations.items()]
|
|
172
187
|
|
|
173
188
|
|
|
174
|
-
def generate_create_product_block_instance_relations_sql(
|
|
189
|
+
def generate_create_product_block_instance_relations_sql(
|
|
190
|
+
product_block_relations: dict[str, list[BlockRelationDict]],
|
|
191
|
+
) -> list[str]:
|
|
175
192
|
"""Generate SQL to create resource type instance values for existing instances.
|
|
176
193
|
|
|
177
194
|
Args:
|
|
@@ -183,12 +200,14 @@ def generate_create_product_block_instance_relations_sql(product_block_relations
|
|
|
183
200
|
"""
|
|
184
201
|
|
|
185
202
|
def create_subscription_instance_relations(
|
|
186
|
-
depends_block_name: str,
|
|
203
|
+
depends_block_name: str, block_relations: list[BlockRelationDict]
|
|
187
204
|
) -> Generator[str, None, None]:
|
|
188
205
|
depends_block_id_sql = get_product_block_id(depends_block_name)
|
|
189
206
|
|
|
190
|
-
def map_subscription_instances(
|
|
191
|
-
|
|
207
|
+
def map_subscription_instances(
|
|
208
|
+
block_relation: BlockRelationDict,
|
|
209
|
+
) -> dict[str, list[dict[str, str | ScalarSelect]]]:
|
|
210
|
+
in_use_by_id_sql = get_product_block_id(block_relation["name"])
|
|
192
211
|
stmt = select(
|
|
193
212
|
SubscriptionInstanceTable.subscription_instance_id, SubscriptionInstanceTable.subscription_id
|
|
194
213
|
).where(SubscriptionInstanceTable.product_block_id.in_(in_use_by_id_sql))
|
|
@@ -206,13 +225,14 @@ def generate_create_product_block_instance_relations_sql(product_block_relations
|
|
|
206
225
|
"in_use_by_id": instance.subscription_instance_id,
|
|
207
226
|
"depends_on_id": get_subscription_instance(instance.subscription_id, depends_block_id_sql),
|
|
208
227
|
"order_id": 0,
|
|
228
|
+
"domain_model_attr": block_relation["attribute_name"],
|
|
209
229
|
}
|
|
210
230
|
for instance in subscription_instances
|
|
211
231
|
]
|
|
212
232
|
|
|
213
233
|
return {"instance_list": instance_list, "instance_relation_list": instance_relation_list}
|
|
214
234
|
|
|
215
|
-
create_instance_list = [map_subscription_instances(
|
|
235
|
+
create_instance_list = [map_subscription_instances(block_relation) for block_relation in block_relations]
|
|
216
236
|
|
|
217
237
|
subscription_instance_dicts = list(flatten(item["instance_list"] for item in create_instance_list))
|
|
218
238
|
subscription_relation_dicts = list(flatten(item["instance_relation_list"] for item in create_instance_list))
|
|
@@ -9,7 +9,7 @@ from sqlalchemy.sql.selectable import ScalarSelect
|
|
|
9
9
|
|
|
10
10
|
from orchestrator.cli.domain_gen_helpers.helpers import sql_compile
|
|
11
11
|
from orchestrator.cli.domain_gen_helpers.product_block_helpers import get_product_block_id, get_product_block_ids
|
|
12
|
-
from orchestrator.cli.domain_gen_helpers.types import DomainModelChanges
|
|
12
|
+
from orchestrator.cli.domain_gen_helpers.types import BlockRelationDict, DomainModelChanges
|
|
13
13
|
from orchestrator.cli.helpers.input_helpers import _enumerate_menu_keys, _prompt_user_menu, get_user_input
|
|
14
14
|
from orchestrator.cli.helpers.print_helpers import COLOR, noqa_print, print_fmt, str_fmt
|
|
15
15
|
from orchestrator.db import db
|
|
@@ -262,8 +262,8 @@ def _has_product_existing_instances(product_name: str) -> bool:
|
|
|
262
262
|
return bool(product and get_product_instance_count(product.product_id))
|
|
263
263
|
|
|
264
264
|
|
|
265
|
-
def
|
|
266
|
-
return
|
|
265
|
+
def _find_new_block_relations(block_name: str, relations: dict[str, list[BlockRelationDict]]) -> set[str]:
|
|
266
|
+
return {r["name"] for r in relations.get(block_name, [])}
|
|
267
267
|
|
|
268
268
|
|
|
269
269
|
def map_create_resource_type_instances(changes: DomainModelChanges) -> dict[str, set[str]]:
|
|
@@ -285,11 +285,11 @@ def map_create_resource_type_instances(changes: DomainModelChanges) -> dict[str,
|
|
|
285
285
|
if block and get_block_instance_count(block.product_block_id):
|
|
286
286
|
return True
|
|
287
287
|
|
|
288
|
-
related_block_names =
|
|
288
|
+
related_block_names = _find_new_block_relations(block_name, changes.create_product_block_relations)
|
|
289
289
|
if related_block_names:
|
|
290
290
|
return any(_has_existing_instances(name) for name in related_block_names)
|
|
291
291
|
|
|
292
|
-
related_product_names =
|
|
292
|
+
related_product_names = changes.create_product_to_block_relations.get(block_name, set())
|
|
293
293
|
return any(_has_product_existing_instances(name) for name in related_product_names)
|
|
294
294
|
|
|
295
295
|
return {
|