orchestrator-core 3.1.1__tar.gz → 3.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (647) hide show
  1. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.bumpversion.cfg +1 -1
  2. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/run-codspeed-tests.yml +1 -1
  3. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/run-linting-tests.yml +2 -2
  4. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/run-unit-tests.yml +3 -1
  5. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.pre-commit-config.yaml +3 -4
  6. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/PKG-INFO +10 -10
  7. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/getting-started/versions.md +1 -1
  8. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/app/scaling.md +106 -0
  9. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/workflows/callbacks.md +8 -0
  10. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/macos.md +3 -3
  11. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/__init__.py +2 -2
  12. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/api.py +1 -1
  13. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/processes.py +29 -9
  14. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/settings.py +1 -1
  15. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/subscriptions.py +1 -1
  16. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/app.py +1 -1
  17. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/database.py +1 -1
  18. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/migration.py +2 -5
  19. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/migrate_tasks.py +13 -0
  20. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/config/assignee.py +1 -1
  21. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/__init__.py +2 -0
  22. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/models.py +6 -4
  23. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/populator.py +1 -1
  24. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/domain/__init__.py +2 -3
  25. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/domain/base.py +74 -5
  26. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/domain/lifecycle.py +1 -1
  27. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schema.py +1 -1
  28. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/types.py +1 -1
  29. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/get_subscription_product_blocks.py +13 -0
  30. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/env.py +15 -2
  31. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/helpers.py +6 -6
  32. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +1 -1
  33. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +1 -1
  34. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +1 -1
  35. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/engine_settings.py +1 -1
  36. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/subscription.py +1 -1
  37. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/security.py +1 -1
  38. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/celery.py +1 -1
  39. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/processes.py +99 -18
  40. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/products.py +1 -1
  41. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/subscriptions.py +1 -1
  42. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/tasks.py +1 -1
  43. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/settings.py +2 -23
  44. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/targets.py +1 -1
  45. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/types.py +1 -1
  46. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/errors.py +1 -1
  47. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/state.py +74 -54
  48. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/websocket/websocket_manager.py +1 -1
  49. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflow.py +20 -4
  50. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/modify_note.py +1 -1
  51. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/steps.py +1 -1
  52. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/tasks/cleanup_tasks_log.py +1 -1
  53. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/tasks/resume_workflows.py +1 -1
  54. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/tasks/validate_product_type.py +1 -1
  55. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/tasks/validate_products.py +1 -1
  56. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/utils.py +40 -5
  57. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/pyproject.toml +9 -9
  58. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/test_product_populator.py +1 -1
  59. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/workflows/create_test_product.py +1 -1
  60. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_processes.py +14 -0
  61. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/shared.py +1 -1
  62. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/conftest.py +9 -9
  63. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_base.py +154 -2
  64. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/forms/test_display_subscription.py +5 -1
  65. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_subscriptions.py +1 -1
  66. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/helpers.py +1 -1
  67. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_input_state.py +1 -2
  68. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_state.py +190 -1
  69. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/test_async_workflow.py +116 -0
  70. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/test_generic_workflow_steps.py +1 -1
  71. orchestrator_core-3.1.2/test/unit_tests/workflows/test_lifecycle_status_manager.py +64 -0
  72. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.coveragerc +0 -0
  73. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  74. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  75. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/dependabot.yml +0 -0
  76. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/README.md +0 -0
  77. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/build-push-container.yml +0 -0
  78. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/changelog.yml +0 -0
  79. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/codeql-analysis.yml +0 -0
  80. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/gh-pages.yml +0 -0
  81. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/issues.yml +0 -0
  82. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/publish-package.yml +0 -0
  83. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.github/workflows/scheduled-build.yml +0 -0
  84. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.gitignore +0 -0
  85. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/.stignore +0 -0
  86. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/CHANGELOG.md +0 -0
  87. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/Dockerfile +0 -0
  88. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/LICENSE +0 -0
  89. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/NOTICE +0 -0
  90. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/README.md +0 -0
  91. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/codecov.yml +0 -0
  92. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/application/domainmodels.md +0 -0
  93. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/application/forms-frontend.md +0 -0
  94. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/application/tasks.md +0 -0
  95. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/application/workflow.md +0 -0
  96. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/framework.md +0 -0
  97. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/img/base-orchestrator-setup.png +0 -0
  98. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/img/custom-orchestrator-setup.png +0 -0
  99. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/orchestration/img/Custom-orchestrator-ui-using-override.png +0 -0
  100. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/orchestration/img/Standard-orchestrator-ui.png +0 -0
  101. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/orchestration/orchestrator-ui.md +0 -0
  102. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/orchestration/philosophy.md +0 -0
  103. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/backfilling.md +0 -0
  104. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/context.md +0 -0
  105. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/imports.md +0 -0
  106. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/introduction.md +0 -0
  107. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/ip_static.md +0 -0
  108. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/ip_static.png +0 -0
  109. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/l2_point_to_point.md +0 -0
  110. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/l2_point_to_point.png +0 -0
  111. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/l2_vpn.md +0 -0
  112. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/l2_vpn.png +0 -0
  113. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/modelling.md +0 -0
  114. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/node.md +0 -0
  115. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/node.png +0 -0
  116. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/port.md +0 -0
  117. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/port.png +0 -0
  118. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/product_block_graph.md +0 -0
  119. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/product_block_graph.png +0 -0
  120. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/standards.md +0 -0
  121. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/product_modelling/terminology.md +0 -0
  122. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/architecture/tldr.md +0 -0
  123. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/contributing/development.md +0 -0
  124. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/contributing/guidelines.md +0 -0
  125. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/contributing/testing.md +0 -0
  126. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/css/custom.css +0 -0
  127. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/css/style.css +0 -0
  128. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/css/termynal.css +0 -0
  129. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/getting-started/base.md +0 -0
  130. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/getting-started/docker.md +0 -0
  131. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/getting-started/orchestration-ui.md +0 -0
  132. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/getting-started/prepare-source-folder.md +0 -0
  133. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/img/WFO-Emblem-White.png +0 -0
  134. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/img/favicon.ico +0 -0
  135. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/index.md +0 -0
  136. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/js/custom.js +0 -0
  137. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/js/termynal.js +0 -0
  138. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/migration-guide/2.0.md +0 -0
  139. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/migration-guide/3.0.md +0 -0
  140. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/api.md +0 -0
  141. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/app/app.md +0 -0
  142. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/auth-backend-and-frontend.md +0 -0
  143. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/cli.md +0 -0
  144. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/database.md +0 -0
  145. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/generator.md +0 -0
  146. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/instantiating.md +0 -0
  147. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/model_attributes.md +0 -0
  148. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/overview.md +0 -0
  149. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/product_blocks.md +0 -0
  150. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/product_types.md +0 -0
  151. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/properties.md +0 -0
  152. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/pydantic_hooks.md +0 -0
  153. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/type_casting.md +0 -0
  154. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/union_types.md +0 -0
  155. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/domain_models/validation.md +0 -0
  156. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/forms.md +0 -0
  157. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/graphql.md +0 -0
  158. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/python.md +0 -0
  159. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/search.md +0 -0
  160. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/search_overview.png +0 -0
  161. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/serialization.md +0 -0
  162. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/tasks.md +0 -0
  163. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/tests.md +0 -0
  164. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/tldr.md +0 -0
  165. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/websockets.md +0 -0
  166. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/workflows/workflow-lifecycles.md +0 -0
  167. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/reference-docs/workflows/workflow-steps.md +0 -0
  168. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/bootstrap.md +0 -0
  169. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/create-your-own.md +0 -0
  170. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/docker-installation.md +0 -0
  171. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/domain-models.md +0 -0
  172. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/execute-workflows.md +0 -0
  173. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/generator.md +0 -0
  174. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/l2_point_to_point.png +0 -0
  175. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/node-create.md +0 -0
  176. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/node-modify.md +0 -0
  177. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/node-terminate.md +0 -0
  178. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/node-validate.md +0 -0
  179. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/overview.md +0 -0
  180. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/scenario.md +0 -0
  181. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/workflow-basics.md +0 -0
  182. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/advanced/workflow-introduction.md +0 -0
  183. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/create-user-group.md +0 -0
  184. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/create-user.md +0 -0
  185. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/database-migration.md +0 -0
  186. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/debian.md +0 -0
  187. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/docker.md +0 -0
  188. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/domain-models.md +0 -0
  189. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/explore.md +0 -0
  190. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/input-forms.md +0 -0
  191. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/modify-user-group.md +0 -0
  192. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/modify-user.md +0 -0
  193. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/register-workflows.md +0 -0
  194. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/start-applications.md +0 -0
  195. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/terminate-user-group.md +0 -0
  196. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/terminate-user.md +0 -0
  197. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/workflow-introduction.md +0 -0
  198. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/beginner/workshop-overview.md +0 -0
  199. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/Software-topology.drawio.png +0 -0
  200. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/clab_topology.png +0 -0
  201. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/metadata_products.png +0 -0
  202. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/netbox_devices_active.png +0 -0
  203. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/subscriptions.png +0 -0
  204. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/docs/workshops/images/topology.drawio.png +0 -0
  205. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/includes/abbreviations.md +0 -0
  206. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/mkdocs.yml +0 -0
  207. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/nitpick-style.toml +0 -0
  208. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/__init__.py +0 -0
  209. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/__init__.py +0 -0
  210. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
  211. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/health.py +0 -0
  212. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
  213. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/products.py +0 -0
  214. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
  215. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
  216. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
  217. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/user.py +0 -0
  218. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
  219. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
  220. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/error_handling.py +0 -0
  221. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/helpers.py +0 -0
  222. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/api/models.py +0 -0
  223. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/__init__.py +0 -0
  224. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
  225. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
  226. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
  227. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
  228. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
  229. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
  230. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
  231. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generate.py +0 -0
  232. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/__init__.py +0 -0
  233. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/README +0 -0
  234. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
  235. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
  236. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
  237. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
  238. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
  239. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
  240. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
  241. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
  242. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
  243. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/__init__.py +0 -0
  244. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/enums.py +0 -0
  245. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/helpers.py +0 -0
  246. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/product.py +0 -0
  247. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/product_block.py +0 -0
  248. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/settings.py +0 -0
  249. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/translations.py +0 -0
  250. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/unittest.py +0 -0
  251. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/validations.py +0 -0
  252. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/generator/workflow.py +0 -0
  253. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
  254. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
  255. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
  256. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
  257. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
  258. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
  259. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
  260. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
  261. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
  262. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
  263. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
  264. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
  265. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/enums.j2 +0 -0
  266. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
  267. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
  268. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/macros.j2 +0 -0
  269. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
  270. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
  271. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/product.j2 +0 -0
  272. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
  273. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
  274. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
  275. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
  276. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
  277. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
  278. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
  279. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
  280. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
  281. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
  282. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
  283. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/helpers/__init__.py +0 -0
  284. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/helpers/input_helpers.py +0 -0
  285. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/helpers/print_helpers.py +0 -0
  286. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/main.py +0 -0
  287. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/migrate_domain_models.py +0 -0
  288. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/migrate_workflows.py +0 -0
  289. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/migration_helpers.py +0 -0
  290. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/cli/scheduler.py +0 -0
  291. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/config/__init__.py +0 -0
  292. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/database.py +0 -0
  293. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/__init__.py +0 -0
  294. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/filters.py +0 -0
  295. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/process.py +0 -0
  296. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/product.py +0 -0
  297. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/product_block.py +0 -0
  298. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/resource_type.py +0 -0
  299. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/search_filters/__init__.py +0 -0
  300. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
  301. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/subscription.py +0 -0
  302. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/filters/workflow.py +0 -0
  303. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/helpers.py +0 -0
  304. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/listeners.py +0 -0
  305. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/loaders.py +0 -0
  306. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/range/__init__.py +0 -0
  307. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/range/range.py +0 -0
  308. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/__init__.py +0 -0
  309. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/process.py +0 -0
  310. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/product.py +0 -0
  311. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/product_block.py +0 -0
  312. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/resource_type.py +0 -0
  313. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/sorting.py +0 -0
  314. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/subscription.py +0 -0
  315. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/db/sorting/workflow.py +0 -0
  316. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/__init__.py +0 -0
  317. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/scripts/__init__.py +0 -0
  318. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/scripts/migrate_20.py +0 -0
  319. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/scripts/migrate_30.py +0 -0
  320. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/devtools/scripts/shared.py +0 -0
  321. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/distlock/__init__.py +0 -0
  322. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/distlock/distlock_manager.py +0 -0
  323. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/distlock/managers/__init__.py +0 -0
  324. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
  325. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
  326. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/domain/customer_description.py +0 -0
  327. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/domain/helpers.py +0 -0
  328. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/exception_handlers.py +0 -0
  329. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/__init__.py +0 -0
  330. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/__init__.py +0 -0
  331. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/customer_contact_list.py +0 -0
  332. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/customer_id.py +0 -0
  333. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/display_subscription.py +0 -0
  334. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/network_type_validators.py +0 -0
  335. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/forms/validators/product_id.py +0 -0
  336. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/__init__.py +0 -0
  337. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/autoregistration.py +0 -0
  338. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/extensions/__init__.py +0 -0
  339. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/extensions/stats.py +0 -0
  340. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/loaders/__init__.py +0 -0
  341. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/loaders/subscriptions.py +0 -0
  342. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/mutations/customer_description.py +0 -0
  343. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/mutations/start_process.py +0 -0
  344. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/pagination.py +0 -0
  345. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/__init__.py +0 -0
  346. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/customer.py +0 -0
  347. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/helpers.py +0 -0
  348. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/process.py +0 -0
  349. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/product.py +0 -0
  350. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/product_block.py +0 -0
  351. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/resource_type.py +0 -0
  352. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/settings.py +0 -0
  353. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/subscription.py +0 -0
  354. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/version.py +0 -0
  355. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/resolvers/workflow.py +0 -0
  356. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/__init__.py +0 -0
  357. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/customer.py +0 -0
  358. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/customer_description.py +0 -0
  359. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/errors.py +0 -0
  360. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/fixed_input.py +0 -0
  361. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/helpers.py +0 -0
  362. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/process.py +0 -0
  363. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/product.py +0 -0
  364. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/product_block.py +0 -0
  365. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/resource_type.py +0 -0
  366. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/settings.py +0 -0
  367. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
  368. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/subscription.py +0 -0
  369. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/version.py +0 -0
  370. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/schemas/workflow.py +0 -0
  371. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/__init__.py +0 -0
  372. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
  373. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
  374. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
  375. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
  376. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
  377. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/override_class.py +0 -0
  378. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
  379. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/log_config.py +0 -0
  380. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/README +0 -0
  381. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/alembic.ini +0 -0
  382. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/script.py.mako +0 -0
  383. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
  384. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/templates/env.py.j2 +0 -0
  385. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
  386. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
  387. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
  388. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
  389. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
  390. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
  391. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
  392. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
  393. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
  394. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
  395. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
  396. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
  397. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
  398. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
  399. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
  400. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
  401. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
  402. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
  403. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/migrations/versions/schema/2025-10-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
  404. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/py.typed +0 -0
  405. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/__init__.py +0 -0
  406. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/resume_workflows.py +0 -0
  407. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/scheduling.py +0 -0
  408. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/task_vacuum.py +0 -0
  409. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/validate_products.py +0 -0
  410. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schedules/validate_subscriptions.py +0 -0
  411. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/__init__.py +0 -0
  412. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/base.py +0 -0
  413. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/fixed_input.py +0 -0
  414. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/problem_detail.py +0 -0
  415. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/process.py +0 -0
  416. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/product.py +0 -0
  417. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/product_block.py +0 -0
  418. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/resource_type.py +0 -0
  419. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/subscription_descriptions.py +0 -0
  420. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/schemas/workflow.py +0 -0
  421. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/__init__.py +0 -0
  422. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/fixed_inputs.py +0 -0
  423. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/input_state.py +0 -0
  424. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/process_broadcast_thread.py +0 -0
  425. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/resource_types.py +0 -0
  426. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/settings.py +0 -0
  427. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/subscription_relations.py +0 -0
  428. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/translations.py +0 -0
  429. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/services/workflows.py +0 -0
  430. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/__init__.py +0 -0
  431. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/crypt.py +0 -0
  432. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/datetime.py +0 -0
  433. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/deprecation_logger.py +0 -0
  434. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/docs.py +0 -0
  435. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/enrich_process.py +0 -0
  436. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/fixed_inputs.py +0 -0
  437. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/functional.py +0 -0
  438. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/get_subscription_dict.py +0 -0
  439. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/get_updated_properties.py +0 -0
  440. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/helpers.py +0 -0
  441. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/json.py +0 -0
  442. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/redis.py +0 -0
  443. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/redis_client.py +0 -0
  444. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/search_query.py +0 -0
  445. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/strings.py +0 -0
  446. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/utils/validate_data_version.py +0 -0
  447. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/version.py +0 -0
  448. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/websocket/__init__.py +0 -0
  449. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
  450. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
  451. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/__init__.py +0 -0
  452. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/removed_workflow.py +0 -0
  453. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/tasks/__init__.py +0 -0
  454. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/orchestrator/workflows/translations/en-GB.json +0 -0
  455. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/setup.cfg +0 -0
  456. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/setup.py +0 -0
  457. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/__init__.py +0 -0
  458. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/__init__.py +0 -0
  459. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/conftest.py +0 -0
  460. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/__init__.py +0 -0
  461. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/devtools/populator/__init__.py +0 -0
  462. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/main.py +0 -0
  463. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/__init__.py +0 -0
  464. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/product_blocks/test_product_blocks.py +0 -0
  465. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/products/__init__.py +0 -0
  466. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/products/test_product.py +0 -0
  467. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/fixtures/test_orchestrator/workflows/__init__.py +0 -0
  468. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/acceptance_tests/test_test_product.py +0 -0
  469. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/__init__.py +0 -0
  470. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/__init__.py +0 -0
  471. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_caching.py +0 -0
  472. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_health.py +0 -0
  473. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_helpers.py +0 -0
  474. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_models.py +0 -0
  475. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_processes_ws.py +0 -0
  476. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_product_blocks.py +0 -0
  477. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_products.py +0 -0
  478. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_resource_types.py +0 -0
  479. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_settings.py +0 -0
  480. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_subscription_customer_descriptions.py +0 -0
  481. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_subscriptions.py +0 -0
  482. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_workflows.py +0 -0
  483. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/api/test_ws.py +0 -0
  484. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/__init__.py +0 -0
  485. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/conftest.py +0 -0
  486. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/alembic.ini +0 -0
  487. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/main.py +0 -0
  488. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/env.py +0 -0
  489. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/helpers.py +0 -0
  490. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/script.py.mako +0 -0
  491. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_59e1199aff7f_create_data_head.py +0 -0
  492. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_85be1c80731c_add_example2.py +0 -0
  493. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-02-20_ea9e6c9de75c_add_example1.py +0 -0
  494. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/migrations/versions/schema/2024-06-07_380a5b0c928c_add_example4.py +0 -0
  495. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/__init__.py +0 -0
  496. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_blocks/__init__.py +0 -0
  497. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_blocks/example1.py +0 -0
  498. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_blocks/example2.py +0 -0
  499. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_blocks/example4.py +0 -0
  500. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_blocks/example4sub.py +0 -0
  501. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_types/__init__.py +0 -0
  502. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_types/example1.py +0 -0
  503. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_types/example2.py +0 -0
  504. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/products/product_types/example4.py +0 -0
  505. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example1.py +0 -0
  506. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example2.py +0 -0
  507. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/domain/product_types/test_example4.py +0 -0
  508. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_create_example1.py +0 -0
  509. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_modify_example1.py +0 -0
  510. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_terminate_example1.py +0 -0
  511. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example1/test_validate_example1.py +0 -0
  512. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_create_example2.py +0 -0
  513. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_modify_example2.py +0 -0
  514. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_terminate_example2.py +0 -0
  515. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example2/test_validate_example2.py +0 -0
  516. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_create_example4.py +0 -0
  517. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_modify_example4.py +0 -0
  518. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_terminate_example4.py +0 -0
  519. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/test/unit_tests/workflows/example4/test_validate_example4.py +0 -0
  520. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/translations/en-GB.json +0 -0
  521. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/__init__.py +0 -0
  522. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example1/create_example1.py +0 -0
  523. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example1/modify_example1.py +0 -0
  524. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example1/shared/forms.py +0 -0
  525. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example1/terminate_example1.py +0 -0
  526. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example1/validate_example1.py +0 -0
  527. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example2/create_example2.py +0 -0
  528. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example2/modify_example2.py +0 -0
  529. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example2/shared/forms.py +0 -0
  530. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example2/terminate_example2.py +0 -0
  531. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example4/create_example4.py +0 -0
  532. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example4/modify_example4.py +0 -0
  533. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example4/shared/forms.py +0 -0
  534. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate/workflows/example4/terminate_example4.py +0 -0
  535. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/generate.sh +0 -0
  536. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/invalid_product_config1.yaml +0 -0
  537. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/invalid_product_config2.yaml +0 -0
  538. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/product_config1.yaml +0 -0
  539. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/product_config2.yaml +0 -0
  540. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/product_config3.yaml +0 -0
  541. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/data/product_config4.yaml +0 -0
  542. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/generator/__init__.py +0 -0
  543. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/generator/test_enums.py +0 -0
  544. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/helpers.py +0 -0
  545. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/test_cli_generate.py +0 -0
  546. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/test_config_validation.py +0 -0
  547. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/test_generate_code.py +0 -0
  548. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/test_migrate_domain_models_with_instances.py +0 -0
  549. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/cli/test_migrate_domain_models_without_instances.py +0 -0
  550. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/config.py +0 -0
  551. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/db/__init__.py +0 -0
  552. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/db/test_listeners.py +0 -0
  553. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/__init__.py +0 -0
  554. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_base_multiple.py +0 -0
  555. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_base_performance.py +0 -0
  556. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_base_with_list_union.py +0 -0
  557. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_base_with_union.py +0 -0
  558. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/domain/test_lifecycle.py +0 -0
  559. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/__init__.py +0 -0
  560. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/processes.py +0 -0
  561. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/__init__.py +0 -0
  562. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/__init__.py +0 -0
  563. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_block_list_nested.py +0 -0
  564. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_block_one.py +0 -0
  565. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_block_one_nested.py +0 -0
  566. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_block_with_list_union.py +0 -0
  567. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_block_with_union.py +0 -0
  568. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_sub_block_one.py +0 -0
  569. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_blocks/product_sub_block_two.py +0 -0
  570. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/__init__.py +0 -0
  571. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_list_nested.py +0 -0
  572. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_list_union.py +0 -0
  573. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_list_union_overlap.py +0 -0
  574. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_one.py +0 -0
  575. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_one_nested.py +0 -0
  576. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_sub_list_union.py +0 -0
  577. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_sub_one.py +0 -0
  578. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_sub_two.py +0 -0
  579. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_sub_union.py +0 -0
  580. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/product_type_union.py +0 -0
  581. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/product_types/subscription_relations.py +0 -0
  582. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/products/resource_types.py +0 -0
  583. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/fixtures/workflows.py +0 -0
  584. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/forms/__init__.py +0 -0
  585. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/forms/test_customer_contact_list.py +0 -0
  586. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/forms/test_customer_id.py +0 -0
  587. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/forms/test_generic_validators.py +0 -0
  588. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/__init__.py +0 -0
  589. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/conftest.py +0 -0
  590. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/extensions/__init__.py +0 -0
  591. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/extensions/test_stats.py +0 -0
  592. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/mutations/helpers.py +0 -0
  593. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/mutations/test_customer_description.py +0 -0
  594. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/mutations/test_start_process.py +0 -0
  595. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_customer.py +0 -0
  596. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_process.py +0 -0
  597. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_processes.py +0 -0
  598. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_product.py +0 -0
  599. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_product_blocks.py +0 -0
  600. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_resource_types.py +0 -0
  601. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_settings.py +0 -0
  602. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_sort_and_filter_fields.py +0 -0
  603. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_subscription.py +0 -0
  604. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_subscription_relations.py +0 -0
  605. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_version.py +0 -0
  606. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/test_workflows.py +0 -0
  607. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/__init__.py +0 -0
  608. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/fixtures.py +0 -0
  609. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_autoregistration.py +0 -0
  610. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_get_query_loaders.py +0 -0
  611. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_get_selected_paths.py +0 -0
  612. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_is_query_detailed.py +0 -0
  613. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_is_querying_page_data.py +0 -0
  614. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/graphql/utils/test_override_class.py +0 -0
  615. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/schedules/__init__.py +0 -0
  616. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/schedules/test_scheduling.py +0 -0
  617. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/__init__.py +0 -0
  618. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_processes.py +0 -0
  619. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_products.py +0 -0
  620. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_subscription_relations.py +0 -0
  621. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_subscriptions.py +0 -0
  622. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/services/test_translations.py +0 -0
  623. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/test_db.py +0 -0
  624. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/test_types.py +0 -0
  625. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/test_workflow.py +0 -0
  626. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/__init__.py +0 -0
  627. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/get_subscription_dict.py +0 -0
  628. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_datetime.py +0 -0
  629. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_errors.py +0 -0
  630. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_functional.py +0 -0
  631. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_get_updated_properties.py +0 -0
  632. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_json.py +0 -0
  633. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_search_query.py +0 -0
  634. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/utils/test_strings.py +0 -0
  635. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/websocket/__init__.py +0 -0
  636. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/websocket/test_broadcast.py +0 -0
  637. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/__init__.py +0 -0
  638. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/conftest.py +0 -0
  639. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/shared/__init__.py +0 -0
  640. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/shared/test_validate_subscriptions.py +0 -0
  641. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/tasks/__init__.py +0 -0
  642. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/tasks/test_clean_up_task_log.py +0 -0
  643. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/tasks/test_resume_workflows.py +0 -0
  644. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/tasks/test_validate_product_type.py +0 -0
  645. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/tasks/test_validate_products.py +0 -0
  646. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/test_config_db_code.py +0 -0
  647. {orchestrator_core-3.1.1 → orchestrator_core-3.1.2}/test/unit_tests/workflows/test_modify_note.py +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 3.1.1
