orchestrator-core 4.0.0rc1__tar.gz → 4.0.0rc2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (662) hide show
  1. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.bumpversion.cfg +1 -1
  2. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/PKG-INFO +1 -1
  3. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/application/workflow.md +8 -2
  4. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/migration-guide/2.0.md +0 -4
  5. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/migration-guide/3.0.md +0 -4
  6. orchestrator_core-4.0.0rc2/docs/migration-guide/4.0.md +69 -0
  7. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/__init__.py +1 -1
  8. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/new_product_migration.j2 +5 -1
  9. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/migrate_tasks.py +5 -5
  10. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/migrate_workflows.py +1 -2
  11. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/models.py +2 -0
  12. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/helpers.py +14 -6
  13. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +1 -1
  14. orchestrator_core-4.0.0rc2/orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +28 -0
  15. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schedules/validate_subscriptions.py +4 -4
  16. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/workflow.py +1 -0
  17. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/celery.py +11 -3
  18. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/processes.py +1 -2
  19. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/subscriptions.py +4 -1
  20. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/workflows.py +8 -4
  21. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/targets.py +1 -0
  22. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/tasks/validate_product_type.py +2 -2
  23. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/tasks/validate_products.py +3 -6
  24. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/utils.py +1 -1
  25. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_85be1c80731c_add_example2.py +5 -1
  26. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_ea9e6c9de75c_add_example1.py +5 -1
  27. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-06-07_380a5b0c928c_add_example4.py +5 -1
  28. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/__init__.py +3 -1
  29. orchestrator_core-4.0.0rc1/docs/migration-guide/4.0.md +0 -16
  30. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.coveragerc +0 -0
  31. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  32. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  33. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/dependabot.yml +0 -0
  34. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/README.md +0 -0
  35. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/build-push-container.yml +0 -0
  36. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/changelog.yml +0 -0
  37. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/codeql-analysis.yml +0 -0
  38. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/gh-pages.yml +0 -0
  39. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/issues.yml +0 -0
  40. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/publish-package.yml +0 -0
  41. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/run-codspeed-tests.yml +0 -0
  42. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/run-linting-tests.yml +0 -0
  43. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/run-unit-tests.yml +0 -0
  44. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.github/workflows/scheduled-build.yml +0 -0
  45. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.gitignore +0 -0
  46. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.pre-commit-config.yaml +0 -0
  47. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/.stignore +0 -0
  48. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/CHANGELOG.md +0 -0
  49. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/Dockerfile +0 -0
  50. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/LICENSE +0 -0
  51. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/NOTICE +0 -0
  52. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/README.md +0 -0
  53. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/codecov.yml +0 -0
  54. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/application/domainmodels.md +0 -0
  55. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/application/forms-frontend.md +0 -0
  56. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/application/tasks.md +0 -0
  57. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/framework.md +0 -0
  58. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/img/base-orchestrator-setup.png +0 -0
  59. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/img/custom-orchestrator-setup.png +0 -0
  60. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/orchestration/img/Custom-orchestrator-ui-using-override.png +0 -0
  61. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/orchestration/img/Standard-orchestrator-ui.png +0 -0
  62. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/orchestration/orchestrator-ui.md +0 -0
  63. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/orchestration/philosophy.md +0 -0
  64. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/backfilling.md +0 -0
  65. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/context.md +0 -0
  66. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/imports.md +0 -0
  67. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/introduction.md +0 -0
  68. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/ip_static.md +0 -0
  69. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/ip_static.png +0 -0
  70. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/l2_point_to_point.md +0 -0
  71. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/l2_point_to_point.png +0 -0
  72. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/l2_vpn.md +0 -0
  73. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/l2_vpn.png +0 -0
  74. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/modelling.md +0 -0
  75. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/node.md +0 -0
  76. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/node.png +0 -0
  77. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/port.md +0 -0
  78. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/port.png +0 -0
  79. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/product_block_graph.md +0 -0
  80. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/product_block_graph.png +0 -0
  81. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/standards.md +0 -0
  82. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/product_modelling/terminology.md +0 -0
  83. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/architecture/tldr.md +0 -0
  84. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/contributing/development.md +0 -0
  85. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/contributing/guidelines.md +0 -0
  86. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/contributing/testing.md +0 -0
  87. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/css/custom.css +0 -0
  88. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/css/style.css +0 -0
  89. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/css/termynal.css +0 -0
  90. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/getting-started/base.md +0 -0
  91. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/getting-started/docker.md +0 -0
  92. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/getting-started/orchestration-ui.md +0 -0
  93. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/getting-started/prepare-source-folder.md +0 -0
  94. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/getting-started/versions.md +0 -0
  95. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/img/WFO-Emblem-White.png +0 -0
  96. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/img/favicon.ico +0 -0
  97. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/index.md +0 -0
  98. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/js/custom.js +0 -0
  99. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/js/termynal.js +0 -0
  100. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/api.md +0 -0
  101. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/app/app.md +0 -0
  102. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/app/scaling.md +0 -0
  103. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/auth-backend-and-frontend.md +0 -0
  104. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/cli.md +0 -0
  105. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/database.md +0 -0
  106. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/generator.md +0 -0
  107. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/instantiating.md +0 -0
  108. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/model_attributes.md +0 -0
  109. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/overview.md +0 -0
  110. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/product_blocks.md +0 -0
  111. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/product_types.md +0 -0
  112. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/properties.md +0 -0
  113. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/pydantic_hooks.md +0 -0
  114. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/type_casting.md +0 -0
  115. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/union_types.md +0 -0
  116. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/domain_models/validation.md +0 -0
  117. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/forms.md +0 -0
  118. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/graphql.md +0 -0
  119. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/python.md +0 -0
  120. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/search.md +0 -0
  121. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/search_overview.png +0 -0
  122. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/serialization.md +0 -0
  123. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/tasks.md +0 -0
  124. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/tests.md +0 -0
  125. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/tldr.md +0 -0
  126. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/websockets.md +0 -0
  127. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/workflows/callbacks.md +0 -0
  128. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/workflows/workflow-lifecycles.md +0 -0
  129. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/reference-docs/workflows/workflow-steps.md +0 -0
  130. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/bootstrap.md +0 -0
  131. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/create-your-own.md +0 -0
  132. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/docker-installation.md +0 -0
  133. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/domain-models.md +0 -0
  134. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/execute-workflows.md +0 -0
  135. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/generator.md +0 -0
  136. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/l2_point_to_point.png +0 -0
  137. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/node-create.md +0 -0
  138. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/node-modify.md +0 -0
  139. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/node-terminate.md +0 -0
  140. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/node-validate.md +0 -0
  141. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/overview.md +0 -0
  142. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/scenario.md +0 -0
  143. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/workflow-basics.md +0 -0
  144. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/advanced/workflow-introduction.md +0 -0
  145. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/create-user-group.md +0 -0
  146. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/create-user.md +0 -0
  147. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/database-migration.md +0 -0
  148. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/debian.md +0 -0
  149. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/docker.md +0 -0
  150. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/domain-models.md +0 -0
  151. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/explore.md +0 -0
  152. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/input-forms.md +0 -0
  153. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/macos.md +0 -0
  154. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/modify-user-group.md +0 -0
  155. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/modify-user.md +0 -0
  156. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/register-workflows.md +0 -0
  157. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/start-applications.md +0 -0
  158. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/terminate-user-group.md +0 -0
  159. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/terminate-user.md +0 -0
  160. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/workflow-introduction.md +0 -0
  161. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/beginner/workshop-overview.md +0 -0
  162. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/images/Software-topology.drawio.png +0 -0
  163. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/images/clab_topology.png +0 -0
  164. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/images/metadata_products.png +0 -0
  165. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/images/netbox_devices_active.png +0 -0
  166. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/images/subscriptions.png +0 -0
  167. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/docs/workshops/images/topology.drawio.png +0 -0
  168. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/includes/abbreviations.md +0 -0
  169. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/mkdocs.yml +0 -0
  170. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/nitpick-style.toml +0 -0
  171. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/__init__.py +0 -0
  172. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/__init__.py +0 -0
  173. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/api.py +0 -0
  174. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
  175. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/health.py +0 -0
  176. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/processes.py +0 -0
  177. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
  178. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/products.py +0 -0
  179. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
  180. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
  181. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
  182. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/subscriptions.py +0 -0
  183. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
  184. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/user.py +0 -0
  185. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
  186. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
  187. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/error_handling.py +0 -0
  188. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/helpers.py +0 -0
  189. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/api/models.py +0 -0
  190. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/app.py +0 -0
  191. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/__init__.py +0 -0
  192. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/database.py +0 -0
  193. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
  194. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
  195. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
  196. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
  197. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
  198. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
  199. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
  200. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generate.py +0 -0
  201. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/__init__.py +0 -0
  202. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/custom_templates/README +0 -0
  203. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
  204. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
  205. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
  206. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
  207. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
  208. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
  209. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
  210. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
  211. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
  212. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/__init__.py +0 -0
  213. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/enums.py +0 -0
  214. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/helpers.py +0 -0
  215. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/migration.py +0 -0
  216. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/product.py +0 -0
  217. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/product_block.py +0 -0
  218. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/settings.py +0 -0
  219. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/translations.py +0 -0
  220. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/unittest.py +0 -0
  221. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/validations.py +0 -0
  222. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/generator/workflow.py +0 -0
  223. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
  224. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
  225. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
  226. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
  227. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
  228. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
  229. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
  230. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
  231. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
  232. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
  233. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
  234. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
  235. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/enums.j2 +0 -0
  236. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
  237. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
  238. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/macros.j2 +0 -0
  239. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
  240. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/product.j2 +0 -0
  241. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
  242. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
  243. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
  244. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
  245. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
  246. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
  247. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
  248. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
  249. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
  250. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
  251. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
  252. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/helpers/__init__.py +0 -0
  253. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/helpers/input_helpers.py +0 -0
  254. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/helpers/print_helpers.py +0 -0
  255. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/main.py +0 -0
  256. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/migrate_domain_models.py +0 -0
  257. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/migration_helpers.py +0 -0
  258. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/cli/scheduler.py +0 -0
  259. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/config/__init__.py +0 -0
  260. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/config/assignee.py +0 -0
  261. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/__init__.py +0 -0
  262. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/database.py +0 -0
  263. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/filters/__init__.py +0 -0
  264. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/filters/filters.py +0 -0
  265. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/filters/process.py +0 -0
  266. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/filters/product.py +0 -0
  267. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/filters/product_block.py +0 -0
  268. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/filters/resource_type.py +0 -0
  269. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/filters/search_filters/__init__.py +0 -0
  270. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
  271. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/filters/subscription.py +0 -0
  272. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/filters/workflow.py +0 -0
  273. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/helpers.py +0 -0
  274. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/listeners.py +0 -0
  275. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/loaders.py +0 -0
  276. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/queries/__init__.py +0 -0
  277. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/queries/subscription.py +0 -0
  278. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/queries/subscription_instance.py +0 -0
  279. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/range/__init__.py +0 -0
  280. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/range/range.py +0 -0
  281. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/sorting/__init__.py +0 -0
  282. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/sorting/process.py +0 -0
  283. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/sorting/product.py +0 -0
  284. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/sorting/product_block.py +0 -0
  285. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/sorting/resource_type.py +0 -0
  286. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/sorting/sorting.py +0 -0
  287. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/sorting/subscription.py +0 -0
  288. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/db/sorting/workflow.py +0 -0
  289. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/devtools/__init__.py +0 -0
  290. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/devtools/populator.py +0 -0
  291. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/devtools/scripts/__init__.py +0 -0
  292. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/devtools/scripts/migrate_20.py +0 -0
  293. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/devtools/scripts/migrate_30.py +0 -0
  294. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/devtools/scripts/shared.py +0 -0
  295. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/distlock/__init__.py +0 -0
  296. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/distlock/distlock_manager.py +0 -0
  297. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/distlock/managers/__init__.py +0 -0
  298. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
  299. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
  300. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/domain/__init__.py +0 -0
  301. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/domain/base.py +0 -0
  302. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/domain/context_cache.py +0 -0
  303. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/domain/customer_description.py +0 -0
  304. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/domain/helpers.py +0 -0
  305. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/domain/lifecycle.py +0 -0
  306. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/domain/subscription_instance_transform.py +0 -0
  307. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/exception_handlers.py +0 -0
  308. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/forms/__init__.py +0 -0
  309. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/forms/validators/__init__.py +0 -0
  310. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/forms/validators/customer_contact_list.py +0 -0
  311. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/forms/validators/customer_id.py +0 -0
  312. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/forms/validators/display_subscription.py +0 -0
  313. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/forms/validators/network_type_validators.py +0 -0
  314. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/forms/validators/product_id.py +0 -0
  315. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/__init__.py +0 -0
  316. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/autoregistration.py +0 -0
  317. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/extensions/__init__.py +0 -0
  318. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/extensions/model_cache.py +0 -0
  319. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/extensions/stats.py +0 -0
  320. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/loaders/__init__.py +0 -0
  321. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/loaders/subscriptions.py +0 -0
  322. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/mutations/customer_description.py +0 -0
  323. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/mutations/start_process.py +0 -0
  324. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/pagination.py +0 -0
  325. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/__init__.py +0 -0
  326. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/customer.py +0 -0
  327. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/helpers.py +0 -0
  328. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/process.py +0 -0
  329. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/product.py +0 -0
  330. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/product_block.py +0 -0
  331. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/resource_type.py +0 -0
  332. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/settings.py +0 -0
  333. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/subscription.py +0 -0
  334. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/version.py +0 -0
  335. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/resolvers/workflow.py +0 -0
  336. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schema.py +0 -0
  337. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/__init__.py +0 -0
  338. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/customer.py +0 -0
  339. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/customer_description.py +0 -0
  340. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/errors.py +0 -0
  341. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/fixed_input.py +0 -0
  342. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/helpers.py +0 -0
  343. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/process.py +0 -0
  344. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/product.py +0 -0
  345. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/product_block.py +0 -0
  346. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/resource_type.py +0 -0
  347. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/settings.py +0 -0
  348. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
  349. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/subscription.py +0 -0
  350. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/version.py +0 -0
  351. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/schemas/workflow.py +0 -0
  352. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/types.py +0 -0
  353. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/utils/__init__.py +0 -0
  354. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
  355. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
  356. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
  357. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
  358. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
  359. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
  360. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/utils/override_class.py +0 -0
  361. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
  362. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/log_config.py +0 -0
  363. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/README +0 -0
  364. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/alembic.ini +0 -0
  365. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/env.py +0 -0
  366. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/script.py.mako +0 -0
  367. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
  368. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/templates/env.py.j2 +0 -0
  369. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
  370. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
  371. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
  372. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
  373. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
  374. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
  375. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
  376. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
  377. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
  378. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
  379. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
  380. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
  381. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
  382. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
  383. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
  384. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
  385. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
  386. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
  387. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
  388. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
  389. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
  390. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +0 -0
  391. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py +0 -0
  392. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql +0 -0
  393. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +0 -0
  394. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/py.typed +0 -0
  395. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schedules/__init__.py +0 -0
  396. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schedules/resume_workflows.py +0 -0
  397. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schedules/scheduling.py +0 -0
  398. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schedules/task_vacuum.py +0 -0
  399. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schedules/validate_products.py +0 -0
  400. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/__init__.py +0 -0
  401. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/base.py +0 -0
  402. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/engine_settings.py +0 -0
  403. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/fixed_input.py +0 -0
  404. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/problem_detail.py +0 -0
  405. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/process.py +0 -0
  406. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/product.py +0 -0
  407. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/product_block.py +0 -0
  408. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/resource_type.py +0 -0
  409. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/subscription.py +0 -0
  410. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/schemas/subscription_descriptions.py +0 -0
  411. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/security.py +0 -0
  412. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/__init__.py +0 -0
  413. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/fixed_inputs.py +0 -0
  414. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/input_state.py +0 -0
  415. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/process_broadcast_thread.py +0 -0
  416. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/products.py +0 -0
  417. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/resource_types.py +0 -0
  418. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/settings.py +0 -0
  419. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/subscription_relations.py +0 -0
  420. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/tasks.py +0 -0
  421. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/services/translations.py +0 -0
  422. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/settings.py +0 -0
  423. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/types.py +0 -0
  424. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/__init__.py +0 -0
  425. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/crypt.py +0 -0
  426. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/datetime.py +0 -0
  427. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/deprecation_logger.py +0 -0
  428. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/docs.py +0 -0
  429. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/enrich_process.py +0 -0
  430. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/errors.py +0 -0
  431. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/fixed_inputs.py +0 -0
  432. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/functional.py +0 -0
  433. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/get_subscription_dict.py +0 -0
  434. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/get_updated_properties.py +0 -0
  435. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/helpers.py +0 -0
  436. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/json.py +0 -0
  437. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/redis.py +0 -0
  438. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/redis_client.py +0 -0
  439. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/search_query.py +0 -0
  440. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/state.py +0 -0
  441. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/strings.py +0 -0
  442. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/utils/validate_data_version.py +0 -0
  443. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/version.py +0 -0
  444. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/websocket/__init__.py +0 -0
  445. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
  446. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
  447. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/websocket/websocket_manager.py +0 -0
  448. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflow.py +0 -0
  449. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/__init__.py +0 -0
  450. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/modify_note.py +0 -0
  451. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/removed_workflow.py +0 -0
  452. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/steps.py +0 -0
  453. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/tasks/__init__.py +0 -0
  454. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
  455. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
  456. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/orchestrator/workflows/translations/en-GB.json +0 -0
  457. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/pyproject.toml +0 -0
  458. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/setup.cfg +0 -0
  459. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/setup.py +0 -0
  460. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/__init__.py +0 -0
  461. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/__init__.py +0 -0
  462. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/conftest.py +0 -0
  463. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/fixtures/test_orchestrator/__init__.py +0 -0
  464. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/__init__.py +0 -0
  465. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/test_product_populator.py +0 -0
  466. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/fixtures/test_orchestrator/main.py +0 -0
  467. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/__init__.py +0 -0
  468. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/test_product_blocks.py +0 -0
  469. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/fixtures/test_orchestrator/products/__init__.py +0 -0
  470. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/fixtures/test_orchestrator/products/test_product.py +0 -0
  471. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/fixtures/test_orchestrator/workflows/__init__.py +0 -0
  472. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/fixtures/test_orchestrator/workflows/create_test_product.py +0 -0
  473. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/acceptance_tests/test_test_product.py +0 -0
  474. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/__init__.py +0 -0
  475. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/__init__.py +0 -0
  476. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_health.py +0 -0
  477. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_helpers.py +0 -0
  478. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_models.py +0 -0
  479. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_processes.py +0 -0
  480. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_processes_ws.py +0 -0
  481. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_product_blocks.py +0 -0
  482. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_products.py +0 -0
  483. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_resource_types.py +0 -0
  484. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_settings.py +0 -0
  485. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_subscription_customer_descriptions.py +0 -0
  486. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_subscriptions.py +0 -0
  487. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_workflows.py +0 -0
  488. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/api/test_ws.py +0 -0
  489. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/__init__.py +0 -0
  490. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/conftest.py +0 -0
  491. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/alembic.ini +0 -0
  492. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/main.py +0 -0
  493. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/migrations/env.py +0 -0
  494. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/migrations/helpers.py +0 -0
  495. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/migrations/script.py.mako +0 -0
  496. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_59e1199aff7f_create_data_head.py +0 -0
  497. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/products/__init__.py +0 -0
  498. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/products/product_blocks/__init__.py +0 -0
  499. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/products/product_blocks/example1.py +0 -0
  500. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/products/product_blocks/example2.py +0 -0
  501. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/products/product_blocks/example4.py +0 -0
  502. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/products/product_blocks/example4sub.py +0 -0
  503. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/products/product_types/__init__.py +0 -0
  504. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/products/product_types/example1.py +0 -0
  505. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/products/product_types/example2.py +0 -0
  506. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/products/product_types/example4.py +0 -0
  507. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example1.py +0 -0
  508. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example2.py +0 -0
  509. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example4.py +0 -0
  510. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_create_example1.py +0 -0
  511. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_modify_example1.py +0 -0
  512. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_terminate_example1.py +0 -0
  513. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_validate_example1.py +0 -0
  514. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_create_example2.py +0 -0
  515. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_modify_example2.py +0 -0
  516. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_terminate_example2.py +0 -0
  517. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_validate_example2.py +0 -0
  518. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_create_example4.py +0 -0
  519. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_modify_example4.py +0 -0
  520. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_terminate_example4.py +0 -0
  521. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_validate_example4.py +0 -0
  522. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/translations/en-GB.json +0 -0
  523. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/__init__.py +0 -0
  524. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example1/create_example1.py +0 -0
  525. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example1/modify_example1.py +0 -0
  526. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example1/shared/forms.py +0 -0
  527. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example1/terminate_example1.py +0 -0
  528. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example1/validate_example1.py +0 -0
  529. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example2/create_example2.py +0 -0
  530. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example2/modify_example2.py +0 -0
  531. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example2/shared/forms.py +0 -0
  532. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example2/terminate_example2.py +0 -0
  533. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example4/create_example4.py +0 -0
  534. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example4/modify_example4.py +0 -0
  535. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example4/shared/forms.py +0 -0
  536. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/example4/terminate_example4.py +0 -0
  537. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate/workflows/shared.py +0 -0
  538. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/generate.sh +0 -0
  539. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/invalid_product_config1.yaml +0 -0
  540. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/invalid_product_config2.yaml +0 -0
  541. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/product_config1.yaml +0 -0
  542. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/product_config2.yaml +0 -0
  543. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/product_config3.yaml +0 -0
  544. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/data/product_config4.yaml +0 -0
  545. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/generator/__init__.py +0 -0
  546. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/generator/test_enums.py +0 -0
  547. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/helpers.py +0 -0
  548. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/test_cli_generate.py +0 -0
  549. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/test_config_validation.py +0 -0
  550. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/test_generate_code.py +0 -0
  551. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/test_migrate_domain_models_with_instances.py +0 -0
  552. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/cli/test_migrate_domain_models_without_instances.py +0 -0
  553. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/config.py +0 -0
  554. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/conftest.py +0 -0
  555. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/db/__init__.py +0 -0
  556. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/db/test_listeners.py +0 -0
  557. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/domain/__init__.py +0 -0
  558. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/domain/test_base.py +0 -0
  559. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/domain/test_base_multiple.py +0 -0
  560. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/domain/test_base_performance.py +0 -0
  561. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/domain/test_base_serializable_property.py +0 -0
  562. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/domain/test_base_with_list_union.py +0 -0
  563. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/domain/test_base_with_union.py +0 -0
  564. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/domain/test_lifecycle.py +0 -0
  565. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/__init__.py +0 -0
  566. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/processes.py +0 -0
  567. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/__init__.py +0 -0
  568. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_blocks/__init__.py +0 -0
  569. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_blocks/product_block_list_nested.py +0 -0
  570. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_blocks/product_block_one.py +0 -0
  571. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_blocks/product_block_one_nested.py +0 -0
  572. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_blocks/product_block_with_list_union.py +0 -0
  573. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_blocks/product_block_with_union.py +0 -0
  574. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_blocks/product_sub_block_one.py +0 -0
  575. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_blocks/product_sub_block_two.py +0 -0
  576. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/__init__.py +0 -0
  577. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/product_type_list_nested.py +0 -0
  578. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/product_type_list_union.py +0 -0
  579. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/product_type_list_union_overlap.py +0 -0
  580. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/product_type_one.py +0 -0
  581. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/product_type_one_nested.py +0 -0
  582. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/product_type_sub_list_union.py +0 -0
  583. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/product_type_sub_one.py +0 -0
  584. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/product_type_sub_two.py +0 -0
  585. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/product_type_sub_union.py +0 -0
  586. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/product_type_union.py +0 -0
  587. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/product_types/subscription_relations.py +0 -0
  588. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/products/resource_types.py +0 -0
  589. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/fixtures/workflows.py +0 -0
  590. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/forms/__init__.py +0 -0
  591. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/forms/test_customer_contact_list.py +0 -0
  592. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/forms/test_customer_id.py +0 -0
  593. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/forms/test_display_subscription.py +0 -0
  594. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/forms/test_generic_validators.py +0 -0
  595. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/__init__.py +0 -0
  596. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/conftest.py +0 -0
  597. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/extensions/__init__.py +0 -0
  598. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/extensions/test_stats.py +0 -0
  599. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/mutations/helpers.py +0 -0
  600. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/mutations/test_customer_description.py +0 -0
  601. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/mutations/test_start_process.py +0 -0
  602. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_customer.py +0 -0
  603. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_process.py +0 -0
  604. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_processes.py +0 -0
  605. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_product.py +0 -0
  606. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_product_blocks.py +0 -0
  607. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_resource_types.py +0 -0
  608. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_settings.py +0 -0
  609. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_sort_and_filter_fields.py +0 -0
  610. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_subscription.py +0 -0
  611. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_subscription_relations.py +0 -0
  612. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_subscriptions.py +0 -0
  613. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_version.py +0 -0
  614. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/test_workflows.py +0 -0
  615. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/utils/__init__.py +0 -0
  616. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/utils/fixtures.py +0 -0
  617. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/utils/test_autoregistration.py +0 -0
  618. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/utils/test_get_query_loaders.py +0 -0
  619. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/utils/test_get_selected_paths.py +0 -0
  620. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/utils/test_is_query_detailed.py +0 -0
  621. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/utils/test_is_querying_page_data.py +0 -0
  622. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/graphql/utils/test_override_class.py +0 -0
  623. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/helpers.py +0 -0
  624. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/migrations/__init__.py +0 -0
  625. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/migrations/test_cascade_constraint.py +0 -0
  626. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/schedules/__init__.py +0 -0
  627. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/schedules/test_scheduling.py +0 -0
  628. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/services/__init__.py +0 -0
  629. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/services/test_input_state.py +0 -0
  630. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/services/test_processes.py +0 -0
  631. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/services/test_products.py +0 -0
  632. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/services/test_subscription_relations.py +0 -0
  633. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/services/test_subscriptions.py +0 -0
  634. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/services/test_translations.py +0 -0
  635. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/test_db.py +0 -0
  636. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/test_types.py +0 -0
  637. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/test_workflow.py +0 -0
  638. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/utils/__init__.py +0 -0
  639. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/utils/get_subscription_dict.py +0 -0
  640. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/utils/test_datetime.py +0 -0
  641. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/utils/test_errors.py +0 -0
  642. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/utils/test_functional.py +0 -0
  643. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/utils/test_get_updated_properties.py +0 -0
  644. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/utils/test_json.py +0 -0
  645. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/utils/test_search_query.py +0 -0
  646. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/utils/test_state.py +0 -0
  647. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/utils/test_strings.py +0 -0
  648. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/websocket/__init__.py +0 -0
  649. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/websocket/test_broadcast.py +0 -0
  650. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/conftest.py +0 -0
  651. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/shared/__init__.py +0 -0
  652. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/shared/test_validate_subscriptions.py +0 -0
  653. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/tasks/__init__.py +0 -0
  654. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/tasks/test_clean_up_task_log.py +0 -0
  655. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/tasks/test_resume_workflows.py +0 -0
  656. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/tasks/test_validate_product_type.py +0 -0
  657. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/tasks/test_validate_products.py +0 -0
  658. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/test_async_workflow.py +0 -0
  659. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/test_config_db_code.py +0 -0
  660. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/test_generic_workflow_steps.py +0 -0
  661. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/test_lifecycle_status_manager.py +0 -0
  662. {orchestrator_core-4.0.0rc1 → orchestrator_core-4.0.0rc2}/test/unit_tests/workflows/test_modify_note.py +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 4.0.0rc1
