orchestrator-core 4.1.0rc1__tar.gz → 4.2.0rc1__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.0rc1/PKG-INFO +167 -0
- orchestrator_core-4.2.0rc1/README.md +96 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/__init__.py +1 -1
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/processes.py +64 -11
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/subscriptions.py +25 -2
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/create_product.j2 +1 -2
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/models.py +6 -3
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/process.py +21 -2
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/product.py +8 -9
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/workflow.py +9 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/types.py +7 -1
- orchestrator_core-4.2.0rc1/orchestrator/migrations/versions/schema/2025-07-01_93fc5834c7e5_changed_timestamping_fields_in_process_steps.py +65 -0
- orchestrator_core-4.2.0rc1/orchestrator/migrations/versions/schema/2025-07-04_4b58e336d1bf_deprecating_workflow_target_in_.py +30 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/process.py +5 -1
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/celery.py +7 -2
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/processes.py +12 -12
- orchestrator_core-4.2.0rc1/orchestrator/utils/auth.py +9 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/enrich_process.py +4 -2
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflow.py +52 -9
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflows/modify_note.py +1 -1
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflows/steps.py +14 -8
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflows/utils.py +13 -7
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/pyproject.toml +91 -92
- orchestrator_core-4.1.0rc1/.bumpversion.cfg +0 -12
- orchestrator_core-4.1.0rc1/.coveragerc +0 -2
- orchestrator_core-4.1.0rc1/.github/ISSUE_TEMPLATE/bug-report.yml +0 -52
- orchestrator_core-4.1.0rc1/.github/ISSUE_TEMPLATE/feature-request.yml +0 -32
- orchestrator_core-4.1.0rc1/.github/dependabot.yml +0 -11
- orchestrator_core-4.1.0rc1/.github/workflows/README.md +0 -65
- orchestrator_core-4.1.0rc1/.github/workflows/build-push-container.yml +0 -58
- orchestrator_core-4.1.0rc1/.github/workflows/changelog.yml +0 -13
- orchestrator_core-4.1.0rc1/.github/workflows/codeql-analysis.yml +0 -68
- orchestrator_core-4.1.0rc1/.github/workflows/gh-pages.yml +0 -17
- orchestrator_core-4.1.0rc1/.github/workflows/issues.yml +0 -13
- orchestrator_core-4.1.0rc1/.github/workflows/publish-package.yml +0 -25
- orchestrator_core-4.1.0rc1/.github/workflows/run-codspeed-tests.yml +0 -71
- orchestrator_core-4.1.0rc1/.github/workflows/run-linting-tests.yml +0 -36
- orchestrator_core-4.1.0rc1/.github/workflows/run-unit-tests.yml +0 -68
- orchestrator_core-4.1.0rc1/.github/workflows/scheduled-build.yml +0 -42
- orchestrator_core-4.1.0rc1/.gitignore +0 -135
- orchestrator_core-4.1.0rc1/.pre-commit-config.yaml +0 -86
- orchestrator_core-4.1.0rc1/.stignore +0 -101
- orchestrator_core-4.1.0rc1/CHANGELOG.md +0 -481
- orchestrator_core-4.1.0rc1/Dockerfile +0 -24
- orchestrator_core-4.1.0rc1/NOTICE +0 -7
- orchestrator_core-4.1.0rc1/PKG-INFO +0 -118
- orchestrator_core-4.1.0rc1/README.md +0 -200
- orchestrator_core-4.1.0rc1/codecov.yml +0 -8
- orchestrator_core-4.1.0rc1/docs/architecture/application/domainmodels.md +0 -236
- orchestrator_core-4.1.0rc1/docs/architecture/application/forms-frontend.md +0 -231
- orchestrator_core-4.1.0rc1/docs/architecture/application/tasks.md +0 -169
- orchestrator_core-4.1.0rc1/docs/architecture/application/workflow.md +0 -295
- orchestrator_core-4.1.0rc1/docs/architecture/framework.md +0 -28
- orchestrator_core-4.1.0rc1/docs/architecture/img/base-orchestrator-setup.png +0 -0
- orchestrator_core-4.1.0rc1/docs/architecture/img/custom-orchestrator-setup.png +0 -0
- orchestrator_core-4.1.0rc1/docs/architecture/orchestration/img/Custom-orchestrator-ui-using-override.png +0 -0
- orchestrator_core-4.1.0rc1/docs/architecture/orchestration/img/Standard-orchestrator-ui.png +0 -0
- orchestrator_core-4.1.0rc1/docs/architecture/orchestration/orchestrator-ui.md +0 -265
- orchestrator_core-4.1.0rc1/docs/architecture/orchestration/philosophy.md +0 -16
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/backfilling.md +0 -77
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/context.md +0 -11
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/imports.md +0 -90
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/introduction.md +0 -13
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/ip_static.md +0 -27
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/ip_static.png +0 -0
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/l2_point_to_point.md +0 -21
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/l2_point_to_point.png +0 -0
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/l2_vpn.md +0 -15
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/l2_vpn.png +0 -0
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/modelling.md +0 -22
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/node.md +0 -20
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/node.png +0 -0
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/port.md +0 -20
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/port.png +0 -0
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/product_block_graph.md +0 -26
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/product_block_graph.png +0 -0
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/standards.md +0 -16
- orchestrator_core-4.1.0rc1/docs/architecture/product_modelling/terminology.md +0 -17
- orchestrator_core-4.1.0rc1/docs/architecture/tldr.md +0 -40
- orchestrator_core-4.1.0rc1/docs/contributing/development.md +0 -109
- orchestrator_core-4.1.0rc1/docs/contributing/guidelines.md +0 -41
- orchestrator_core-4.1.0rc1/docs/contributing/testing.md +0 -278
- orchestrator_core-4.1.0rc1/docs/css/custom.css +0 -24
- orchestrator_core-4.1.0rc1/docs/css/style.css +0 -27
- orchestrator_core-4.1.0rc1/docs/css/termynal.css +0 -108
- orchestrator_core-4.1.0rc1/docs/getting-started/base.md +0 -99
- orchestrator_core-4.1.0rc1/docs/getting-started/docker.md +0 -23
- orchestrator_core-4.1.0rc1/docs/getting-started/orchestration-ui.md +0 -59
- orchestrator_core-4.1.0rc1/docs/getting-started/prepare-source-folder.md +0 -110
- orchestrator_core-4.1.0rc1/docs/getting-started/versions.md +0 -12
- orchestrator_core-4.1.0rc1/docs/img/WFO-Emblem-White.png +0 -0
- orchestrator_core-4.1.0rc1/docs/img/favicon.ico +0 -0
- orchestrator_core-4.1.0rc1/docs/index.md +0 -82
- orchestrator_core-4.1.0rc1/docs/js/custom.js +0 -105
- orchestrator_core-4.1.0rc1/docs/js/termynal.js +0 -264
- orchestrator_core-4.1.0rc1/docs/migration-guide/2.0.md +0 -331
- orchestrator_core-4.1.0rc1/docs/migration-guide/3.0.md +0 -14
- orchestrator_core-4.1.0rc1/docs/migration-guide/4.0.md +0 -73
- orchestrator_core-4.1.0rc1/docs/reference-docs/api.md +0 -6
- orchestrator_core-4.1.0rc1/docs/reference-docs/app/app.md +0 -26
- orchestrator_core-4.1.0rc1/docs/reference-docs/app/scaling.md +0 -250
- orchestrator_core-4.1.0rc1/docs/reference-docs/app/settings_overview.md +0 -89
- orchestrator_core-4.1.0rc1/docs/reference-docs/auth-backend-and-frontend.md +0 -278
- orchestrator_core-4.1.0rc1/docs/reference-docs/cli.md +0 -761
- orchestrator_core-4.1.0rc1/docs/reference-docs/database.md +0 -36
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/generator.md +0 -3
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/instantiating.md +0 -0
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/model_attributes.md +0 -57
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/overview.md +0 -4
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/product_blocks.md +0 -44
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/product_types.md +0 -56
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/properties.md +0 -0
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/pydantic_hooks.md +0 -0
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/type_casting.md +0 -0
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/union_types.md +0 -0
- orchestrator_core-4.1.0rc1/docs/reference-docs/domain_models/validation.md +0 -0
- orchestrator_core-4.1.0rc1/docs/reference-docs/forms.md +0 -438
- orchestrator_core-4.1.0rc1/docs/reference-docs/graphql.md +0 -686
- orchestrator_core-4.1.0rc1/docs/reference-docs/metrics.md +0 -45
- orchestrator_core-4.1.0rc1/docs/reference-docs/python.md +0 -27
- orchestrator_core-4.1.0rc1/docs/reference-docs/search.md +0 -264
- orchestrator_core-4.1.0rc1/docs/reference-docs/search_overview.png +0 -0
- orchestrator_core-4.1.0rc1/docs/reference-docs/serialization.md +0 -0
- orchestrator_core-4.1.0rc1/docs/reference-docs/tasks.md +0 -0
- orchestrator_core-4.1.0rc1/docs/reference-docs/tests.md +0 -0
- orchestrator_core-4.1.0rc1/docs/reference-docs/tldr.md +0 -3
- orchestrator_core-4.1.0rc1/docs/reference-docs/websockets.md +0 -107
- orchestrator_core-4.1.0rc1/docs/reference-docs/workflows/callbacks.md +0 -178
- orchestrator_core-4.1.0rc1/docs/reference-docs/workflows/workflow-lifecycles.md +0 -9
- orchestrator_core-4.1.0rc1/docs/reference-docs/workflows/workflow-steps.md +0 -28
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/bootstrap.md +0 -168
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/create-your-own.md +0 -9
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/docker-installation.md +0 -89
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/domain-models.md +0 -10
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/execute-workflows.md +0 -46
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/generator.md +0 -169
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/l2_point_to_point.png +0 -0
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/node-create.md +0 -2
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/node-modify.md +0 -2
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/node-terminate.md +0 -2
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/node-validate.md +0 -2
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/overview.md +0 -86
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/scenario.md +0 -19
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/workflow-basics.md +0 -3
- orchestrator_core-4.1.0rc1/docs/workshops/advanced/workflow-introduction.md +0 -36
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/create-user-group.md +0 -132
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/create-user.md +0 -137
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/database-migration.md +0 -192
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/debian.md +0 -145
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/docker.md +0 -78
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/domain-models.md +0 -187
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/explore.md +0 -73
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/input-forms.md +0 -111
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/macos.md +0 -146
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/modify-user-group.md +0 -79
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/modify-user.md +0 -61
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/register-workflows.md +0 -113
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/start-applications.md +0 -40
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/terminate-user-group.md +0 -79
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/terminate-user.md +0 -44
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/workflow-introduction.md +0 -78
- orchestrator_core-4.1.0rc1/docs/workshops/beginner/workshop-overview.md +0 -92
- orchestrator_core-4.1.0rc1/docs/workshops/images/Software-topology.drawio.png +0 -0
- orchestrator_core-4.1.0rc1/docs/workshops/images/clab_topology.png +0 -0
- orchestrator_core-4.1.0rc1/docs/workshops/images/metadata_products.png +0 -0
- orchestrator_core-4.1.0rc1/docs/workshops/images/netbox_devices_active.png +0 -0
- orchestrator_core-4.1.0rc1/docs/workshops/images/subscriptions.png +0 -0
- orchestrator_core-4.1.0rc1/docs/workshops/images/topology.drawio.png +0 -0
- orchestrator_core-4.1.0rc1/includes/abbreviations.md +0 -6
- orchestrator_core-4.1.0rc1/mkdocs.yml +0 -248
- orchestrator_core-4.1.0rc1/nitpick-style.toml +0 -2
- orchestrator_core-4.1.0rc1/setup.cfg +0 -69
- orchestrator_core-4.1.0rc1/setup.py +0 -20
- orchestrator_core-4.1.0rc1/test/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/acceptance_tests/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/acceptance_tests/conftest.py +0 -110
- orchestrator_core-4.1.0rc1/test/acceptance_tests/fixtures/test_orchestrator/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/test_product_populator.py +0 -61
- orchestrator_core-4.1.0rc1/test/acceptance_tests/fixtures/test_orchestrator/main.py +0 -40
- orchestrator_core-4.1.0rc1/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/test_product_blocks.py +0 -46
- orchestrator_core-4.1.0rc1/test/acceptance_tests/fixtures/test_orchestrator/products/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/acceptance_tests/fixtures/test_orchestrator/products/test_product.py +0 -33
- orchestrator_core-4.1.0rc1/test/acceptance_tests/fixtures/test_orchestrator/workflows/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/acceptance_tests/fixtures/test_orchestrator/workflows/create_test_product.py +0 -84
- orchestrator_core-4.1.0rc1/test/acceptance_tests/test_test_product.py +0 -23
- orchestrator_core-4.1.0rc1/test/unit_tests/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/api/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_health.py +0 -30
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_helpers.py +0 -85
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_models.py +0 -45
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_processes.py +0 -595
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_processes_ws.py +0 -334
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_product_blocks.py +0 -58
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_products.py +0 -202
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_resource_types.py +0 -56
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_settings.py +0 -98
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_subscription_customer_descriptions.py +0 -145
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_subscriptions.py +0 -846
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_workflows.py +0 -57
- orchestrator_core-4.1.0rc1/test/unit_tests/api/test_ws.py +0 -103
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/conftest.py +0 -33
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/alembic.ini +0 -45
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/main.py +0 -7
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/migrations/env.py +0 -89
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/migrations/helpers.py +0 -3
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/migrations/script.py.mako +0 -23
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_59e1199aff7f_create_data_head.py +0 -21
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_85be1c80731c_add_example2.py +0 -93
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_ea9e6c9de75c_add_example1.py +0 -135
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-06-07_380a5b0c928c_add_example4.py +0 -105
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/products/__init__.py +0 -26
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/products/product_blocks/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/products/product_blocks/example1.py +0 -61
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/products/product_blocks/example2.py +0 -30
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/products/product_blocks/example4.py +0 -26
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/products/product_blocks/example4sub.py +0 -21
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/products/product_types/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/products/product_types/example1.py +0 -28
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/products/product_types/example2.py +0 -16
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/products/product_types/example4.py +0 -16
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example1.py +0 -53
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example2.py +0 -53
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example4.py +0 -53
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_create_example1.py +0 -83
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_modify_example1.py +0 -70
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_terminate_example1.py +0 -43
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_validate_example1.py +0 -35
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_create_example2.py +0 -32
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_modify_example2.py +0 -33
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_terminate_example2.py +0 -26
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_validate_example2.py +0 -16
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_create_example4.py +0 -32
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_modify_example4.py +0 -33
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_terminate_example4.py +0 -26
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_validate_example4.py +0 -16
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/translations/en-GB.json +0 -16
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/__init__.py +0 -14
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example1/create_example1.py +0 -110
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example1/modify_example1.py +0 -98
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example1/shared/forms.py +0 -15
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example1/terminate_example1.py +0 -46
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example1/validate_example1.py +0 -29
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example2/create_example2.py +0 -79
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example2/modify_example2.py +0 -73
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example2/shared/forms.py +0 -1
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example2/terminate_example2.py +0 -39
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example4/create_example4.py +0 -78
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example4/modify_example4.py +0 -71
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example4/shared/forms.py +0 -1
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/example4/terminate_example4.py +0 -39
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate/workflows/shared.py +0 -36
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/generate.sh +0 -25
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/invalid_product_config1.yaml +0 -20
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/invalid_product_config2.yaml +0 -24
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/product_config1.yaml +0 -87
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/product_config2.yaml +0 -29
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/product_config3.yaml +0 -26
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/data/product_config4.yaml +0 -32
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/generator/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/generator/test_enums.py +0 -27
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/helpers.py +0 -19
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/test_cli_generate.py +0 -68
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/test_config_validation.py +0 -20
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/test_generate_code.py +0 -152
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/test_migrate_domain_models_with_instances.py +0 -764
- orchestrator_core-4.1.0rc1/test/unit_tests/cli/test_migrate_domain_models_without_instances.py +0 -728
- orchestrator_core-4.1.0rc1/test/unit_tests/config.py +0 -12
- orchestrator_core-4.1.0rc1/test/unit_tests/conftest.py +0 -805
- orchestrator_core-4.1.0rc1/test/unit_tests/db/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/db/test_listeners.py +0 -23
- orchestrator_core-4.1.0rc1/test/unit_tests/db/test_migration_does_column_exist.py +0 -10
- orchestrator_core-4.1.0rc1/test/unit_tests/domain/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/domain/test_base.py +0 -1301
- orchestrator_core-4.1.0rc1/test/unit_tests/domain/test_base_multiple.py +0 -226
- orchestrator_core-4.1.0rc1/test/unit_tests/domain/test_base_performance.py +0 -160
- orchestrator_core-4.1.0rc1/test/unit_tests/domain/test_base_serializable_property.py +0 -170
- orchestrator_core-4.1.0rc1/test/unit_tests/domain/test_base_with_list_union.py +0 -189
- orchestrator_core-4.1.0rc1/test/unit_tests/domain/test_base_with_union.py +0 -108
- orchestrator_core-4.1.0rc1/test/unit_tests/domain/test_lifecycle.py +0 -49
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/__init__.py +0 -88
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/processes.py +0 -180
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_blocks/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_blocks/product_block_list_nested.py +0 -67
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_blocks/product_block_one.py +0 -84
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_blocks/product_block_one_nested.py +0 -55
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_blocks/product_block_with_list_union.py +0 -64
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_blocks/product_block_with_union.py +0 -59
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_blocks/product_sub_block_one.py +0 -35
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_blocks/product_sub_block_two.py +0 -32
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/product_type_list_nested.py +0 -64
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/product_type_list_union.py +0 -52
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/product_type_list_union_overlap.py +0 -101
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/product_type_one.py +0 -95
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/product_type_one_nested.py +0 -65
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/product_type_sub_list_union.py +0 -82
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/product_type_sub_one.py +0 -57
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/product_type_sub_two.py +0 -57
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/product_type_sub_union.py +0 -45
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/product_type_union.py +0 -41
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/product_types/subscription_relations.py +0 -300
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/products/resource_types.py +0 -28
- orchestrator_core-4.1.0rc1/test/unit_tests/fixtures/workflows.py +0 -22
- orchestrator_core-4.1.0rc1/test/unit_tests/forms/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/forms/test_customer_contact_list.py +0 -140
- orchestrator_core-4.1.0rc1/test/unit_tests/forms/test_customer_id.py +0 -17
- orchestrator_core-4.1.0rc1/test/unit_tests/forms/test_display_subscription.py +0 -77
- orchestrator_core-4.1.0rc1/test/unit_tests/forms/test_generic_validators.py +0 -121
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/conftest.py +0 -55
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/extensions/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/extensions/test_stats.py +0 -30
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/mutations/helpers.py +0 -17
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/mutations/test_customer_description.py +0 -296
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/mutations/test_start_process.py +0 -86
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_customer.py +0 -69
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_process.py +0 -42
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_processes.py +0 -679
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_product.py +0 -350
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_product_blocks.py +0 -317
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_resource_types.py +0 -174
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_settings.py +0 -166
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_sort_and_filter_fields.py +0 -74
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_subscription.py +0 -105
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_subscription_relations.py +0 -617
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_subscriptions.py +0 -1581
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_version.py +0 -21
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/test_workflows.py +0 -234
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/utils/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/utils/fixtures.py +0 -157
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/utils/test_autoregistration.py +0 -12
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/utils/test_get_query_loaders.py +0 -55
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/utils/test_get_selected_paths.py +0 -49
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/utils/test_is_query_detailed.py +0 -207
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/utils/test_is_querying_page_data.py +0 -95
- orchestrator_core-4.1.0rc1/test/unit_tests/graphql/utils/test_override_class.py +0 -290
- orchestrator_core-4.1.0rc1/test/unit_tests/helpers.py +0 -32
- orchestrator_core-4.1.0rc1/test/unit_tests/metrics/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/metrics/conftest.py +0 -27
- orchestrator_core-4.1.0rc1/test/unit_tests/metrics/test_engine_metrics.py +0 -18
- orchestrator_core-4.1.0rc1/test/unit_tests/metrics/test_process_metrics.py +0 -27
- orchestrator_core-4.1.0rc1/test/unit_tests/metrics/test_subscription_metrics.py +0 -60
- orchestrator_core-4.1.0rc1/test/unit_tests/migrations/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/migrations/test_cascade_constraint.py +0 -55
- orchestrator_core-4.1.0rc1/test/unit_tests/schedules/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/schedules/test_scheduling.py +0 -26
- orchestrator_core-4.1.0rc1/test/unit_tests/services/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/services/test_expose_settings.py +0 -35
- orchestrator_core-4.1.0rc1/test/unit_tests/services/test_input_state.py +0 -62
- orchestrator_core-4.1.0rc1/test/unit_tests/services/test_processes.py +0 -927
- orchestrator_core-4.1.0rc1/test/unit_tests/services/test_products.py +0 -39
- orchestrator_core-4.1.0rc1/test/unit_tests/services/test_subscription_relations.py +0 -190
- orchestrator_core-4.1.0rc1/test/unit_tests/services/test_subscriptions.py +0 -160
- orchestrator_core-4.1.0rc1/test/unit_tests/services/test_translations.py +0 -61
- orchestrator_core-4.1.0rc1/test/unit_tests/test_db.py +0 -183
- orchestrator_core-4.1.0rc1/test/unit_tests/test_types.py +0 -12
- orchestrator_core-4.1.0rc1/test/unit_tests/test_workflow.py +0 -630
- orchestrator_core-4.1.0rc1/test/unit_tests/utils/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/utils/get_subscription_dict.py +0 -11
- orchestrator_core-4.1.0rc1/test/unit_tests/utils/test_datetime.py +0 -6
- orchestrator_core-4.1.0rc1/test/unit_tests/utils/test_errors.py +0 -54
- orchestrator_core-4.1.0rc1/test/unit_tests/utils/test_functional.py +0 -127
- orchestrator_core-4.1.0rc1/test/unit_tests/utils/test_get_updated_properties.py +0 -127
- orchestrator_core-4.1.0rc1/test/unit_tests/utils/test_json.py +0 -119
- orchestrator_core-4.1.0rc1/test/unit_tests/utils/test_search_query.py +0 -170
- orchestrator_core-4.1.0rc1/test/unit_tests/utils/test_state.py +0 -490
- orchestrator_core-4.1.0rc1/test/unit_tests/utils/test_strings.py +0 -6
- orchestrator_core-4.1.0rc1/test/unit_tests/websocket/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/websocket/test_broadcast.py +0 -93
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/__init__.py +0 -384
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/conftest.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/shared/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/shared/test_validate_subscriptions.py +0 -58
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/tasks/__init__.py +0 -0
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/tasks/test_clean_up_task_log.py +0 -75
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/tasks/test_resume_workflows.py +0 -79
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/tasks/test_validate_product_type.py +0 -39
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/tasks/test_validate_products.py +0 -9
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/test_async_workflow.py +0 -331
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/test_config_db_code.py +0 -77
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/test_generic_workflow_steps.py +0 -103
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/test_lifecycle_status_manager.py +0 -64
- orchestrator_core-4.1.0rc1/test/unit_tests/workflows/test_modify_note.py +0 -26
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/LICENSE +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/api.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/health.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/products.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/user.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/error_handling.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/api/models.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/app.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/database.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generate.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/custom_templates/README +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/enums.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/migration.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/product.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/product_block.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/settings.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/translations.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/unittest.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/validations.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/generator/workflow.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/enums.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/macros.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/product.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/helpers/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/helpers/input_helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/helpers/print_helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/main.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/migrate_domain_models.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/migrate_tasks.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/migrate_workflows.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/migration_helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/cli/scheduler.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/config/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/config/assignee.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/database.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/filters/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/filters/filters.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/filters/process.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/filters/product.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/filters/product_block.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/filters/resource_type.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/filters/search_filters/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/filters/subscription.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/filters/workflow.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/listeners.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/loaders.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/queries/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/queries/subscription.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/queries/subscription_instance.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/range/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/range/range.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/sorting/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/sorting/process.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/sorting/product.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/sorting/product_block.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/sorting/resource_type.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/sorting/sorting.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/sorting/subscription.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/db/sorting/workflow.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/devtools/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/devtools/populator.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/devtools/scripts/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/devtools/scripts/migrate_20.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/devtools/scripts/migrate_30.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/devtools/scripts/shared.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/distlock/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/distlock/distlock_manager.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/distlock/managers/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/domain/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/domain/base.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/domain/context_cache.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/domain/customer_description.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/domain/helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/domain/lifecycle.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/domain/subscription_instance_transform.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/exception_handlers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/forms/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/forms/validators/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/forms/validators/customer_contact_list.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/forms/validators/customer_id.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/forms/validators/display_subscription.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/forms/validators/network_type_validators.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/forms/validators/product_id.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/autoregistration.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/extensions/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/extensions/model_cache.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/extensions/stats.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/loaders/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/loaders/subscriptions.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/mutations/customer_description.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/mutations/start_process.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/pagination.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/customer.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/process.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/product.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/product_block.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/resource_type.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/settings.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/subscription.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/version.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/resolvers/workflow.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schema.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/customer.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/customer_description.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/errors.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/fixed_input.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/product_block.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/resource_type.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/settings.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/subscription.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/version.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/utils/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/utils/override_class.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/log_config.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/metrics/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/metrics/engine.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/metrics/init.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/metrics/processes.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/metrics/subscriptions.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/README +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/alembic.ini +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/env.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/script.py.mako +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/templates/env.py.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/py.typed +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schedules/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schedules/resume_workflows.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schedules/scheduling.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schedules/task_vacuum.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schedules/validate_products.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schedules/validate_subscriptions.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/base.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/engine_settings.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/fixed_input.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/problem_detail.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/product.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/product_block.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/resource_type.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/subscription.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/subscription_descriptions.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/schemas/workflow.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/security.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/fixed_inputs.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/input_state.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/process_broadcast_thread.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/products.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/resource_types.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/settings.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/settings_env_variables.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/subscription_relations.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/subscriptions.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/tasks.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/translations.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/services/workflows.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/settings.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/targets.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/types.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/crypt.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/datetime.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/deprecation_logger.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/docs.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/errors.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/expose_settings.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/fixed_inputs.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/functional.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/get_subscription_dict.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/get_updated_properties.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/helpers.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/json.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/redis.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/redis_client.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/search_query.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/state.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/strings.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/utils/validate_data_version.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/version.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/websocket/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/websocket/websocket_manager.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflows/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflows/removed_workflow.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflows/tasks/__init__.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflows/tasks/validate_product_type.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/workflows/tasks/validate_products.py +0 -0
- {orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/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.0rc1
|
|
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/).
|
|
@@ -25,7 +25,7 @@ from fastapi.param_functions import Body, Depends, Header
|
|
|
25
25
|
from fastapi.routing import APIRouter
|
|
26
26
|
from fastapi.websockets import WebSocket
|
|
27
27
|
from fastapi_etag.dependency import CacheHit
|
|
28
|
-
from more_itertools import chunked
|
|
28
|
+
from more_itertools import chunked, last
|
|
29
29
|
from sentry_sdk.tracing import trace
|
|
30
30
|
from sqlalchemy import CompoundSelect, Select, select
|
|
31
31
|
from sqlalchemy.orm import defer, joinedload
|
|
@@ -56,6 +56,7 @@ from orchestrator.services.processes import (
|
|
|
56
56
|
)
|
|
57
57
|
from orchestrator.services.settings import get_engine_settings
|
|
58
58
|
from orchestrator.settings import app_settings
|
|
59
|
+
from orchestrator.utils.auth import Authorizer
|
|
59
60
|
from orchestrator.utils.enrich_process import enrich_process
|
|
60
61
|
from orchestrator.websocket import (
|
|
61
62
|
WS_CHANNELS,
|
|
@@ -63,7 +64,7 @@ from orchestrator.websocket import (
|
|
|
63
64
|
broadcast_process_update_to_websocket,
|
|
64
65
|
websocket_manager,
|
|
65
66
|
)
|
|
66
|
-
from orchestrator.workflow import ProcessStatus
|
|
67
|
+
from orchestrator.workflow import ProcessStat, ProcessStatus, StepList, Workflow
|
|
67
68
|
from pydantic_forms.types import JSON, State
|
|
68
69
|
|
|
69
70
|
router = APIRouter()
|
|
@@ -86,6 +87,48 @@ def check_global_lock() -> None:
|
|
|
86
87
|
)
|
|
87
88
|
|
|
88
89
|
|
|
90
|
+
def get_current_steps(pstat: ProcessStat) -> StepList:
|
|
91
|
+
"""Extract past and current steps from the ProcessStat."""
|
|
92
|
+
remaining_steps = pstat.log
|
|
93
|
+
past_steps = pstat.workflow.steps[: -len(remaining_steps)]
|
|
94
|
+
return StepList(past_steps + [pstat.log[0]])
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def get_auth_callbacks(steps: StepList, workflow: Workflow) -> tuple[Authorizer | None, Authorizer | None]:
|
|
98
|
+
"""Iterate over workflow and prior steps to determine correct authorization callbacks for the current step.
|
|
99
|
+
|
|
100
|
+
It's safest to always iterate through the steps. We could track these callbacks statefully
|
|
101
|
+
as we progress through the workflow, but if we fail a step and the system restarts, the previous
|
|
102
|
+
callbacks will be lost if they're only available in the process state.
|
|
103
|
+
|
|
104
|
+
Priority:
|
|
105
|
+
- RESUME callback is explicit RESUME callback, else previous START/RESUME callback
|
|
106
|
+
- RETRY callback is explicit RETRY, else explicit RESUME, else previous RETRY
|
|
107
|
+
"""
|
|
108
|
+
# Default to workflow start callbacks
|
|
109
|
+
auth_resume = workflow.authorize_callback
|
|
110
|
+
# auth_retry defaults to the workflow start callback if not otherwise specified.
|
|
111
|
+
# A workflow SHOULD have both callbacks set to not-None. This enforces the correct default regardless.
|
|
112
|
+
auth_retry = workflow.retry_auth_callback or auth_resume # type: ignore[unreachable, truthy-function]
|
|
113
|
+
|
|
114
|
+
# Choose the most recently established value for resume.
|
|
115
|
+
auth_resume = last(filter(None, (step.resume_auth_callback for step in steps)), auth_resume)
|
|
116
|
+
# Choose the most recently established value for retry, unless there is a more recent value for resume.
|
|
117
|
+
auth_retry = last(
|
|
118
|
+
filter(None, (step.retry_auth_callback or step.resume_auth_callback for step in steps)), auth_retry
|
|
119
|
+
)
|
|
120
|
+
return auth_resume, auth_retry
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def can_be_resumed(status: ProcessStatus) -> bool:
|
|
124
|
+
return status in (
|
|
125
|
+
ProcessStatus.SUSPENDED, # Can be resumed
|
|
126
|
+
ProcessStatus.FAILED, # Can be retried
|
|
127
|
+
ProcessStatus.API_UNAVAILABLE, # subtype of FAILED
|
|
128
|
+
ProcessStatus.INCONSISTENT_DATA, # subtype of FAILED
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
|
|
89
132
|
def resolve_user_name(
|
|
90
133
|
*,
|
|
91
134
|
reporter: Reporter | None,
|
|
@@ -115,6 +158,9 @@ def delete(process_id: UUID) -> None:
|
|
|
115
158
|
if not process:
|
|
116
159
|
raise_status(HTTPStatus.NOT_FOUND)
|
|
117
160
|
|
|
161
|
+
if not process.is_task:
|
|
162
|
+
raise_status(HTTPStatus.BAD_REQUEST)
|
|
163
|
+
|
|
118
164
|
db.session.delete(db.session.get(ProcessTable, process_id))
|
|
119
165
|
db.session.commit()
|
|
120
166
|
|
|
@@ -150,18 +196,25 @@ def new_process(
|
|
|
150
196
|
dependencies=[Depends(check_global_lock, use_cache=False)],
|
|
151
197
|
)
|
|
152
198
|
def resume_process_endpoint(
|
|
153
|
-
process_id: UUID,
|
|
199
|
+
process_id: UUID,
|
|
200
|
+
request: Request,
|
|
201
|
+
json_data: JSON = Body(...),
|
|
202
|
+
user: str = Depends(user_name),
|
|
203
|
+
user_model: OIDCUserModel | None = Depends(authenticate),
|
|
154
204
|
) -> None:
|
|
155
205
|
process = _get_process(process_id)
|
|
156
206
|
|
|
157
|
-
if process.last_status
|
|
158
|
-
raise_status(HTTPStatus.CONFLICT, "Resuming a
|
|
159
|
-
|
|
160
|
-
if process.last_status == ProcessStatus.RUNNING:
|
|
161
|
-
raise_status(HTTPStatus.CONFLICT, "Resuming a running workflow is not possible")
|
|
207
|
+
if not can_be_resumed(process.last_status):
|
|
208
|
+
raise_status(HTTPStatus.CONFLICT, f"Resuming a {process.last_status.lower()} workflow is not possible")
|
|
162
209
|
|
|
163
|
-
|
|
164
|
-
|
|
210
|
+
pstat = load_process(process)
|
|
211
|
+
auth_resume, auth_retry = get_auth_callbacks(get_current_steps(pstat), pstat.workflow)
|
|
212
|
+
if process.last_status == ProcessStatus.SUSPENDED:
|
|
213
|
+
if auth_resume is not None and not auth_resume(user_model):
|
|
214
|
+
raise_status(HTTPStatus.FORBIDDEN, "User is not authorized to resume step")
|
|
215
|
+
elif process.last_status == ProcessStatus.FAILED:
|
|
216
|
+
if auth_retry is not None and not auth_retry(user_model):
|
|
217
|
+
raise_status(HTTPStatus.FORBIDDEN, "User is not authorized to retry step")
|
|
165
218
|
|
|
166
219
|
broadcast_invalidate_status_counts()
|
|
167
220
|
broadcast_func = api_broadcast_process_data(request)
|
|
@@ -220,7 +273,7 @@ def update_progress_on_awaiting_process_endpoint(
|
|
|
220
273
|
@router.put(
|
|
221
274
|
"/resume-all", response_model=ProcessResumeAllSchema, dependencies=[Depends(check_global_lock, use_cache=False)]
|
|
222
275
|
)
|
|
223
|
-
async def
|
|
276
|
+
async def resume_all_processes_endpoint(request: Request, user: str = Depends(user_name)) -> dict[str, int]:
|
|
224
277
|
"""Retry all task processes in status Failed, Waiting, API Unavailable or Inconsistent Data.
|
|
225
278
|
|
|
226
279
|
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)
|
|
@@ -11,7 +11,6 @@ from pydantic_forms.types import FormGenerator, State, UUIDstr
|
|
|
11
11
|
|
|
12
12
|
from orchestrator.forms import FormPage
|
|
13
13
|
from orchestrator.forms.validators import Divider, Label, CustomerId, MigrationSummary
|
|
14
|
-
from orchestrator.targets import Target
|
|
15
14
|
from orchestrator.types import SubscriptionLifecycle
|
|
16
15
|
from orchestrator.workflow import StepList, begin, step
|
|
17
16
|
from orchestrator.workflows.steps import store_process_subscription
|
|
@@ -119,6 +118,6 @@ def create_{{ product.variable }}() -> StepList:
|
|
|
119
118
|
return (
|
|
120
119
|
begin
|
|
121
120
|
>> construct_{{ product.variable }}_model
|
|
122
|
-
>> store_process_subscription(
|
|
121
|
+
>> store_process_subscription()
|
|
123
122
|
# TODO add provision step(s)
|
|
124
123
|
)
|
|
@@ -117,7 +117,7 @@ class ProcessTable(BaseModel):
|
|
|
117
117
|
is_task = mapped_column(Boolean, nullable=False, server_default=text("false"), index=True)
|
|
118
118
|
|
|
119
119
|
steps = relationship(
|
|
120
|
-
"ProcessStepTable", cascade="delete", passive_deletes=True, order_by="asc(ProcessStepTable.
|
|
120
|
+
"ProcessStepTable", cascade="delete", passive_deletes=True, order_by="asc(ProcessStepTable.completed_at)"
|
|
121
121
|
)
|
|
122
122
|
input_states = relationship("InputStateTable", cascade="delete", order_by="desc(InputStateTable.input_time)")
|
|
123
123
|
process_subscriptions = relationship("ProcessSubscriptionTable", back_populates="process", passive_deletes=True)
|
|
@@ -141,7 +141,8 @@ class ProcessStepTable(BaseModel):
|
|
|
141
141
|
status = mapped_column(String(50), nullable=False)
|
|
142
142
|
state = mapped_column(pg.JSONB(), nullable=False)
|
|
143
143
|
created_by = mapped_column(String(255), nullable=True)
|
|
144
|
-
|
|
144
|
+
completed_at = mapped_column(UtcTimestamp, server_default=text("statement_timestamp()"), nullable=False)
|
|
145
|
+
started_at = mapped_column(UtcTimestamp, server_default=text("statement_timestamp()"), nullable=False)
|
|
145
146
|
commit_hash = mapped_column(String(40), nullable=True, default=GIT_COMMIT_HASH)
|
|
146
147
|
|
|
147
148
|
|
|
@@ -154,7 +155,9 @@ class ProcessSubscriptionTable(BaseModel):
|
|
|
154
155
|
)
|
|
155
156
|
subscription_id = mapped_column(UUIDType, ForeignKey("subscriptions.subscription_id"), nullable=False, index=True)
|
|
156
157
|
created_at = mapped_column(UtcTimestamp, server_default=text("current_timestamp()"), nullable=False)
|
|
157
|
-
|
|
158
|
+
|
|
159
|
+
# FIXME: workflow_target is already stored in the workflow table, this column should get removed in a later release.
|
|
160
|
+
workflow_target = mapped_column(String(255), nullable=True)
|
|
158
161
|
|
|
159
162
|
process = relationship("ProcessTable", back_populates="process_subscriptions")
|
|
160
163
|
subscription = relationship("SubscriptionTable", back_populates="processes")
|
{orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/process.py
RENAMED
|
@@ -6,14 +6,17 @@ from strawberry.federation.schema_directives import Key
|
|
|
6
6
|
from strawberry.scalars import JSON
|
|
7
7
|
|
|
8
8
|
from oauth2_lib.strawberry import authenticated_field
|
|
9
|
+
from orchestrator.api.api_v1.endpoints.processes import get_auth_callbacks, get_current_steps
|
|
9
10
|
from orchestrator.db import ProcessTable, ProductTable, db
|
|
10
11
|
from orchestrator.graphql.pagination import EMPTY_PAGE, Connection
|
|
11
12
|
from orchestrator.graphql.schemas.customer import CustomerType
|
|
12
13
|
from orchestrator.graphql.schemas.helpers import get_original_model
|
|
13
14
|
from orchestrator.graphql.schemas.product import ProductType
|
|
14
|
-
from orchestrator.graphql.types import GraphqlFilter, GraphqlSort, OrchestratorInfo
|
|
15
|
+
from orchestrator.graphql.types import FormUserPermissionsType, GraphqlFilter, GraphqlSort, OrchestratorInfo
|
|
15
16
|
from orchestrator.schemas.process import ProcessSchema, ProcessStepSchema
|
|
17
|
+
from orchestrator.services.processes import load_process
|
|
16
18
|
from orchestrator.settings import app_settings
|
|
19
|
+
from orchestrator.workflows import get_workflow
|
|
17
20
|
|
|
18
21
|
if TYPE_CHECKING:
|
|
19
22
|
from orchestrator.graphql.schemas.subscription import SubscriptionInterface
|
|
@@ -29,7 +32,11 @@ class ProcessStepType:
|
|
|
29
32
|
name: strawberry.auto
|
|
30
33
|
status: strawberry.auto
|
|
31
34
|
created_by: strawberry.auto
|
|
32
|
-
executed: strawberry.auto
|
|
35
|
+
executed: strawberry.auto = strawberry.field(
|
|
36
|
+
deprecation_reason="Deprecated, use 'started' and 'completed' for step start and completion times"
|
|
37
|
+
)
|
|
38
|
+
started: strawberry.auto
|
|
39
|
+
completed: strawberry.auto
|
|
33
40
|
commit_hash: strawberry.auto
|
|
34
41
|
state: JSON | None
|
|
35
42
|
state_delta: JSON | None
|
|
@@ -74,6 +81,18 @@ class ProcessType:
|
|
|
74
81
|
shortcode=app_settings.DEFAULT_CUSTOMER_SHORTCODE,
|
|
75
82
|
)
|
|
76
83
|
|
|
84
|
+
@strawberry.field(description="Returns user permissions for operations on this process") # type: ignore
|
|
85
|
+
def user_permissions(self, info: OrchestratorInfo) -> FormUserPermissionsType:
|
|
86
|
+
oidc_user = info.context.get_current_user
|
|
87
|
+
workflow = get_workflow(self.workflow_name)
|
|
88
|
+
process = load_process(db.session.get(ProcessTable, self.process_id)) # type: ignore[arg-type]
|
|
89
|
+
auth_resume, auth_retry = get_auth_callbacks(get_current_steps(process), workflow) # type: ignore[arg-type]
|
|
90
|
+
|
|
91
|
+
return FormUserPermissionsType(
|
|
92
|
+
retryAllowed=auth_retry and auth_retry(oidc_user), # type: ignore[arg-type]
|
|
93
|
+
resumeAllowed=auth_resume and auth_resume(oidc_user), # type: ignore[arg-type]
|
|
94
|
+
)
|
|
95
|
+
|
|
77
96
|
@authenticated_field(description="Returns list of subscriptions of the process") # type: ignore
|
|
78
97
|
async def subscriptions(
|
|
79
98
|
self,
|
{orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/product.py
RENAMED
|
@@ -52,21 +52,20 @@ class ProductType:
|
|
|
52
52
|
return await resolve_subscriptions(info, filter_by_with_related_subscriptions, sort_by, first, after)
|
|
53
53
|
|
|
54
54
|
@strawberry.field(description="Returns list of all nested productblock names") # type: ignore
|
|
55
|
-
async def
|
|
56
|
-
|
|
55
|
+
async def all_product_block_names(self) -> list[str]:
|
|
57
56
|
model = get_original_model(self, ProductTable)
|
|
58
57
|
|
|
59
|
-
def
|
|
58
|
+
def get_names(product_blocks: list[ProductBlockTable], visited: set) -> Iterable[str]:
|
|
60
59
|
for product_block in product_blocks:
|
|
60
|
+
if product_block.product_block_id in visited:
|
|
61
|
+
continue
|
|
62
|
+
visited.add(product_block.product_block_id)
|
|
61
63
|
yield product_block.name
|
|
62
|
-
|
|
63
64
|
if product_block.depends_on:
|
|
64
|
-
yield from
|
|
65
|
-
|
|
66
|
-
names: list[str] = list(get_all_pb_names(model.product_blocks))
|
|
67
|
-
names.sort()
|
|
65
|
+
yield from get_names(product_block.depends_on, visited)
|
|
68
66
|
|
|
69
|
-
|
|
67
|
+
names = set(get_names(model.product_blocks, set()))
|
|
68
|
+
return sorted(names)
|
|
70
69
|
|
|
71
70
|
@strawberry.field(description="Return product blocks") # type: ignore
|
|
72
71
|
async def product_blocks(self) -> list[Annotated["ProductBlock", strawberry.lazy(".product_block")]]:
|
{orchestrator_core-4.1.0rc1 → orchestrator_core-4.2.0rc1}/orchestrator/graphql/schemas/workflow.py
RENAMED
|
@@ -5,6 +5,7 @@ import strawberry
|
|
|
5
5
|
from orchestrator.config.assignee import Assignee
|
|
6
6
|
from orchestrator.db import WorkflowTable
|
|
7
7
|
from orchestrator.graphql.schemas.helpers import get_original_model
|
|
8
|
+
from orchestrator.graphql.types import OrchestratorInfo
|
|
8
9
|
from orchestrator.schemas import StepSchema, WorkflowSchema
|
|
9
10
|
from orchestrator.workflows import get_workflow
|
|
10
11
|
|
|
@@ -30,3 +31,11 @@ class Workflow:
|
|
|
30
31
|
@strawberry.field(description="Return all steps for this workflow") # type: ignore
|
|
31
32
|
def steps(self) -> list[Step]:
|
|
32
33
|
return [Step(name=step.name, assignee=step.assignee) for step in get_workflow(self.name).steps] # type: ignore
|
|
34
|
+
|
|
35
|
+
@strawberry.field(description="Return whether the currently logged-in used is allowed to start this workflow") # type: ignore
|
|
36
|
+
def is_allowed(self, info: OrchestratorInfo) -> bool:
|
|
37
|
+
oidc_user = info.context.get_current_user
|
|
38
|
+
workflow_table = get_original_model(self, WorkflowTable)
|
|
39
|
+
workflow = get_workflow(workflow_table.name)
|
|
40
|
+
|
|
41
|
+
return workflow.authorize_callback(oidc_user) # type: ignore
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2022-
|
|
1
|
+
# Copyright 2022-2025 SURF, GÉANT.
|
|
2
2
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
3
3
|
# you may not use this file except in compliance with the License.
|
|
4
4
|
# You may obtain a copy of the License at
|
|
@@ -132,6 +132,12 @@ SCALAR_OVERRIDES: ScalarOverrideType = {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
|
|
135
|
+
@strawberry.type(description="User permissions on a specific process")
|
|
136
|
+
class FormUserPermissionsType:
|
|
137
|
+
retryAllowed: bool
|
|
138
|
+
resumeAllowed: bool
|
|
139
|
+
|
|
140
|
+
|
|
135
141
|
@strawberry.type(description="Generic class to capture errors")
|
|
136
142
|
class MutationError:
|
|
137
143
|
message: str = strawberry.field(description="Error message")
|