2
+ current_version = 3.1.2
3
3
  commit = False
4
4
  tag = False
5
5
  parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(rc(?P<build>\d+))?
@@ -61,7 +61,7 @@ jobs:
61
61
 
62
62
  - uses: CodSpeedHQ/action@v3
63
63
  with:
64
- run: CACHE_URI=redis://redis DATABASE_URI=postgresql+psycopg://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB pytest test/unit_tests --codspeed
64
+ run: CACHE_URI=redis://redis DATABASE_URI=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB pytest test/unit_tests --codspeed
65
65
  token: ${{ secrets.CODSPEED_TOKEN }}
66
66
  env:
67
67
  POSTGRES_DB: orchestrator-core-test
@@ -5,9 +5,9 @@ name: Linting tests
5
5
 
6
6
  on:
7
7
  push:
8
- pull_request:
9
- branches: [master]
8
+ branches: [ main ]
10
9
  workflow_call:
10
+ pull_request:
11
11
 
12
12
  jobs:
13
13
  build:
@@ -1,7 +1,9 @@
1
1
  name: Unit tests
2
2
  on:
3
3
  push:
4
+ branches: [ main ]
4
5
  workflow_call:
6
+ pull_request:
5
7
 
6
8
  jobs:
7
9
  container_job:
@@ -51,7 +53,7 @@ jobs:
51
53
  env:
52
54
  FLIT_ROOT_INSTALL: 1
53
55
  - name: Run Unit tests
54
- run: CACHE_URI=redis://redis DATABASE_URI=postgresql+psycopg://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB pytest --cov-branch --cov=orchestrator --cov-report=xml --ignore=test --ignore=orchestrator/devtools --ignore=examples --ignore=docs --ignore=orchestrator/vendor
56
+ run: CACHE_URI=redis://redis DATABASE_URI=postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST/$POSTGRES_DB pytest --cov-branch --cov=orchestrator --cov-report=xml --ignore=test --ignore=orchestrator/devtools --ignore=examples --ignore=docs --ignore=orchestrator/vendor
55
57
  env:
56
58
  POSTGRES_DB: orchestrator-core-test
57
59
  POSTGRES_USER: nwa
@@ -17,13 +17,12 @@ repos:
17
17
  rev: v0.9.6
18
18
  hooks:
19
19
  - id: ruff
20
- args: [ --fix, --exit-non-zero-on-fix, --show-fixes ]
20
+ args: [--fix, --exit-non-zero-on-fix, --show-fixes]
21
21
  - repo: https://github.com/pre-commit/pre-commit-hooks
22
22
  rev: v5.0.0
23
23
  hooks:
24
24
  - id: trailing-whitespace