2
+ current_version = 4.0.0rc2
3
3
  commit = False
4
4
  tag = False
5
5
  parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(rc(?P<build>\d+))?
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orchestrator-core
3
- Version: 4.0.0rc1
3
+ Version: 4.0.0rc2
4
4
  Summary: This is the orchestrator workflow engine.
5
5
  Requires-Python: >=3.11,<3.14
6
6
  Classifier: Intended Audience :: Information Technology
@@ -204,14 +204,20 @@ Validate workflows run integrity checks on an existing subscription. Checking th
204
204
  ```python
205
205
  params = dict(
206
206
  name="validate_node_enrollment",
207
- target="SYSTEM",
207
+ target="VALIDATE",
208
+ is_task=True,
208
209
  description="Validate Node Enrollment before production",
209
210
  tag="NodeEnrollment",
210
211
  search_phrase="Node Enrollment%",
211
212
  )
212
213
  ```
213
214
 
214
- It uses a `target` of `SYSTEM` - similar to how tasks are defined. That target is more of a free form sort of thing. Same thing with the `name` - that's the name of the actual workflow, and the `tag` is shared by of this set of workflows.
215
+ It uses a `target` of `VALIDATE`. Unlike system tasks, which use the `target` of `SYSTEM` designation, validate
216
+ workflows explicitly use `target="VALIDATE"` to distinguish themselves. This distinction reflects their different
217
+ purposes.
218
+ The `is_task` parameter is set to `True` to indicate that this workflow is a task. Tasks are workflows that are not
219
+ directly associated with a subscription and are typically used for background processing or system maintenance.
220
+ Both `SYSTEM` and `VALIDATE` workflows are considered tasks, but they serve different purposes.
215
221
 