25
- exclude:
26
- .bumpversion.cfg
25
+ exclude: .bumpversion.cfg
27
26
  args: [--markdown-linebreak-ext=md]
28
27
  - id: end-of-file-fixer
29
28
  - id: check-docstring-first
@@ -62,7 +61,7 @@ repos:
62
61
  name: mypy
63
62
  language: system
64
63
  entry: "mypy"
65
- types: [ python ]
64
+ types: [python]
66
65
  require_serial: true
67
66
  verbose: true
68
67
  args:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orchestrator-core
3
- Version: 3.1.1
3
+ Version: 3.1.2
4
4
  Summary: This is the orchestrator workflow engine.
5
5
  Requires-Python: >=3.11,<3.14
6
6
  Classifier: Intended Audience :: Information Technology
@@ -28,7 +28,7 @@ Classifier: Programming Language :: Python :: 3.11
28
28
  Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
29
29
  Classifier: Topic :: Internet :: WWW/HTTP
30
30
  License-File: LICENSE
31
- Requires-Dist: alembic==1.14.1
31
+ Requires-Dist: alembic==1.15.2
32
32
  Requires-Dist: anyio>=3.7.0
33
33
  Requires-Dist: click==8.*
34
34
  Requires-Dist: deprecated
@@ -37,18 +37,18 @@ Requires-Dist: fastapi~=0.115.2
37
37
  Requires-Dist: fastapi-etag==0.4.0