216
222
  Generally the steps raise assertions if a check fails, otherwise return OK to the state:
217
223
 
@@ -1,7 +1,3 @@
1
- ---
2
- hide:
3
- - navigation
4
- ---
5
1
  # 2.0 Migration Guide
6
2
 
7
3
  In this document we'll help you migrate your orchestrator application from orchestrator-core 1.3 to 2.0.
@@ -1,7 +1,3 @@
1
- ---
2
- hide:
3
- - navigation
4
- ---
5
1
  # 3.0 Migration Guide
6
2
 
7
3
  In this document we describe the steps that should be taken to migrate from `orchestrator-core` v2 to v3.
@@ -0,0 +1,69 @@
1
+ # 4.0 Migration Guide
2
+
3
+ In this document we describe the steps that should be taken to migrate from `orchestrator-core` v3 to v4.
4
+
5
+ ## About 4.0
6
+
7
+ ### Removed caching of domain models
8
+
9
+ In this release we have removed the caching of domain models. Domain models will always be loaded from the database.
10
+
11
+ ### Added Target.VALIDATE
12
+
13
+ In this release, a new workflow target, `VALIDATE`, has been added
14
+ for [validation workflows](../architecture/application/workflow.md#validate).
15
+ Previously, the `SYSTEM` target was used for validation workflows, which implied that they were expected to run in a
16
+ system context. However, this was not appropriate for all validation workflows.
17
+ To address this, the new `VALIDATE` target has been introduced specifically for validation workflows. The `SYSTEM`
18
+ target is now reserved exclusively for system workflows.
19
+
20
+ The change of the `SYSTEM` target to `VALIDATE` is a breaking change, as it will break any workflows that are using the
21
+ `SYSTEM` target for validation workflows. You will need to update your workflows to use the `VALIDATE` target instead.
22
+
23
+ In the Steps section below we describe how to update your workflows to use the new `VALIDATE` target.
24
+
25
+ ## Steps
26
+
27
+ To use 4.0.0, all workflows must have run to completion. The `cache_domain_models` step no longer is part of the codebase
28
+ therefore `in flight` workflows will fail.
29
+
30
+ After running the migration `(2025-05-08_cdf8758831d4_add_is_task_to_workflow.py)`, the workflow table should look like this:
31
+
32
+ ```sql
33
+ | workflow_id | name | target | is_task | description | created_at | deleted_at |
34
+ |--------------------------------------|----------------------------|--------|---------|-------------------------------------------------------------------------|-----------------------------------|------------|
35
+ | ded79954-f16e-422b-a204-7770a59757e8 | modify_note | MODIFY | FALSE | Modify Note | 2025-05-01 09:57:28.033504 +00:00 | <null> |
36
+ | ca6a76ff-dd4e-4f66-9fb0-cee1878f0d20 | task_clean_up_tasks | SYSTEM | FALSE | Clean up old tasks | 2025-05-01 09:57:28.033504 +00:00 | <null> |
37
+ | 40058c3d-0c95-47f4-a75f-93719299c5be | task_resume_workflows | SYSTEM | FALSE | Resume all workflows that are stuck on tasks with the status 'waiting' | 2025-05-01 09:57:28.033504 +00:00 | <null> |
38
+ | 33b5520e-85d4-4ca1-8713-d26f7de5b7a5 | task_validate_products | SYSTEM | FALSE | Validate products | 2025-05-01 09:57:28.033504 +00:00 | <null> |
39
+ | 94d4889e-6bb6-4724-a9d2-f21696fe6f43 | task_validate_product_type | SYSTEM | FALSE | Validate all subscriptions of Product Type | 2025-05-01 09:57:28.033504 +00:00 | <null> |
40
+ | 0c4f3b8d-2a1e-4b5f-9a7c-6d8e0f1b2c3d | validate_some_thing | SYSTEM | FALSE | Validate The thing | 2025-05-01 09:57:28.033504 +00:00 | <null> |
41
+ | f4b0a2c1-5d3e-4c8f-9b6d-7a2e5f3b8c4e | validate_another_thing | SYSTEM | FALSE | Validate Another thing | 2025-05-01 09:57:28.033504 +00:00 | <null> |
42
+ ```
43
+
44
+ The `target` in this table is no longer valid for the `validate_some_thing` and `validate_another_thing`
45
+ workflows. You will need to update the `target` to `VALIDATE` for these workflows. You will also need to update the
46
+ is_task column to `TRUE` for all targets that are `SYSTEM` or `VALIDATE`. This is because the `is_task` column is used to
47
+ determine if a workflow is a task or not. If the `is_task` column is set to `FALSE`, the workflow will not be run as a task.
48
+ Tasks are `SYSTEM` or `VALIDATE` workflows that are run in the context of a system.
49
+
50
+ Example on how to update the `target` and `is_task` for all workflows that start with `validate_`:
51
+
52
+ ```sql
53
+ UPDATE workflow
54
+ SET target = 'VALIDATE', is_task = TRUE
55
+ WHERE name LIKE 'validate_%';
56
+ ```
57
+
58
+ Example on how to update the `target` and `is_task` for all workflows that are `SYSTEM` or `VALIDATE`:
59
+
60
+ ```sql
61
+ UPDATE workflow
62
+ SET is_task = TRUE
63
+ WHERE target IN ('SYSTEM', 'VALIDATE');
64
+ ```
65
+
66
+ This will update the `target` for all workflows that are `SYSTEM` or `VALIDATE` and set the `is_task` column to `TRUE`.
67
+
68
+ This is a breaking change, so you will need to test your workflows after making this change to ensure that they are
69
+ working as expected.
@@ -13,7 +13,7 @@
13
13
 
14
14
  """This is the orchestrator workflow engine."""
15
15
 
16
- __version__ = "4.0.0rc1"
16
+ __version__ = "4.0.0rc2"
17
17
 
18
18
  from orchestrator.app import OrchestratorCore
19
19
  from orchestrator.settings import app_settings
@@ -63,24 +63,28 @@ new_workflows = [
63
63
  {
64
64
  "name": "create_{{ product.variable }}",
65
65
  "target": Target.CREATE,
66
+ "is_task": False,
66
67
  "description": "Create {{ product.name }}",
67
68
  "product_type": "{{ product.type }}",
68
69
  },
69
70
  {
70
71
  "name": "modify_{{ product.variable }}",
71
72
  "target": Target.MODIFY,
73
+ "is_task": False,
72
74
  "description": "Modify {{ product.name }}",
73
75
  "product_type": "{{ product.type }}",
74
76
  },
75
77
  {
76
78
  "name": "terminate_{{ product.variable }}",
77
79
  "target": Target.TERMINATE,
80
+ "is_task": False,
78
81
  "description": "Terminate {{ product.name }}",
79
82
  "product_type": "{{ product.type }}",
80
83
  },
81
84
  {
82
85
  "name": "validate_{{ product.variable }}",
83
- "target": Target.SYSTEM,
86
+ "target": Target.VALIDATE,
87
+ "is_task": True,
84
88
  "description": "Validate {{ product.name }}",
85
89
  "product_type": "{{ product.type }}",
86
90
  },
@@ -150,22 +150,22 @@ def create_tasks_migration_wizard() -> tuple[list[dict], list[dict]]:
150
150
  - list of task items to add in the migration
151
151
  - list of task items to delete in the migration
152
152
  """
153
- database_tasks = {
154
- task.name: task for task in list(db.session.scalars(select(WorkflowTable))) if task.target == Target.SYSTEM
155
- }
153
+ database_tasks = {task.name: task for task in list(db.session.scalars(select(WorkflowTable))) if task.is_task}
156
154
  registered_wf_instances = {
157
155
  task: cast(Workflow, get_workflow(task)) for task in orchestrator.workflows.ALL_WORKFLOWS.keys()
158
156
  }
159
157
 
158
+ is_task = [Target.SYSTEM, Target.VALIDATE]
159
+
160
160
  registered_tasks = dict(
161
161
  filter(
162
- lambda task: task[1].target == Target.SYSTEM and task[0] in database_tasks.keys(),
162
+ lambda task: task[1].target in is_task and task[0] in database_tasks.keys(),
163
163
  registered_wf_instances.items(),
164
164
  )
165
165
  )
166
166
  available_tasks = dict(
167
167
  filter(
168
- lambda task: task[1].target == Target.SYSTEM and task[0] not in database_tasks.keys(),
168
+ lambda task: task[1].target in is_task and task[0] not in database_tasks.keys(),
169
169
  registered_wf_instances.items(),
170
170
  )
171
171
  )
@@ -11,7 +11,6 @@ import orchestrator.workflows
11
11
  from orchestrator.cli.helpers.input_helpers import _enumerate_menu_keys, _prompt_user_menu, get_user_input
12
12
  from orchestrator.cli.helpers.print_helpers import COLOR, noqa_print, print_fmt, str_fmt
13
13
  from orchestrator.db import ProductTable, WorkflowTable, db
14
- from orchestrator.targets import Target
15
14
  from orchestrator.workflows import LazyWorkflowInstance, get_workflow
16
15
 
17
16
  # Workflows are registered via migrations with product type. For every product with the given product_type, there will be an entry in products_workflows.
@@ -183,7 +182,7 @@ def create_workflows_migration_wizard() -> tuple[list[dict], list[dict]]:
183
182
  """
184
183
  database_workflows = list(db.session.scalars(select(WorkflowTable)))
185
184
  registered_workflows = orchestrator.workflows.ALL_WORKFLOWS
186
- system_workflow_names = {wf.name for wf in database_workflows if wf.target == Target.SYSTEM}
185
+ system_workflow_names = {wf.name for wf in database_workflows if wf.is_task}
187
186
  registered_non_system_workflows = {k: v for k, v in registered_workflows.items() if k not in system_workflow_names}
188
187
 
189
188
  unregistered_workflows = [wf for wf in database_workflows if wf.name not in registered_workflows.keys()]
@@ -412,6 +412,8 @@ class WorkflowTable(BaseModel):
412
412
  )
413
413
  processes = relationship("ProcessTable", cascade="all, delete-orphan", back_populates="workflow")
414
414
 
415
+ is_task = mapped_column(Boolean, nullable=False, server_default=text("false"))
416
+
415
417
  @staticmethod
416
418
  def select() -> Select:
417
419
  return (
@@ -135,18 +135,21 @@ def create_workflow(conn: sa.engine.Connection, workflow: dict) -> None:
135
135
  >>> workflow = {
136
136
  "name": "workflow_name",
137
137
  "target": "SYSTEM",
138
+ "is_task": False,
138
139
  "description": "workflow description",
139
140
  "product_type": "product_type",
140
141
  }
141
142
  >>> create_workflow(conn, workflow)
142
143
  """
144
+ if not workflow.get("is_task", False):
145
+ workflow["is_task"] = False
143
146
 
144
147
  conn.execute(
145
148
  sa.text(
146
149
  """
147
150
  WITH new_workflow AS (
148
- INSERT INTO workflows(name, target, description)
149
- VALUES (:name, :target, :description)
151
+ INSERT INTO workflows(name, target, is_task, description)
152
+ VALUES (:name, :target, :is_task, :description)
150
153
  ON CONFLICT DO NOTHING
151
154
  RETURNING workflow_id)
152
155
  INSERT
@@ -184,8 +187,8 @@ def create_task(conn: sa.engine.Connection, task: dict) -> None:
184
187
  conn.execute(
185
188
  sa.text(
186
189
  """
187
- INSERT INTO workflows(name, target, description)
188
- VALUES (:name, 'SYSTEM', :description)
190
+ INSERT INTO workflows(name, target, is_task, description)
191
+ VALUES (:name, 'SYSTEM', TRUE, :description)
189
192
  ON CONFLICT DO NOTHING
190
193
  RETURNING workflow_id
191
194
  """
@@ -206,6 +209,7 @@ def create_workflows(conn: sa.engine.Connection, new: dict) -> None:
206
209
  "workflow_name": {
207
210
  "workflow_id": "f2702074-3203-454c-b298-6dfa7675423d",
208
211
  "target": "CREATE",
212
+ "is_task": False,
209
213
  "description": "Workflow description",
210
214
  "tag": "ProductBlockName1",
211
215
  "search_phrase": "Search Phrase%",
@@ -214,12 +218,16 @@ def create_workflows(conn: sa.engine.Connection, new: dict) -> None:
214
218
  """
215
219
  for name, workflow in new.items():
216
220
  workflow["name"] = name
221
+
222
+ if not workflow.get("is_task", False):
223
+ workflow["is_task"] = False
224
+
217
225
  conn.execute(
218
226
  sa.text(
219
227
  """
220
228
  WITH new_workflow AS (
221
- INSERT INTO workflows(workflow_id, name, target, description)
222
- VALUES (:workflow_id, :name, :target, :description)
229
+ INSERT INTO workflows(workflow_id, name, target, is_task, description)
230
+ VALUES (:workflow_id, :name, :target, :is_task, :description)
223
231
  RETURNING workflow_id)
224
232
  INSERT
225
233
  INTO products_workflows (product_id, workflow_id)
@@ -14,7 +14,7 @@ logger = get_logger(__name__)
14
14
 
15
15
  # revision identifiers, used by Alembic.
16
16
  revision = "68d14db1b8da"
17
- down_revision = "bac6be6f2b4f"
17
+ down_revision = "fc5c993a4b4a"
18
18
  branch_labels = None
19
19
  depends_on = None
20
20
 
@@ -0,0 +1,28 @@
1
+ """Add is_task to workflow.
2
+
3
+ Revision ID: 161918133bec
4
+ Revises: 68d14db1b8da
5
+ Create Date: 2025-05-08 11:25:51.966410
6
+
7
+ """
8
+
9
+ import sqlalchemy as sa
10
+ from alembic import op
11
+
12
+ # revision identifiers, used by Alembic.
13
+ revision = "161918133bec"
14
+ down_revision = "68d14db1b8da"
15
+ branch_labels = None
16
+ depends_on = None
17
+
18
+
19
+ def upgrade() -> None:
20
+ # ### commands auto generated by Alembic - please adjust! ###
21
+ op.add_column("workflows", sa.Column("is_task", sa.Boolean(), server_default=sa.text("false"), nullable=False))
22
+ # ### end Alembic commands ###
23
+
24
+
25
+ def downgrade() -> None:
26
+ # ### commands auto generated by Alembic - please adjust! ###
27
+ op.drop_column("workflows", "is_task")
28
+ # ### end Alembic commands ###
@@ -22,7 +22,7 @@ from orchestrator.services.subscriptions import (
22
22
  get_subscriptions_on_product_table_in_sync,
23
23
  )
24
24
  from orchestrator.services.workflows import (
25
- get_system_product_workflows_for_subscription,
25
+ get_validation_product_workflows_for_subscription,
26
26
  start_validation_workflow_for_workflows,
27
27
  )
28
28
  from orchestrator.settings import app_settings
@@ -42,9 +42,9 @@ def validate_subscriptions() -> None:
42
42
  subscriptions = get_subscriptions_on_product_table_in_sync()
43
43
 
44
44
  for subscription in subscriptions:
45
- system_product_workflows = get_system_product_workflows_for_subscription(subscription)
45
+ validation_product_workflows = get_validation_product_workflows_for_subscription(subscription)
46
46
 
47
- if not system_product_workflows:
47
+ if not validation_product_workflows:
48
48
  logger.warning(
49
49
  "SubscriptionTable has no validation workflow",
50
50
  subscription=subscription,
@@ -52,4 +52,4 @@ def validate_subscriptions() -> None:
52
52
  )
53
53
  break
54
54
 
55
- start_validation_workflow_for_workflows(subscription=subscription, workflows=system_product_workflows)
55
+ start_validation_workflow_for_workflows(subscription=subscription, workflows=validation_product_workflows)
@@ -24,6 +24,7 @@ from orchestrator.targets import Target
24
24
  class WorkflowBaseSchema(OrchestratorBaseModel):
25
25
  name: str
26
26
  target: Target
27
+ is_task: bool = False
27
28
  description: str | None = None
28
29
  created_at: datetime | None = None
29
30
 
@@ -24,7 +24,7 @@ from orchestrator.api.error_handling import raise_status
24
24
  from orchestrator.db import ProcessTable, db
25
25
  from orchestrator.services.input_state import store_input_state
26
26
  from orchestrator.services.processes import create_process, delete_process
27
- from orchestrator.targets import Target
27
+ from orchestrator.services.workflows import get_workflow_by_name
28
28
  from orchestrator.workflows import get_workflow
29
29
  from pydantic_forms.types import State
30
30
 
@@ -51,7 +51,11 @@ def _celery_start_process(
51
51
  if not workflow:
52
52
  raise_status(HTTPStatus.NOT_FOUND, "Workflow does not exist")
53
53
 
54
- task_name = NEW_TASK if workflow.target == Target.SYSTEM else NEW_WORKFLOW
54
+ wf_table = get_workflow_by_name(workflow.name)
55
+ if not wf_table:
56
+ raise_status(HTTPStatus.NOT_FOUND, "Workflow in Database does not exist")
57
+
58
+ task_name = NEW_TASK if wf_table.is_task else NEW_WORKFLOW
55
59
  trigger_task = get_celery_task(task_name)
56
60
  pstat = create_process(workflow_key, user_inputs, user)
57
61
  try:
@@ -80,7 +84,11 @@ def _celery_resume_process(
80
84
  last_process_status = process.last_status
81
85
  workflow = pstat.workflow
82
86
 
83
- task_name = RESUME_TASK if workflow.target == Target.SYSTEM else RESUME_WORKFLOW
87
+ wf_table = get_workflow_by_name(workflow.name)
88
+ if not workflow or not wf_table:
89
+ raise_status(HTTPStatus.NOT_FOUND, "Workflow does not exist")
90
+
91
+ task_name = RESUME_TASK if wf_table.is_task else RESUME_WORKFLOW
84
92
  trigger_task = get_celery_task(task_name)
85
93
 
86
94
  user_inputs = user_inputs or [{}]
@@ -34,7 +34,6 @@ from orchestrator.services.input_state import store_input_state
34
34
  from orchestrator.services.settings import get_engine_settings_for_update
35
35
  from orchestrator.services.workflows import get_workflow_by_name
36
36
  from orchestrator.settings import ExecutorType, app_settings
37
- from orchestrator.targets import Target
38
37
  from orchestrator.types import BroadcastFunc
39
38
  from orchestrator.utils.datetime import nowtz
40
39
  from orchestrator.utils.errors import error_state_to_dict
@@ -108,7 +107,7 @@ def _db_create_process(stat: ProcessStat) -> None:
108
107
  workflow_id=wf_table.workflow_id,
109
108
  last_status=ProcessStatus.CREATED,
110
109
  created_by=stat.current_user,
111
- is_task=stat.workflow.target == Target.SYSTEM,
110
+ is_task=wf_table.is_task,
112
111
  )
113
112
  db.session.add(p)
114
113
  db.session.commit()
@@ -505,6 +505,7 @@ TARGET_DEFAULT_USABLE_MAP: dict[Target, list[str]] = {
505
505
  Target.MODIFY: ["active"],
506
506
  Target.TERMINATE: ["active", "provisioning"],
507
507
  Target.SYSTEM: ["active"],
508
+ Target.VALIDATE: ["active"],
508
509
  }
509
510
 
510
511
  WF_USABLE_MAP: dict[str, list[str]] = {}
@@ -530,6 +531,7 @@ def subscription_workflows(subscription: SubscriptionTable) -> dict[str, Any]:
530
531
  ... "modify": [],
531
532
  ... "terminate": [],
532
533
  ... "system": [],
534
+ ... "validate": [],
533
535
  ... }
534
536
 
535
537
  """
@@ -549,9 +551,10 @@ def subscription_workflows(subscription: SubscriptionTable) -> dict[str, Any]:
549
551
  "modify": [],
550
552
  "terminate": [],
551
553
  "system": [],
554
+ "validate": [],
552
555
  }
553
556
  for workflow in subscription.product.workflows:
554
- if workflow.name in WF_USABLE_WHILE_OUT_OF_SYNC or workflow.target == Target.SYSTEM:
557
+ if workflow.name in WF_USABLE_WHILE_OUT_OF_SYNC or workflow.is_task:
555
558
  # validations and modify note are also possible with: not in sync or locked relations
556
559
  workflow_json = {"name": workflow.name, "description": workflow.description}
557
560
  else:
@@ -39,6 +39,7 @@ def _to_workflow_schema(workflow: WorkflowTable, include_steps: bool = False) ->
39
39
  workflow_id=workflow.workflow_id,
40
40
  name=workflow.name,
41
41
  target=workflow.target,
42
+ is_task=workflow.is_task,
42
43
  description=workflow.description,
43
44
  created_at=workflow.created_at,
44
45
  **extra_kwargs,
@@ -63,10 +64,10 @@ def get_workflow_by_name(workflow_name: str) -> WorkflowTable | None:
63
64
  return db.session.scalar(select(WorkflowTable).where(WorkflowTable.name == workflow_name))
64
65
 
65
66
 
66
- def get_system_product_workflows_for_subscription(
67
+ def get_validation_product_workflows_for_subscription(
67
68
  subscription: SubscriptionTable,
68
69
  ) -> list:
69
- return [workflow.name for workflow in subscription.product.workflows if workflow.target == Target.SYSTEM]
70
+ return [workflow.name for workflow in subscription.product.workflows if workflow.target == Target.VALIDATE]
70
71
 
71
72
 
72
73
  def start_validation_workflow_for_workflows(
@@ -78,9 +79,12 @@ def start_validation_workflow_for_workflows(
78
79
  result = []
79
80
 
80
81
  for workflow_name in workflows:
81
- default = TARGET_DEFAULT_USABLE_MAP[Target.SYSTEM]
82
- usable_when = WF_USABLE_MAP.get(workflow_name, default)
82
+ target_system = TARGET_DEFAULT_USABLE_MAP[Target.SYSTEM]
83
+ system_usable_when = WF_USABLE_MAP.get(workflow_name, target_system)
84
+ target_validate = TARGET_DEFAULT_USABLE_MAP[Target.VALIDATE]
85
+ validate_usable_when = WF_USABLE_MAP.get(workflow_name, target_validate)
83
86
 
87
+ usable_when = system_usable_when + validate_usable_when
84
88
  if subscription.status in usable_when and (
85
89
  product_type_filter is None or subscription.product.product_type == product_type_filter
86
90
  ):
@@ -22,3 +22,4 @@ class Target(strEnum):
22
22
  MODIFY = "MODIFY"
23
23
  TERMINATE = "TERMINATE"
24
24
  SYSTEM = "SYSTEM"
25
+ VALIDATE = "VALIDATE"
@@ -22,7 +22,7 @@ from orchestrator.services.subscriptions import (
22
22
  get_subscriptions_on_product_table_in_sync,
23
23
  )
24
24
  from orchestrator.services.workflows import (
25
- get_system_product_workflows_for_subscription,
25
+ get_validation_product_workflows_for_subscription,
26
26
  start_validation_workflow_for_workflows,
27
27
  )
28
28
  from orchestrator.targets import Target
@@ -62,7 +62,7 @@ def validate_product_type(product_type: str) -> State:
62
62
  subscriptions = get_subscriptions_on_product_table_in_sync()
63
63
 
64
64
  for subscription in subscriptions:
65
- system_product_workflows = get_system_product_workflows_for_subscription(
65
+ system_product_workflows = get_validation_product_workflows_for_subscription(
66
66
  subscription=subscription,
67
67
  )
68
68
 
@@ -105,13 +105,10 @@ def check_that_products_have_create_modify_and_terminate_workflows() -> State:
105
105
  product_data = get_products(filters=[ProductTable.status == "active"])
106
106
 
107
107
  workflows_not_complete: list = []
108
+ targets = ["CREATE", "TERMINATE", "MODIFY", "VALIDATE"]
108
109
  for product in product_data:
109
- workflows = {
110
- c.target
111
- for c in product.workflows
112
- if c.target in ["CREATE", "TERMINATE", "MODIFY", "SYSTEM"] and c.name != "modify_note"
113
- }
114
- if len(workflows) < 4:
110
+ workflows = {c.target for c in product.workflows if c.target in targets and c.name != "modify_note"}
111
+ if len(workflows) < len(targets):
115
112
  workflows_not_complete.append(product.name)
116
113
 
117
114
  # Do not raise an error but only report it in the `State` to allow exceptions.
@@ -344,7 +344,7 @@ def validate_workflow(description: str) -> Callable[[Callable[[], StepList]], Wo
344
344
  def _validate_workflow(f: Callable[[], StepList]) -> Workflow:
345
345
  steplist = init >> store_process_subscription(Target.SYSTEM) >> unsync_unchecked >> f() >> resync >> done
346
346
 
347
- return make_workflow(f, description, validate_initial_input_form_generator, Target.SYSTEM, steplist)
347
+ return make_workflow(f, description, validate_initial_input_form_generator, Target.VALIDATE, steplist)
348
348
 
349
349
  return _validate_workflow
350
350
 
@@ -49,24 +49,28 @@ new_workflows = [
49
49
  {
50
50
  "name": "create_example2",
51
51
  "target": Target.CREATE,
52
+ "is_task": False,
52
53
  "description": "Create example2",
53
54
  "product_type": "Example2",
54
55
  },
55
56
  {
56
57
  "name": "modify_example2",
57
58
  "target": Target.MODIFY,
59
+ "is_task": False,
58
60
  "description": "Modify example2",
59
61
  "product_type": "Example2",
60
62
  },
61
63
  {
62
64
  "name": "terminate_example2",
63
65
  "target": Target.TERMINATE,
66
+ "is_task": False,
64
67
  "description": "Terminate example2",
65
68
  "product_type": "Example2",
66
69
  },
67
70
  {
68
71
  "name": "validate_example2",
69
- "target": Target.SYSTEM,
72
+ "target": Target.VALIDATE,
73
+ "is_task": True,
70
74
  "description": "Validate example2",
71
75
  "product_type": "Example2",
72
76
  },
@@ -91,24 +91,28 @@ new_workflows = [
91
91
  {
92
92
  "name": "create_example1",
93
93
  "target": Target.CREATE,
94
+ "is_task": False,
94
95
  "description": "Create example1",
95
96
  "product_type": "Example1",
96
97
  },
97
98
  {
98
99
  "name": "modify_example1",
99
100
  "target": Target.MODIFY,
101
+ "is_task": False,
100
102
  "description": "Modify example1",
101
103
  "product_type": "Example1",
102
104
  },
103
105
  {
104
106
  "name": "terminate_example1",
105
107
  "target": Target.TERMINATE,
108
+ "is_task": False,
106
109
  "description": "Terminate example1",
107
110
  "product_type": "Example1",
108
111
  },
109
112
  {
110
113
  "name": "validate_example1",
111
- "target": Target.SYSTEM,
114
+ "target": Target.VALIDATE,
115
+ "is_task": True,
112
116
  "description": "Validate example1",
113
117
  "product_type": "Example1",
114
118
  },
@@ -61,24 +61,28 @@ new_workflows = [
61
61
  {
62
62
  "name": "create_example4",
63
63
  "target": Target.CREATE,
64
+ "is_task": False,
64
65
  "description": "Create example4",
65
66
  "product_type": "Example4",
66
67
  },
67
68
  {
68
69
  "name": "modify_example4",
69
70
  "target": Target.MODIFY,
71
+ "is_task": False,
70
72
  "description": "Modify example4",
71
73
  "product_type": "Example4",
72
74
  },
73
75
  {
74
76
  "name": "terminate_example4",
75
77
  "target": Target.TERMINATE,
78
+ "is_task": False,
76
79
  "description": "Terminate example4",
77
80
  "product_type": "Example4",
78
81
  },
79
82
  {
80
83
  "name": "validate_example4",
81
- "target": Target.SYSTEM,
84
+ "target": Target.VALIDATE,
85
+ "is_task": True,
82
86
  "description": "Validate example4",
83
87
  "product_type": "Example4",
84
88
  },
@@ -12,6 +12,7 @@ import structlog
12
12
  from orchestrator.db import ProcessTable, WorkflowTable, db
13
13
  from orchestrator.services.input_state import store_input_state
14
14
  from orchestrator.services.processes import StateMerger, _db_create_process
15
+ from orchestrator.targets import Target
15
16
  from orchestrator.utils.json import json_dumps, json_loads
16
17
  from orchestrator.workflow import Process as WFProcess
17
18
  from orchestrator.workflow import ProcessStat, Step, Success, Workflow, runwf
@@ -24,7 +25,8 @@ logger = structlog.get_logger(__name__)
24
25
 
25
26
 
26
27
  def store_workflow(wf: Workflow, name: str | None = None) -> WorkflowTable:
27
- wf_table = WorkflowTable(name=name or wf.name, target=wf.target, description=wf.description)
28
+ is_task = True if wf.target in [Target.VALIDATE, Target.SYSTEM] else False
29
+ wf_table = WorkflowTable(name=name or wf.name, target=wf.target, is_task=is_task, description=wf.description)
28
30
  db.session.add(wf_table)
29
31
  db.session.commit()
30
32
  return wf_table