38
38
  Requires-Dist: more-itertools~=10.6.0
39
39
  Requires-Dist: itsdangerous
40
- Requires-Dist: Jinja2==3.1.5
41
- Requires-Dist: orjson==3.10.15
42
- Requires-Dist: psycopg[binary]==3.2.5
43
- Requires-Dist: pydantic[email]~=2.10.6
40
+ Requires-Dist: Jinja2==3.1.6
41
+ Requires-Dist: orjson==3.10.16
42
+ Requires-Dist: psycopg2-binary==2.9.10
43
+ Requires-Dist: pydantic[email]~=2.8.2
44
44
  Requires-Dist: pydantic-settings~=2.8.0
45
45
  Requires-Dist: python-dateutil==2.8.2
46
46
  Requires-Dist: python-rapidjson>=1.18,<1.21
47
- Requires-Dist: pytz==2025.1
48
- Requires-Dist: redis==5.0.3
47
+ Requires-Dist: pytz==2025.2
48
+ Requires-Dist: redis==5.1.1
49
49
  Requires-Dist: schedule==1.1.0
50
- Requires-Dist: sentry-sdk[fastapi]~=2.22.0
51
- Requires-Dist: SQLAlchemy==2.0.38
50
+ Requires-Dist: sentry-sdk[fastapi]~=2.25.1
51
+ Requires-Dist: SQLAlchemy==2.0.40
52
52
  Requires-Dist: SQLAlchemy-Utils==0.41.2
53
53
  Requires-Dist: structlog
54
54
  Requires-Dist: typer==0.15.2
@@ -5,7 +5,7 @@ The orchestrator backend has the following requirements
5
5
  For the backend you need the following packages:
6
6
 
7
7
  * Python >= 3.11
8
- * Postgres >= 14
8
+ * Postgres >= 15
9
9
 
10
10
  ### Optional dependencies
11
11
  * Redis
@@ -108,6 +108,112 @@ The code above sets our local Celery instance (which initializes the workflows)
108
108
  going to be used by the orchestrator-core. Without this code, the orchestrator-core would be only aware of a limited
109
109
  set of workflows that are part of orchestrator-core itself.
110
110
 
111
+ ### An example implementation
112
+
113
+ When using Celery and Websockets you can use the following example and change it to your needs.
114
+
115
+ ```python
116
+ """This module contains functions and classes necessary for celery worker processes.
117
+
118
+ When the orchestrator-core's thread process executor is specified as "celery", the `OrchestratorCore` FastAPI
119
+ application registers celery-specific task functions and `start_process` and `resume_process` now defer to the
120
+ celery task queue.
121
+
122
+ Celery's task queue enables features like nightly validations by providing a task queue and workers to execute
123
+ workflows that are all started in parallel, which would crash a single-threaded orchestrator-core.
124
+
125
+ The application flow looks like this when "celery" is the executor (and websockets are enabled):
126
+
127
+ - FastAPI application validates form input, and places a task on celery queue (create new process).
128
+ - If websockets are enabled, a connection should exist already b/t the client and backend.
129
+ - FastAPI application begins watching redis pubsub channel for process updates from celery.
130
+ - Celery worker picks up task from queue and begins executing.
131
+ - On each step completion, it publishes state information to redis pubsub channel.
132
+ - FastAPI application grabs this information and publishes it to the client websocket connection.
133
+
134
+ A celery worker container will start by calling this module instead of `main.py` like so:
135
+ ```sh
136
+ celery -A esnetorch.celery_worker worker -E -l INFO -Q new_tasks,resume_tasks,new_workflows,resume_workflows
137
+ ```
138
+
139
+ * `-A` points to this module where the worker class is defined
140
+ * `-E` sends task-related events (capturable and monitorable)
141
+ * `-l` is the short flag for --loglevel
142
+ * `-Q` specifies the queues which the worker should watch for new tasks
143
+
144
+ See https://workfloworchestrator.org/orchestrator-core/reference-docs/app/scaling for more information.
145
+ """
146
+
147
+ from uuid import UUID
148
+
149
+ from celery import Celery
150
+ from celery.signals import worker_shutting_down
151
+ from orchestrator.db import init_database
152
+ from orchestrator.domain import SUBSCRIPTION_MODEL_REGISTRY
153
+ from orchestrator.services.tasks import initialise_celery
154
+ from orchestrator.types import BroadcastFunc
155
+ from orchestrator.websocket import broadcast_process_update_to_websocket, init_websocket_manager
156
+ from orchestrator.websocket.websocket_manager import WebSocketManager
157
+ from orchestrator.workflows import ALL_WORKFLOWS
158
+ from structlog import get_logger
159
+
160
+ from esnetorch.settings import app_settings
161
+
162
+
163
+ logger = get_logger(__name__)
164
+
165
+
166
+ def process_broadcast_fn(process_id: UUID) -> None:
167
+ # Catch all exceptions as broadcasting failure is noncritical to workflow completion
168
+ try:
169
+ broadcast_process_update_to_websocket(process_id)
170
+ except Exception as e:
171
+ logger.exception(e)
172
+
173
+
174
+ class OrchestratorWorker(Celery):
175
+ websocket_manager: WebSocketManager
176
+ process_broadcast_fn: BroadcastFunc
177
+
178
+ def on_init(self) -> None:
179
+ init_database(app_settings)
180
+
181
+ # Prepare the wrapped_websocket_manager
182
+ # Note: cannot prepare the redis connections here as broadcasting is async
183
+ self.websocket_manager = init_websocket_manager(app_settings)
184
+ self.process_broadcast_fn = process_broadcast_fn
185
+
186
+ # Load the products and load the workflows
187
+ import esnetorch.products # noqa: F401 Side-effects
188
+ import esnetorch.workflows # noqa: F401 Side-effects
189
+
190
+ logger.info(
191
+ "Loaded the workflows and products",
192
+ workflows=len(ALL_WORKFLOWS.values()),
193
+ products=len(SUBSCRIPTION_MODEL_REGISTRY.values()),
194
+ )
195
+
196
+ def close(self) -> None:
197
+ super().close()
198
+
199
+
200
+ celery = OrchestratorWorker(
201
+ f"{app_settings.SERVICE_NAME}-worker", broker=str(app_settings.CACHE_URI), include=["orchestrator.services.tasks"]
202
+ )
203
+
204
+ if app_settings.TESTING:
205
+ celery.conf.update(backend=str(app_settings.CACHE_URI), task_ignore_result=False)
206
+ else:
207
+ celery.conf.update(task_ignore_result=True)
208
+
209
+ celery.conf.update(
210
+ result_expires=3600,
211
+ worker_prefetch_multiplier=1,
212
+ worker_send_task_event=True,
213
+ task_send_sent_event=True,
214
+ )
215
+ ```
216
+
111
217
  ### Running locally
112
218
 
113
219
  If you want to test your application locally you have to start both the orchestrator-api and one or more workers.
@@ -168,3 +168,11 @@ def create_l2vpn() -> StepList:
168
168
  >> set_status(SubscriptionLifecycle.ACTIVE)
169
169
  )
170
170
  ```
171
+
172
+ ## Callback progress during execution
173
+
174
+ For long-running jobs, such as executing Terraform or Ansible playbooks, the Orchestrator allows callback jobs to send real-time progress updates which can be used to provide operators with feedback on the progress of the running task.
175
+
176
+ Progress updates should be delivered to `{callback_route}/progress`, where `"/progress"` is a fixed endpoint appended to the callback URL.
177
+
178
+ The remote service should send a JSON or plain string payload with each progress callback, this replaces the previous progress update and refreshes the UI. Once the final callback is triggered and the job completes, progress updates are removed, leaving only the callback result. Therefore, all troubleshooting or diagnostic information must be included in the final callback payload, as progress updates are not retained for debugging.
@@ -10,14 +10,14 @@ This installation instruction assumes the use of [Homebrew](https://brew.sh/).
10
10
  The following software dependencies need to be installed:
11
11
 
12
12
  * Python 3.11
13
- * PostgreSQL (version >=11)
13
+ * Postgres >= 15
14
14
  * virtualenvwrapper (or use any other tool to create virtual Python
15
15
  environments)
16
16
  * Node.js (version 14)
17
17
  * yarn
18
18
 
19
19
  ``` shell
20
- brew install python@3.11 postgresql@13 virtualenvwrapper node@14 yarn
20
+ brew install python@3.11 postgresql@15 virtualenvwrapper node@14 yarn
21
21
  ```
22
22
 
23
23
  ### Step 2 - Database setup
@@ -26,7 +26,7 @@ Start the database server and create the database with the following commands,
26
26
  use `nwa` as password:
27
27
 
28
28
  ``` shell
29
- brew services start postgresql@13
29
+ brew services start postgresql@15
30
30
  createuser -sP nwa
31
31
  createdb orchestrator-core -O nwa
32
32
  ```
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2025 SURF, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -13,7 +13,7 @@
13
13
 
14
14
  """This is the orchestrator workflow engine."""
15
15
 
16
- __version__ = "3.1.1"
16
+ __version__ = "3.1.2"
17
17
 
18
18
  from orchestrator.app import OrchestratorCore
19
19
  from orchestrator.settings import app_settings
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 SURF, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2025 SURF, GÉANT, ESnet.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -40,13 +40,7 @@ from orchestrator.db.filters import Filter
40
40
  from orchestrator.db.filters.process import filter_processes
41
41
  from orchestrator.db.sorting import Sort, SortOrder
42
42
  from orchestrator.db.sorting.process import sort_processes
43
- from orchestrator.schemas import (
44
- ProcessIdSchema,
45
- ProcessResumeAllSchema,
46
- ProcessSchema,
47
- ProcessStatusCounts,
48
- Reporter,
49
- )
43
+ from orchestrator.schemas import ProcessIdSchema, ProcessResumeAllSchema, ProcessSchema, ProcessStatusCounts, Reporter
50
44
  from orchestrator.security import authenticate
51
45
  from orchestrator.services.process_broadcast_thread import api_broadcast_process_data
52
46
  from orchestrator.services.processes import (
@@ -58,6 +52,7 @@ from orchestrator.services.processes import (
58
52
  load_process,
59
53
  resume_process,
60
54
  start_process,
55
+ update_awaiting_process_progress,
61
56
  )
62
57
  from orchestrator.services.settings import get_engine_settings
63
58
  from orchestrator.settings import app_settings
@@ -138,9 +133,12 @@ async def new_process(
138
133
  request: Request,
139
134
  json_data: list[dict[str, Any]] | None = Body(...),
140
135
  user: str = Depends(user_name),
136
+ user_model: OIDCUserModel | None = Depends(authenticate),
141
137
  ) -> dict[str, UUID]:
142
138
  broadcast_func = api_broadcast_process_data(request)
143
- process_id = start_process(workflow_key, user_inputs=json_data, user=user, broadcast_func=broadcast_func)
139
+ process_id = start_process(
140
+ workflow_key, user_inputs=json_data, user_model=user_model, user=user, broadcast_func=broadcast_func
141
+ )
144
142
 
145
143
  return {"id": process_id}
146
144
 
@@ -197,6 +195,28 @@ def continue_awaiting_process_endpoint(
197
195
  raise_status(HTTPStatus.NOT_FOUND, str(e))
198
196
 
199
197
 
198
+ @router.post(
199
+ "/{process_id}/callback/{token}/progress",
200
+ response_model=None,
201
+ status_code=HTTPStatus.OK,
202
+ dependencies=[Depends(check_global_lock, use_cache=False)],
203
+ )
204
+ def update_progress_on_awaiting_process_endpoint(
205
+ process_id: UUID,
206
+ token: str,
207
+ data: str | State = Body(...),
208
+ ) -> None:
209
+ process = _get_process(process_id)
210
+
211
+ if process.last_status != ProcessStatus.AWAITING_CALLBACK:
212
+ raise_status(HTTPStatus.CONFLICT, "This process is not in an awaiting state.")
213
+
214
+ try:
215
+ update_awaiting_process_progress(process, token=token, data=data)
216
+ except AssertionError as exc:
217
+ raise_status(HTTPStatus.NOT_FOUND, str(exc))
218
+
219
+
200
220
  @router.put(
201
221
  "/resume-all", response_model=ProcessResumeAllSchema, dependencies=[Depends(check_global_lock, use_cache=False)]
202
222
  )
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 SURF, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 SURF, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -5,7 +5,7 @@ This module contains the main `OrchestratorCore` class for the `FastAPI` backend
5
5
  provides the ability to run the CLI.
6
6
  """
7
7
 
8
- # Copyright 2019-2020 SURF, ESnet
8
+ # Copyright 2019-2020 SURF, ESnet, GÉANT.
9
9
  # Licensed under the Apache License, Version 2.0 (the "License");
10
10
  # you may not use this file except in compliance with the License.
11
11
  # You may obtain a copy of the License at
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF, ESnet
1
+ # Copyright 2019-2025 SURF, ESnet, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -31,16 +31,13 @@ from orchestrator.cli.generator.generator.helpers import (
31
31
  sort_product_blocks_by_dependencies,
32
32
  )
33
33
  from orchestrator.cli.generator.generator.settings import product_generator_settings as settings
34
- from orchestrator.settings import convert_database_uri
35
34
 
36
35
  logger = structlog.getLogger(__name__)
37
36
 
38
37
 
39
38
  def create_migration_file(message: str, head: str) -> Path | None:
40
- if environ.get("DATABASE_URI"):
41
- environ.update({"DATABASE_URI": convert_database_uri(environ["DATABASE_URI"])})
42
- else:
43
- environ.update({"DATABASE_URI": "postgresql+psycopg://nwa:nwa@localhost/orchestrator-core"})
39
+ if not environ.get("DATABASE_URI"):
40
+ environ.update({"DATABASE_URI": "postgresql://nwa:nwa@localhost/orchestrator-core"})
44
41
  if not environ.get("PYTHONPATH"):
45
42
  environ.update({"PYTHONPATH": "."})
46
43
  logger.info(
@@ -1,3 +1,16 @@
1
+ # Copyright 2019-2025 SURF, GÉANT.
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+
1
14
  import itertools
2
15
  import operator
3
16
  from collections.abc import Iterable
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2025 SURF, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -19,6 +19,7 @@ from orchestrator.db.database import Database, transactional
19
19
  from orchestrator.db.models import ( # noqa: F401
20
20
  EngineSettingsTable,
21
21
  FixedInputTable,
22
+ InputStateTable,
22
23
  ProcessStepTable,
23
24
  ProcessSubscriptionTable,
24
25
  ProcessTable,
@@ -85,6 +86,7 @@ __all__ = [
85
86
  "SubscriptionMetadataTable",
86
87
  "ResourceTypeTable",
87
88
  "FixedInputTable",
89
+ "InputStateTable",
88
90
  "EngineSettingsTable",
89
91
  "WorkflowTable",
90
92
  "SubscriptionCustomerDescriptionTable",
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 SURF, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -92,7 +92,7 @@ class InputStateTable(BaseModel):
92
92
 
93
93
  input_state_id = mapped_column(UUIDType, primary_key=True, server_default=text("uuid_generate_v4()"), index=True)
94
94
  process_id = mapped_column("pid", UUIDType, ForeignKey("processes.pid"), nullable=False)
95
- input_state = mapped_column(pg.JSONB(), nullable=False) # type: ignore
95
+ input_state = mapped_column(pg.JSONB(), nullable=False)
96
96
  input_time = mapped_column(UtcTimestamp, server_default=text("current_timestamp()"), nullable=False)
97
97
  input_type = mapped_column(Enum(InputType), nullable=False)
98
98
 
@@ -137,7 +137,7 @@ class ProcessStepTable(BaseModel):
137
137
  )
138
138
  name = mapped_column(String(), nullable=False)
139
139
  status = mapped_column(String(50), nullable=False)
140
- state = mapped_column(pg.JSONB(), nullable=False) # type: ignore
140
+ state = mapped_column(pg.JSONB(), nullable=False)
141
141
  created_by = mapped_column(String(255), nullable=True)
142
142
  executed_at = mapped_column(UtcTimestamp, server_default=text("statement_timestamp()"), nullable=False)
143
143
  commit_hash = mapped_column(String(40), nullable=True, default=GIT_COMMIT_HASH)
@@ -642,7 +642,7 @@ class SubscriptionMetadataTable(BaseModel):
642
642
  primary_key=True,
643
643
  index=True,
644
644
  )
645
- metadata_ = mapped_column("metadata", pg.JSONB(), nullable=False) # type: ignore
645
+ metadata_ = mapped_column("metadata", pg.JSONB(), nullable=False)
646
646
 
647
647
  @staticmethod
648
648
  def find_by_subscription_id(subscription_id: str) -> SubscriptionMetadataTable | None:
@@ -651,6 +651,8 @@ class SubscriptionMetadataTable(BaseModel):
651
651
 
652
652
  class SubscriptionSearchView(BaseModel):
653
653
  __tablename__ = "subscriptions_search"
654
+ __table_args__ = {"info": {"materialized_view": True}}
655
+
654
656
  subscription_id = mapped_column(
655
657
  UUIDType, ForeignKey("subscriptions.subscription_id"), nullable=False, index=True, primary_key=True
656
658
  )
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 SURF, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -11,11 +11,10 @@
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
13
 
14
-
15
- from orchestrator.domain.base import SubscriptionModel
14
+ from orchestrator.domain.base import SubscriptionModel, SubscriptionModelRegistry
16
15
  from orchestrator.utils.docs import make_product_type_index_doc
17
16
 
18
- SUBSCRIPTION_MODEL_REGISTRY: dict[str, type[SubscriptionModel]] = {}
17
+ SUBSCRIPTION_MODEL_REGISTRY: SubscriptionModelRegistry = SubscriptionModelRegistry()
19
18
 
20
19
  __doc__ = make_product_type_index_doc(SUBSCRIPTION_MODEL_REGISTRY)
21
20
 
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF, ESnet.
1
+ # Copyright 2019-2025 SURF, ESnet, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at
@@ -12,14 +12,16 @@
12
12
  # limitations under the License.
13
13
  import itertools
14
14
  from collections import defaultdict
15
- from collections.abc import Callable, Iterable
16
15
  from datetime import datetime
17
- from inspect import get_annotations
16
+ from inspect import get_annotations, isclass
18
17
  from itertools import groupby, zip_longest
19
18
  from operator import attrgetter
20
19
  from typing import (
21
20
  Any,
21
+ Callable,
22
22
  ClassVar,
23
+ Iterable,
24
+ Mapping,
23
25
  Optional,
24
26
  TypeVar,
25
27
  Union,
@@ -596,7 +598,9 @@ class ProductBlockModel(DomainModel):
596
598
  product_blocks_in_model = cls._get_depends_on_product_block_types()
597
599
  product_blocks_types_in_model = get_depends_on_product_block_type_list(product_blocks_in_model)
598
600
 
599
- product_blocks_in_model = set(flatten(map(attrgetter("__names__"), product_blocks_types_in_model))) # type: ignore
601
+ product_blocks_in_model = set(
602
+ flatten(map(attrgetter("__names__"), product_blocks_types_in_model))
603
+ ) # type: ignore
600
604
 
601
605
  missing_product_blocks_in_db = product_blocks_in_model - product_blocks_in_db # type: ignore
602
606
  missing_product_blocks_in_model = product_blocks_in_db - product_blocks_in_model # type: ignore
@@ -1051,7 +1055,9 @@ class SubscriptionModel(DomainModel):
1051
1055
  product_blocks_in_model = cls._get_depends_on_product_block_types()
1052
1056
  product_blocks_types_in_model = get_depends_on_product_block_type_list(product_blocks_in_model)
1053
1057
 
1054
- product_blocks_in_model = set(flatten(map(attrgetter("__names__"), product_blocks_types_in_model))) # type: ignore
1058
+ product_blocks_in_model = set(
1059
+ flatten(map(attrgetter("__names__"), product_blocks_types_in_model))
1060
+ ) # type: ignore
1055
1061
 
1056
1062
  missing_product_blocks_in_db = product_blocks_in_model - product_blocks_in_db # type: ignore
1057
1063
  missing_product_blocks_in_model = product_blocks_in_db - product_blocks_in_model # type: ignore
@@ -1402,6 +1408,69 @@ class SubscriptionModel(DomainModel):
1402
1408
  return self._db_model
1403
1409
 
1404
1410
 
1411
+ def validate_base_model(
1412
+ name: str, cls: type[Any], base_model: type[BaseModel] = DomainModel, errors: list[str] | None = None
1413
+ ) -> None:
1414
+ """Validates that the given class is not Pydantic BaseModel or its direct subclass."""
1415
+ # Instantiate errors list if not provided and avoid mutating default
1416
+ if errors is None:
1417
+ errors = []
1418
+ # Return early when the node is not a class as there is nothing to be done
1419
+ if not isclass(cls):
1420
+ return
1421
+ # Validate each field in the ProductBlockModel's field dictionaries
1422
+ if issubclass(cls, ProductBlockModel) or issubclass(cls, SubscriptionModel):
1423
+ for name, clz in cls._product_block_fields_.items():
1424
+ validate_base_model(name, clz, ProductBlockModel, errors)
1425
+ for name, clz in cls._non_product_block_fields_.items():
1426
+ validate_base_model(name, clz, SubscriptionModel, errors)
1427
+ # Generate error if node is Pydantic BaseModel or direct subclass
1428
+ if issubclass(cls, BaseModel):
1429
+ err_msg: str = (
1430
+ f"If this field was intended to be a {base_model.__name__}, define {name}:{cls.__name__} with "
1431
+ f"{base_model.__name__} as its superclass instead. e.g., class {cls.__name__}({base_model.__name__}):"
1432
+ )
1433
+ if cls is BaseModel:
1434
+ errors.append(f"Field {name}: {cls.__name__} can not be {BaseModel.__name__}. " + err_msg)
1435
+ if len(cls.__mro__) > 1 and cls.__mro__[1] is BaseModel:
1436
+ errors.append(
1437
+ f"Field {name}: {cls.__name__} can not be a direct subclass of {BaseModel.__name__}. " + err_msg
1438
+ )
1439
+ # Format all errors as one per line and raise a TypeError when they exist
1440
+ if errors:
1441
+ raise TypeError("\n".join(errors))
1442
+
1443
+
1444
+ class SubscriptionModelRegistry(dict[str, type[SubscriptionModel]]):
1445
+ """A registry for all subscription models."""
1446
+
1447
+ def __setitem__(self, __key: str, __value: type[SubscriptionModel]) -> None:
1448
+ """Set value for key in while validating against Pydantic BaseModel."""
1449
+ validate_base_model(__key, __value)
1450
+ super().__setitem__(__key, __value)
1451
+
1452
+ def update(
1453
+ self,
1454
+ m: Any = None,
1455
+ /,
1456
+ **kwargs: type[SubscriptionModel],
1457
+ ) -> None:
1458
+ """Update dictionary with mapping and/or kwargs using `__setitem__`."""
1459
+ if m:
1460
+ if isinstance(m, Mapping):
1461
+ for key, value in m.items():
1462
+ self[key] = value
1463
+ elif isinstance(m, Iterable):
1464
+ for index, item in enumerate(m):
1465
+ try:
1466
+ key, value = item
1467
+ except ValueError:
1468
+ raise TypeError(f"dictionary update sequence element #{index} is not an iterable of length 2")
1469
+ self[key] = value
1470
+ for key, value in kwargs.items():
1471
+ self[key] = value
1472
+
1473
+
1405
1474
  def _validate_lifecycle_change_for_product_block(
1406
1475
  used_by: SubscriptionInstanceTable,
1407
1476
  product_block_model: ProductBlockModel,
@@ -1,4 +1,4 @@
1
- # Copyright 2019-2020 SURF.
1
+ # Copyright 2019-2020 SURF, GÉANT.
2
2
  # Licensed under the Apache License, Version 2.0 (the "License");
3
3
  # you may not use this file except in compliance with the License.
4
4
  # You may obtain a copy of the License at