orchestrator-core 4.6.5__tar.gz → 4.7.0rc1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/PKG-INFO +9 -9
  2. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/__init__.py +1 -1
  3. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/api.py +4 -0
  4. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/processes.py +25 -9
  5. orchestrator_core-4.7.0rc1/orchestrator/api/api_v1/endpoints/schedules.py +44 -0
  6. orchestrator_core-4.7.0rc1/orchestrator/cli/scheduler.py +131 -0
  7. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/search/resize_embedding.py +3 -0
  8. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/models.py +26 -0
  9. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/workflow.py +1 -1
  10. orchestrator_core-4.7.0rc1/orchestrator/migrations/versions/schema/2025-11-18_961eddbd4c13_create_linker_table_workflow_apscheduler.py +106 -0
  11. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schedules/__init__.py +6 -7
  12. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schedules/scheduler.py +27 -1
  13. orchestrator_core-4.7.0rc1/orchestrator/schedules/service.py +253 -0
  14. orchestrator_core-4.7.0rc1/orchestrator/schemas/schedules.py +71 -0
  15. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/processes.py +0 -7
  16. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/workflows.py +4 -0
  17. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/auth.py +2 -2
  18. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/websocket/__init__.py +14 -0
  19. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflow.py +1 -1
  20. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/__init__.py +1 -0
  21. {orchestrator_core-4.6.5/orchestrator/schedules → orchestrator_core-4.7.0rc1/orchestrator/workflows/tasks}/validate_subscriptions.py +8 -2
  22. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/translations/en-GB.json +2 -1
  23. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/pyproject.toml +12 -9
  24. orchestrator_core-4.6.5/orchestrator/cli/scheduler.py +0 -61
  25. orchestrator_core-4.6.5/orchestrator/schedules/resume_workflows.py +0 -21
  26. orchestrator_core-4.6.5/orchestrator/schedules/task_vacuum.py +0 -21
  27. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/LICENSE +0 -0
  28. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/README.md +0 -0
  29. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/agentic_app.py +0 -0
  30. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/__init__.py +0 -0
  31. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/__init__.py +0 -0
  32. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
  33. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/agent.py +0 -0
  34. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/health.py +0 -0
  35. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
  36. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/products.py +0 -0
  37. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
  38. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/search.py +0 -0
  39. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
  40. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
  41. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/subscriptions.py +0 -0
  42. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
  43. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/user.py +0 -0
  44. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
  45. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
  46. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/error_handling.py +0 -0
  47. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/helpers.py +0 -0
  48. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/api/models.py +0 -0
  49. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/app.py +0 -0
  50. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/__init__.py +0 -0
  51. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/database.py +0 -0
  52. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
  53. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
  54. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
  55. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
  56. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
  57. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
  58. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
  59. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generate.py +0 -0
  60. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/__init__.py +0 -0
  61. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/custom_templates/README +0 -0
  62. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
  63. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
  64. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
  65. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
  66. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
  67. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
  68. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
  69. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
  70. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
  71. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/__init__.py +0 -0
  72. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/enums.py +0 -0
  73. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/helpers.py +0 -0
  74. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/migration.py +0 -0
  75. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/product.py +0 -0
  76. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/product_block.py +0 -0
  77. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/settings.py +0 -0
  78. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/translations.py +0 -0
  79. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/unittest.py +0 -0
  80. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/validations.py +0 -0
  81. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/generator/workflow.py +0 -0
  82. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
  83. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
  84. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
  85. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
  86. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
  87. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
  88. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
  89. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
  90. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
  91. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
  92. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
  93. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
  94. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/enums.j2 +0 -0
  95. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
  96. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
  97. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/macros.j2 +0 -0
  98. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
  99. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
  100. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/product.j2 +0 -0
  101. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
  102. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
  103. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
  104. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
  105. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
  106. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
  107. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
  108. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
  109. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
  110. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
  111. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
  112. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/helpers/__init__.py +0 -0
  113. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/helpers/input_helpers.py +0 -0
  114. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/helpers/print_helpers.py +0 -0
  115. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/main.py +0 -0
  116. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/migrate_domain_models.py +0 -0
  117. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/migrate_tasks.py +0 -0
  118. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/migrate_workflows.py +0 -0
  119. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/migration_helpers.py +0 -0
  120. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/search/__init__.py +0 -0
  121. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/search/display.py +0 -0
  122. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/search/index_llm.py +0 -0
  123. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/search/search_explore.py +0 -0
  124. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/cli/search/speedtest.py +0 -0
  125. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/config/__init__.py +0 -0
  126. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/config/assignee.py +0 -0
  127. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/__init__.py +0 -0
  128. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/database.py +0 -0
  129. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/filters/__init__.py +0 -0
  130. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/filters/filters.py +0 -0
  131. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/filters/process.py +0 -0
  132. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/filters/product.py +0 -0
  133. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/filters/product_block.py +0 -0
  134. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/filters/resource_type.py +0 -0
  135. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/filters/search_filters/__init__.py +0 -0
  136. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
  137. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/filters/subscription.py +0 -0
  138. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/filters/workflow.py +0 -0
  139. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/helpers.py +0 -0
  140. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/listeners.py +0 -0
  141. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/loaders.py +0 -0
  142. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/queries/__init__.py +0 -0
  143. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/queries/subscription.py +0 -0
  144. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/queries/subscription_instance.py +0 -0
  145. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/range/__init__.py +0 -0
  146. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/range/range.py +0 -0
  147. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/sorting/__init__.py +0 -0
  148. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/sorting/process.py +0 -0
  149. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/sorting/product.py +0 -0
  150. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/sorting/product_block.py +0 -0
  151. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/sorting/resource_type.py +0 -0
  152. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/sorting/sorting.py +0 -0
  153. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/sorting/subscription.py +0 -0
  154. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/db/sorting/workflow.py +0 -0
  155. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/devtools/__init__.py +0 -0
  156. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/devtools/populator.py +0 -0
  157. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/devtools/scripts/__init__.py +0 -0
  158. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/devtools/scripts/migrate_20.py +0 -0
  159. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/devtools/scripts/migrate_30.py +0 -0
  160. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/devtools/scripts/shared.py +0 -0
  161. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/distlock/__init__.py +0 -0
  162. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/distlock/distlock_manager.py +0 -0
  163. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/distlock/managers/__init__.py +0 -0
  164. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
  165. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
  166. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/domain/__init__.py +0 -0
  167. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/domain/base.py +0 -0
  168. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/domain/context_cache.py +0 -0
  169. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/domain/customer_description.py +0 -0
  170. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/domain/helpers.py +0 -0
  171. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/domain/lifecycle.py +0 -0
  172. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/domain/subscription_instance_transform.py +0 -0
  173. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/exception_handlers.py +0 -0
  174. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/forms/__init__.py +0 -0
  175. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/forms/validators/__init__.py +0 -0
  176. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/forms/validators/customer_contact_list.py +0 -0
  177. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/forms/validators/customer_id.py +0 -0
  178. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/forms/validators/display_subscription.py +0 -0
  179. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/forms/validators/network_type_validators.py +0 -0
  180. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/forms/validators/product_id.py +0 -0
  181. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/__init__.py +0 -0
  182. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/autoregistration.py +0 -0
  183. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/extensions/__init__.py +0 -0
  184. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/extensions/model_cache.py +0 -0
  185. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/extensions/stats.py +0 -0
  186. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/loaders/__init__.py +0 -0
  187. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/loaders/subscriptions.py +0 -0
  188. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/mutations/customer_description.py +0 -0
  189. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/mutations/start_process.py +0 -0
  190. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/pagination.py +0 -0
  191. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/__init__.py +0 -0
  192. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/customer.py +0 -0
  193. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/helpers.py +0 -0
  194. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/process.py +0 -0
  195. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/product.py +0 -0
  196. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/product_block.py +0 -0
  197. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/resource_type.py +0 -0
  198. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/scheduled_tasks.py +0 -0
  199. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/settings.py +0 -0
  200. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/subscription.py +0 -0
  201. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/version.py +0 -0
  202. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/resolvers/workflow.py +0 -0
  203. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schema.py +0 -0
  204. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/__init__.py +0 -0
  205. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/customer.py +0 -0
  206. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/customer_description.py +0 -0
  207. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/errors.py +0 -0
  208. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/fixed_input.py +0 -0
  209. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/helpers.py +0 -0
  210. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/process.py +0 -0
  211. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/product.py +0 -0
  212. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/product_block.py +0 -0
  213. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/resource_type.py +0 -0
  214. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/scheduled_task.py +0 -0
  215. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/settings.py +0 -0
  216. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
  217. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/subscription.py +0 -0
  218. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/schemas/version.py +0 -0
  219. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/types.py +0 -0
  220. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/utils/__init__.py +0 -0
  221. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
  222. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
  223. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
  224. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
  225. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
  226. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
  227. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/utils/override_class.py +0 -0
  228. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
  229. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/llm_settings.py +0 -0
  230. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/log_config.py +0 -0
  231. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/metrics/__init__.py +0 -0
  232. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/metrics/engine.py +0 -0
  233. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/metrics/init.py +0 -0
  234. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/metrics/processes.py +0 -0
  235. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/metrics/subscriptions.py +0 -0
  236. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/README +0 -0
  237. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/__init__.py +0 -0
  238. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/alembic.ini +0 -0
  239. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/env.py +0 -0
  240. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/helpers.py +0 -0
  241. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/script.py.mako +0 -0
  242. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
  243. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/templates/env.py.j2 +0 -0
  244. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
  245. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
  246. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
  247. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
  248. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
  249. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
  250. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
  251. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
  252. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
  253. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
  254. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
  255. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
  256. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
  257. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
  258. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
  259. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
  260. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
  261. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
  262. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
  263. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
  264. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
  265. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +0 -0
  266. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +0 -0
  267. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py +0 -0
  268. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql +0 -0
  269. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +0 -0
  270. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +0 -0
  271. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-07-01_93fc5834c7e5_changed_timestamping_fields_in_process_steps.py +0 -0
  272. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-07-04_4b58e336d1bf_deprecating_workflow_target_in_.py +0 -0
  273. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/migrations/versions/schema/2025-07-28_850dccac3b02_update_description_of_resume_workflows_.py +0 -0
  274. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/py.typed +0 -0
  275. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schedules/scheduling.py +0 -0
  276. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schedules/validate_products.py +0 -0
  277. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/__init__.py +0 -0
  278. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/base.py +0 -0
  279. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/engine_settings.py +0 -0
  280. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/fixed_input.py +0 -0
  281. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/problem_detail.py +0 -0
  282. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/process.py +0 -0
  283. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/product.py +0 -0
  284. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/product_block.py +0 -0
  285. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/resource_type.py +0 -0
  286. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/search.py +0 -0
  287. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/search_requests.py +0 -0
  288. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/subscription.py +0 -0
  289. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/subscription_descriptions.py +0 -0
  290. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/schemas/workflow.py +0 -0
  291. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/__init__.py +0 -0
  292. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/agent/__init__.py +0 -0
  293. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/agent/agent.py +0 -0
  294. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/agent/handlers.py +0 -0
  295. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/agent/json_patch.py +0 -0
  296. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/agent/prompts.py +0 -0
  297. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/agent/state.py +0 -0
  298. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/agent/tools.py +0 -0
  299. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/agent/validation.py +0 -0
  300. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/aggregations/__init__.py +0 -0
  301. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/aggregations/base.py +0 -0
  302. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/core/__init__.py +0 -0
  303. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/core/embedding.py +0 -0
  304. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/core/exceptions.py +0 -0
  305. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/core/types.py +0 -0
  306. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/core/validators.py +0 -0
  307. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/docs/index.md +0 -0
  308. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/docs/running_local_text_embedding_inference.md +0 -0
  309. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/filters/__init__.py +0 -0
  310. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/filters/base.py +0 -0
  311. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/filters/date_filters.py +0 -0
  312. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/filters/definitions.py +0 -0
  313. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/filters/ltree_filters.py +0 -0
  314. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/filters/numeric_filter.py +0 -0
  315. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/indexing/__init__.py +0 -0
  316. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/indexing/indexer.py +0 -0
  317. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/indexing/registry.py +0 -0
  318. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/indexing/tasks.py +0 -0
  319. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/indexing/traverse.py +0 -0
  320. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/llm_migration.py +0 -0
  321. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/query/__init__.py +0 -0
  322. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/query/builder.py +0 -0
  323. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/query/engine.py +0 -0
  324. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/query/exceptions.py +0 -0
  325. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/query/export.py +0 -0
  326. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/query/mixins.py +0 -0
  327. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/query/queries.py +0 -0
  328. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/query/results.py +0 -0
  329. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/query/state.py +0 -0
  330. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/query/validation.py +0 -0
  331. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/retrieval/__init__.py +0 -0
  332. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/retrieval/pagination.py +0 -0
  333. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/retrieval/retrievers/__init__.py +0 -0
  334. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/retrieval/retrievers/base.py +0 -0
  335. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/retrieval/retrievers/fuzzy.py +0 -0
  336. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/retrieval/retrievers/hybrid.py +0 -0
  337. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/retrieval/retrievers/process.py +0 -0
  338. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/retrieval/retrievers/semantic.py +0 -0
  339. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/search/retrieval/retrievers/structured.py +0 -0
  340. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/security.py +0 -0
  341. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/__init__.py +0 -0
  342. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/executors/__init__.py +0 -0
  343. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/executors/celery.py +0 -0
  344. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/executors/threadpool.py +0 -0
  345. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/fixed_inputs.py +0 -0
  346. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/input_state.py +0 -0
  347. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/process_broadcast_thread.py +0 -0
  348. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/products.py +0 -0
  349. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/resource_types.py +0 -0
  350. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/settings.py +0 -0
  351. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/settings_env_variables.py +0 -0
  352. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/subscription_relations.py +0 -0
  353. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/subscriptions.py +0 -0
  354. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/tasks.py +0 -0
  355. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/services/translations.py +0 -0
  356. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/settings.py +0 -0
  357. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/targets.py +0 -0
  358. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/types.py +0 -0
  359. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/__init__.py +0 -0
  360. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/crypt.py +0 -0
  361. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/datetime.py +0 -0
  362. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/deprecation_logger.py +0 -0
  363. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/docs.py +0 -0
  364. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/enrich_process.py +0 -0
  365. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/errors.py +0 -0
  366. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/expose_settings.py +0 -0
  367. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/fixed_inputs.py +0 -0
  368. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/functional.py +0 -0
  369. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/get_subscription_dict.py +0 -0
  370. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/get_updated_properties.py +0 -0
  371. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/helpers.py +0 -0
  372. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/json.py +0 -0
  373. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/redis.py +0 -0
  374. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/redis_client.py +0 -0
  375. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/search_query.py +0 -0
  376. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/state.py +0 -0
  377. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/strings.py +0 -0
  378. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/utils/validate_data_version.py +0 -0
  379. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/version.py +0 -0
  380. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
  381. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
  382. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/websocket/websocket_manager.py +0 -0
  383. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/modify_note.py +0 -0
  384. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/removed_workflow.py +0 -0
  385. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/steps.py +0 -0
  386. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/tasks/__init__.py +0 -0
  387. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
  388. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
  389. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/tasks/validate_product_type.py +0 -0
  390. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/tasks/validate_products.py +0 -0
  391. {orchestrator_core-4.6.5 → orchestrator_core-4.7.0rc1}/orchestrator/workflows/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orchestrator-core
3
- Version: 4.6.5
3
+ Version: 4.7.0rc1
4
4
  Summary: This is the orchestrator workflow engine.
5
5
  Author-email: SURF <automation-beheer@surf.nl>
6
6
  Requires-Python: >=3.11,<3.15
@@ -37,14 +37,14 @@ Requires-Dist: apscheduler>=3.11.0
37
37
  Requires-Dist: click==8.*
38
38
  Requires-Dist: deepmerge==2.0
39
39
  Requires-Dist: deprecated>=1.2.18
40
- Requires-Dist: fastapi~=0.121.1
40
+ Requires-Dist: fastapi~=0.124.0
41
41
  Requires-Dist: fastapi-etag==0.4.0
42
42
  Requires-Dist: itsdangerous>=2.2.0
43
43
  Requires-Dist: jinja2==3.1.6
44
44
  Requires-Dist: more-itertools~=10.8.0
45
45
  Requires-Dist: nwa-stdlib~=1.11.0
46
46
  Requires-Dist: oauth2-lib>=2.5.0
47
- Requires-Dist: orjson==3.11.4
47
+ Requires-Dist: orjson==3.11.5
48
48
  Requires-Dist: pgvector>=0.4.1
49
49
  Requires-Dist: prometheus-client==0.23.1
50
50
  Requires-Dist: psycopg2-binary==2.9.11
@@ -52,9 +52,9 @@ Requires-Dist: pydantic-forms>=1.4.0
52
52
  Requires-Dist: pydantic-settings~=2.12.0
53
53
  Requires-Dist: pydantic[email]~=2.12.4
54
54
  Requires-Dist: python-dateutil==2.9.0.post0
55
- Requires-Dist: python-rapidjson>=1.22,<1.23
55
+ Requires-Dist: python-rapidjson>=1.23,<1.24
56
56
  Requires-Dist: pytz==2025.2
57
- Requires-Dist: redis==5.3.1
57
+ Requires-Dist: redis==7.1.0
58
58
  Requires-Dist: semver==3.0.4
59
59
  Requires-Dist: sentry-sdk[fastapi]>=2.29.1
60
60
  Requires-Dist: sqlalchemy==2.0.44
@@ -64,11 +64,11 @@ Requires-Dist: structlog>=25.4.0
64
64
  Requires-Dist: tabulate==0.9.0
65
65
  Requires-Dist: typer==0.20.0
66
66
  Requires-Dist: uvicorn[standard]~=0.38.0
67
- Requires-Dist: pydantic-ai-slim >=1.9.0 ; extra == "agent"
68
- Requires-Dist: ag-ui-protocol>=0.1.8 ; extra == "agent"
67
+ Requires-Dist: pydantic-ai-slim >=1.27.0 ; extra == "agent"
68
+ Requires-Dist: ag-ui-protocol>=0.1.10 ; extra == "agent"
69
69
  Requires-Dist: litellm>=1.75.7 ; extra == "agent"
70
- Requires-Dist: celery~=5.5.1 ; extra == "celery"
71
- Requires-Dist: litellm>=1.75.7 ; extra == "search"
70
+ Requires-Dist: celery~=5.6.0 ; extra == "celery"
71
+ Requires-Dist: litellm>=1.80.0 ; extra == "search"
72
72
  Project-URL: Documentation, https://workfloworchestrator.org/orchestrator-core
73
73
  Project-URL: Homepage, https://workfloworchestrator.org/orchestrator-core
74
74
  Project-URL: Source, https://github.com/workfloworchestrator/orchestrator-core
@@ -13,7 +13,7 @@
13
13
 
14
14
  """This is the orchestrator workflow engine."""
15
15
 
16
- __version__ = "4.6.5"
16
+ __version__ = "4.7.0rc1"
17
17
 
18
18
 
19
19
  from structlog import get_logger
@@ -22,6 +22,7 @@ from orchestrator.api.api_v1.endpoints import (
22
22
  product_blocks,
23
23
  products,
24
24
  resource_types,
25
+ schedules,
25
26
  settings,
26
27
  subscription_customer_descriptions,
27
28
  subscriptions,
@@ -88,6 +89,9 @@ api_router.include_router(
88
89
  api_router.include_router(
89
90
  ws.router, prefix="/ws", tags=["Core", "Events"]
90
91
  ) # Auth on the websocket is handled in the Websocket Manager
92
+ api_router.include_router(
93
+ schedules.router, prefix="/schedules", tags=["Core", "Schedules"], dependencies=[Depends(authorize)]
94
+ )
91
95
 
92
96
  if llm_settings.SEARCH_ENABLED:
93
97
  from orchestrator.api.api_v1.endpoints import search
@@ -13,6 +13,7 @@
13
13
 
14
14
  """Module that implements process related API endpoints."""
15
15
 
16
+ import asyncio
16
17
  import struct
17
18
  import zlib
18
19
  from http import HTTPStatus
@@ -62,10 +63,12 @@ from orchestrator.utils.enrich_process import enrich_process
62
63
  from orchestrator.websocket import (
63
64
  WS_CHANNELS,
64
65
  broadcast_invalidate_status_counts,
66
+ broadcast_invalidate_status_counts_async,
65
67
  broadcast_process_update_to_websocket,
66
68
  websocket_manager,
67
69
  )
68
70
  from orchestrator.workflow import ProcessStat, ProcessStatus, StepList, Workflow
71
+ from orchestrator.workflows import get_workflow
69
72
  from pydantic_forms.types import JSON, State
70
73
 
71
74
  router = APIRouter()
@@ -175,7 +178,7 @@ def delete(process_id: UUID) -> None:
175
178
  status_code=HTTPStatus.CREATED,
176
179
  dependencies=[Depends(check_global_lock, use_cache=False)],
177
180
  )
178
- def new_process(
181
+ async def new_process(
179
182
  workflow_key: str,
180
183
  request: Request,
181
184
  json_data: list[dict[str, Any]] | None = Body(...),
@@ -183,8 +186,21 @@ def new_process(
183
186
  user_model: OIDCUserModel | None = Depends(authenticate),
184
187
  ) -> dict[str, UUID]:
185
188
  broadcast_func = api_broadcast_process_data(request)
186
- process_id = start_process(
187
- workflow_key, user_inputs=json_data, user_model=user_model, user=user, broadcast_func=broadcast_func
189
+
190
+ workflow = get_workflow(workflow_key)
191
+ if not workflow:
192
+ raise_status(HTTPStatus.NOT_FOUND, "Workflow does not exist")
193
+
194
+ if not await workflow.authorize_callback(user_model):
195
+ raise_status(HTTPStatus.FORBIDDEN, f"User is not authorized to execute '{workflow_key}' workflow")
196
+
197
+ process_id = await asyncio.to_thread(
198
+ start_process,
199
+ workflow_key,
200
+ user_inputs=json_data,
201
+ user_model=user_model,
202
+ user=user,
203
+ broadcast_func=broadcast_func,
188
204
  )
189
205
 
190
206
  return {"id": process_id}
@@ -196,14 +212,14 @@ def new_process(
196
212
  status_code=HTTPStatus.NO_CONTENT,
197
213
  dependencies=[Depends(check_global_lock, use_cache=False)],
198
214
  )
199
- def resume_process_endpoint(
215
+ async def resume_process_endpoint(
200
216
  process_id: UUID,
201
217
  request: Request,
202
218
  json_data: JSON = Body(...),
203
219
  user: str = Depends(user_name),
204
220
  user_model: OIDCUserModel | None = Depends(authenticate),
205
221
  ) -> None:
206
- process = _get_process(process_id)
222
+ process = await asyncio.to_thread(_get_process, process_id)
207
223
 
208
224
  if not can_be_resumed(process.last_status):
209
225
  raise_status(HTTPStatus.CONFLICT, f"Resuming a {process.last_status.lower()} workflow is not possible")
@@ -211,16 +227,16 @@ def resume_process_endpoint(
211
227
  pstat = load_process(process)
212
228
  auth_resume, auth_retry = get_auth_callbacks(get_steps_to_evaluate_for_rbac(pstat), pstat.workflow)
213
229
  if process.last_status == ProcessStatus.SUSPENDED:
214
- if auth_resume is not None and not auth_resume(user_model):
230
+ if auth_resume is not None and not (await auth_resume(user_model)):
215
231
  raise_status(HTTPStatus.FORBIDDEN, "User is not authorized to resume step")
216
232
  elif process.last_status in (ProcessStatus.FAILED, ProcessStatus.WAITING):
217
- if auth_retry is not None and not auth_retry(user_model):
233
+ if auth_retry is not None and not (await auth_retry(user_model)):
218
234
  raise_status(HTTPStatus.FORBIDDEN, "User is not authorized to retry step")
219
235
 
220
- broadcast_invalidate_status_counts()
236
+ await broadcast_invalidate_status_counts_async()
221
237
  broadcast_func = api_broadcast_process_data(request)
222
238
 
223
- resume_process(process, user=user, user_inputs=json_data, broadcast_func=broadcast_func)
239
+ await asyncio.to_thread(resume_process, process, user=user, user_inputs=json_data, broadcast_func=broadcast_func)
224
240
 
225
241
 
226
242
  @router.post(
@@ -0,0 +1,44 @@
1
+ # Copyright 2019-2025 SURF.
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
+ from http import HTTPStatus
14
+
15
+ import structlog
16
+ from fastapi.routing import APIRouter
17
+
18
+ from orchestrator.schedules.service import add_scheduled_task_to_queue
19
+ from orchestrator.schemas.schedules import APSchedulerJobCreate, APSchedulerJobDelete, APSchedulerJobUpdate
20
+
21
+ logger = structlog.get_logger(__name__)
22
+
23
+ router: APIRouter = APIRouter()
24
+
25
+
26
+ @router.post("/", status_code=HTTPStatus.CREATED)
27
+ def create_scheduled_task(payload: APSchedulerJobCreate) -> dict[str, str]:
28
+ """Create a scheduled task."""
29
+ add_scheduled_task_to_queue(payload)
30
+ return {"message": "Added to Create Queue", "status": "CREATED"}
31
+
32
+
33
+ @router.put("/", status_code=HTTPStatus.OK)
34
+ async def update_scheduled_task(payload: APSchedulerJobUpdate) -> dict[str, str]:
35
+ """Update a scheduled task."""
36
+ add_scheduled_task_to_queue(payload)
37
+ return {"message": "Added to Update Queue", "status": "UPDATED"}
38
+
39
+
40
+ @router.delete("/", status_code=HTTPStatus.OK)
41
+ async def delete_scheduled_task(payload: APSchedulerJobDelete) -> dict[str, str]:
42
+ """Delete a scheduled task."""
43
+ add_scheduled_task_to_queue(payload)
44
+ return {"message": "Added to Delete Queue", "status": "DELETED"}
@@ -0,0 +1,131 @@
1
+ # Copyright 2019-2020 SURF.
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
+ import time
14
+ from typing import cast
15
+
16
+ import typer
17
+ from redis import Redis
18
+
19
+ from orchestrator.schedules.scheduler import (
20
+ get_all_scheduler_tasks,
21
+ get_scheduler,
22
+ get_scheduler_task,
23
+ )
24
+ from orchestrator.schedules.service import (
25
+ SCHEDULER_QUEUE,
26
+ add_scheduled_task_to_queue,
27
+ workflow_scheduler_queue,
28
+ )
29
+ from orchestrator.schemas.schedules import APSchedulerJobCreate
30
+ from orchestrator.services.workflows import get_workflow_by_name
31
+ from orchestrator.settings import app_settings
32
+ from orchestrator.utils.redis_client import create_redis_client
33
+
34
+ app: typer.Typer = typer.Typer()
35
+
36
+
37
+ @app.command()
38
+ def run() -> None:
39
+ """Start scheduler and loop eternally to keep thread alive."""
40
+
41
+ def _get_scheduled_task_item_from_queue(redis_conn: Redis) -> tuple[str, bytes] | None:
42
+ """Get an item from the Redis Queue for scheduler tasks."""
43
+ try:
44
+ return redis_conn.brpop(SCHEDULER_QUEUE, timeout=1)
45
+ except ConnectionError as e:
46
+ typer.echo(f"There was a connection error with Redis. Retrying in 3 seconds... {e}")
47
+ time.sleep(3)
48
+ except Exception as e:
49
+ typer.echo(f"There was an unexpected error with Redis. Retrying in 1 second... {e}")
50
+ time.sleep(1)
51
+
52
+ return None
53
+
54
+ with get_scheduler() as scheduler_connection:
55
+ redis_connection = create_redis_client(app_settings.CACHE_URI)
56
+ while True:
57
+ item = _get_scheduled_task_item_from_queue(redis_connection)
58
+ if not item:
59
+ continue
60
+
61
+ workflow_scheduler_queue(item, scheduler_connection)
62
+
63
+
64
+ @app.command()
65
+ def show_schedule() -> None:
66
+ """Show the currently configured schedule.
67
+
68
+ in cli underscore is replaced by a dash `show-schedule`
69
+ """
70
+ for task in get_all_scheduler_tasks():
71
+ typer.echo(f"[{task.id}] Next run: {task.next_run_time} | Trigger: {task.trigger}")
72
+
73
+
74
+ @app.command()
75
+ def force(task_id: str) -> None:
76
+ """Force the execution of (a) scheduler(s) based on a task_id."""
77
+ task = get_scheduler_task(task_id)
78
+
79
+ if not task:
80
+ typer.echo(f"Task '{task_id}' not found.")
81
+ raise typer.Exit(code=1)
82
+
83
+ typer.echo(f"Running Task [{task.id}] now...")
84
+ try:
85
+ task.func(*task.args or (), **task.kwargs or {})
86
+ typer.echo("Task executed successfully.")
87
+ except Exception as e:
88
+ typer.echo(f"Task execution failed: {e}")
89
+ raise typer.Exit(code=1)
90
+
91
+
92
+ @app.command()
93
+ def load_initial_schedule() -> None:
94
+ """Load the initial schedule into the scheduler."""
95
+ initial_schedules = [
96
+ {
97
+ "name": "Task Resume Workflows",
98
+ "workflow_name": "task_resume_workflows",
99
+ "workflow_id": "",
100
+ "trigger": "interval",
101
+ "trigger_kwargs": {"hours": 1},
102
+ },
103
+ {
104
+ "name": "Task Clean Up Tasks",
105
+ "workflow_name": "task_clean_up_tasks",
106
+ "workflow_id": "",
107
+ "trigger": "interval",
108
+ "trigger_kwargs": {"hours": 6},
109
+ },
110
+ {
111
+ "name": "Task Validate Subscriptions",
112
+ "workflow_name": "task_validate_subscriptions",
113
+ "workflow_id": "",
114
+ "trigger": "cron",
115
+ "trigger_kwargs": {"hour": 0, "minute": 10},
116
+ },
117
+ ]
118
+
119
+ for schedule in initial_schedules:
120
+ # enrich with workflow id
121
+ workflow_name = cast(str, schedule.get("workflow_name"))
122
+ workflow = get_workflow_by_name(workflow_name)
123
+
124
+ if not workflow:
125
+ typer.echo(f"Workflow '{schedule['workflow_name']}' not found. Skipping schedule.")
126
+ continue
127
+
128
+ schedule["workflow_id"] = workflow.workflow_id
129
+
130
+ typer.echo(f"Initial Schedule: {schedule}")
131
+ add_scheduled_task_to_queue(APSchedulerJobCreate(**schedule)) # type: ignore
@@ -75,6 +75,9 @@ def alter_embedding_column_dimension(new_dimension: int) -> None:
75
75
  db.session.execute(text(f"ALTER TABLE search_queries ADD COLUMN query_embedding vector({new_dimension})"))
76
76
 
77
77
  db.session.commit()
78
+
79
+ db.session.close()
80
+
78
81
  logger.info(f"Altered embedding columns to dimension {new_dimension} in ai_search_index and search_queries")
79
82
 
80
83
  except SQLAlchemyError as e:
@@ -29,9 +29,11 @@ from sqlalchemy import (
29
29
  CheckConstraint,
30
30
  Column,
31
31
  Enum,
32
+ Float,
32
33
  ForeignKey,
33
34
  Index,
34
35
  Integer,
36
+ LargeBinary,
35
37
  PrimaryKeyConstraint,
36
38
  Select,
37
39
  String,
@@ -796,3 +798,27 @@ class AiSearchIndex(BaseModel):
796
798
  content_hash = mapped_column(String(64), nullable=False, index=True)
797
799
 
798
800
  __table_args__ = (PrimaryKeyConstraint("entity_id", "path", name="pk_ai_search_index"),)
801
+
802
+
803
+ class APSchedulerJobStoreModel(BaseModel):
804
+ __tablename__ = "apscheduler_jobs"
805
+
806
+ id = mapped_column(String(191), primary_key=True)
807
+ next_run_time = mapped_column(Float, nullable=True)
808
+ job_state = mapped_column(LargeBinary, nullable=False)
809
+
810
+
811
+ class WorkflowApschedulerJob(BaseModel):
812
+ __tablename__ = "workflows_apscheduler_jobs"
813
+
814
+ workflow_id = mapped_column(
815
+ UUIDType, ForeignKey("workflows.workflow_id", ondelete="CASCADE"), primary_key=True, nullable=False
816
+ )
817
+
818
+ # Notice the VARCHAR(512) for schedule_id to accommodate longer IDs so
819
+ # that if APScheduler changes its ID format in the future, we are covered.
820
+ schedule_id = mapped_column(
821
+ String(512), ForeignKey("apscheduler_jobs.id", ondelete="CASCADE"), primary_key=True, nullable=False
822
+ )
823
+
824
+ __table_args__ = (UniqueConstraint("workflow_id", "schedule_id", name="uq_workflow_schedule"),)
@@ -38,4 +38,4 @@ class Workflow:
38
38
  workflow_table = get_original_model(self, WorkflowTable)
39
39
  workflow = get_workflow(workflow_table.name)
40
40
 
41
- return workflow.authorize_callback(oidc_user) # type: ignore
41
+ return await workflow.authorize_callback(oidc_user) # type: ignore
@@ -0,0 +1,106 @@
1
+ """Create linker table workflow_apscheduler.
2
+
3
+ Revision ID: 961eddbd4c13
4
+ Revises: 850dccac3b02
5
+ Create Date: 2025-11-18 10:38:57.211087
6
+
7
+ """
8
+
9
+ from uuid import uuid4
10
+
11
+ import sqlalchemy as sa
12
+ from alembic import op
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision = "961eddbd4c13"
16
+ down_revision = "850dccac3b02"
17
+ branch_labels = None
18
+ depends_on = None
19
+
20
+
21
+ workflows = [
22
+ {
23
+ "name": "task_validate_subscriptions",
24
+ "description": "Validate subscriptions",
25
+ "workflow_id": uuid4(),
26
+ "target": "SYSTEM",
27
+ },
28
+ ]
29
+
30
+
31
+ def _create_workflows() -> None:
32
+ conn = op.get_bind()
33
+ for workflow in workflows:
34
+ conn.execute(
35
+ sa.text(
36
+ "INSERT INTO workflows VALUES (:workflow_id, :name, :target, :description, now()) ON CONFLICT DO NOTHING"
37
+ ),
38
+ workflow,
39
+ )
40
+
41
+
42
+ def _downgrade_create_workflows() -> None:
43
+ conn = op.get_bind()
44
+ for workflow in workflows:
45
+ conn.execute(sa.text("DELETE FROM workflows WHERE name = :name"), {"name": workflow["name"]})
46
+
47
+
48
+ def _create_apscheduler_jobs_table_if_not_exists() -> None:
49
+ # Check if the apscheduler_jobs table exists and create it if it does not exist.
50
+ conn = op.get_bind()
51
+ inspector = sa.inspect(conn)
52
+ if "apscheduler_jobs" not in inspector.get_table_names():
53
+ op.execute(
54
+ sa.text(
55
+ """
56
+ CREATE TABLE apscheduler_jobs
57
+ (
58
+ id VARCHAR(191) NOT NULL PRIMARY KEY,
59
+ next_run_time DOUBLE PRECISION,
60
+ job_state bytea NOT NULL
61
+ );
62
+ """
63
+ )
64
+ )
65
+
66
+
67
+ def _create_workflows_table_if_not_exists() -> None:
68
+ # Notice the VARCHAR(512) for schedule_id to accommodate longer IDs
69
+ # This so that if APScheduler changes its ID format in the future, we are covered.
70
+ op.execute(
71
+ sa.text(
72
+ """
73
+ CREATE TABLE workflows_apscheduler_jobs (
74
+ workflow_id UUID NOT NULL,
75
+ schedule_id VARCHAR(512) NOT NULL,
76
+ PRIMARY KEY (workflow_id, schedule_id),
77
+ CONSTRAINT fk_workflow
78
+ FOREIGN KEY (workflow_id) REFERENCES public.workflows (workflow_id)
79
+ ON DELETE CASCADE,
80
+ CONSTRAINT fk_schedule
81
+ FOREIGN KEY (schedule_id) REFERENCES public.apscheduler_jobs (id)
82
+ ON DELETE CASCADE,
83
+ CONSTRAINT uq_workflow_schedule UNIQUE (workflow_id, schedule_id)
84
+ );
85
+ """
86
+ )
87
+ )
88
+
89
+ op.create_index("ix_workflows_apscheduler_jobs_schedule_id", "workflows_apscheduler_jobs", ["schedule_id"])
90
+
91
+
92
+ def upgrade() -> None:
93
+ _create_apscheduler_jobs_table_if_not_exists()
94
+ _create_workflows_table_if_not_exists()
95
+ _create_workflows()
96
+
97
+
98
+ def downgrade() -> None:
99
+ op.execute(
100
+ sa.text(
101
+ """
102
+ DROP TABLE IF EXISTS workflows_apscheduler_jobs;
103
+ """
104
+ )
105
+ )
106
+ _downgrade_create_workflows()
@@ -10,16 +10,15 @@
10
10
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
+ import warnings
13
14
 
14
-
15
- from orchestrator.schedules.resume_workflows import run_resume_workflows
16
- from orchestrator.schedules.task_vacuum import vacuum_tasks
17
15
  from orchestrator.schedules.validate_products import validate_products
18
- from orchestrator.schedules.validate_subscriptions import validate_subscriptions
19
16
 
17
+ warnings.warn(
18
+ "ALL_SCHEDULERS is deprecated; scheduling is now handled entirely through the scheduler API.",
19
+ DeprecationWarning,
20
+ stacklevel=2,
21
+ )
20
22
  ALL_SCHEDULERS: list = [
21
- run_resume_workflows,
22
- vacuum_tasks,
23
- validate_subscriptions,
24
23
  validate_products,
25
24
  ]
@@ -11,7 +11,6 @@
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
13
 
14
-
15
14
  from contextlib import contextmanager
16
15
  from datetime import datetime
17
16
  from typing import Any, Generator
@@ -27,6 +26,7 @@ from orchestrator.db.filters import Filter
27
26
  from orchestrator.db.filters.filters import CallableErrorHandler
28
27
  from orchestrator.db.sorting import Sort
29
28
  from orchestrator.db.sorting.sorting import SortOrder
29
+ from orchestrator.schedules.service import get_linker_entries_by_schedule_ids
30
30
  from orchestrator.utils.helpers import camel_to_snake, to_camel
31
31
 
32
32
  executors = {
@@ -75,6 +75,7 @@ def get_scheduler(paused: bool = False) -> Generator[BackgroundScheduler, Any, N
75
75
 
76
76
  class ScheduledTask(BaseModel):
77
77
  id: str
78
+ workflow_id: str | None = None
78
79
  name: str | None = None
79
80
  next_run_time: datetime | None = None
80
81
  trigger: str
@@ -161,6 +162,29 @@ def default_error_handler(message: str, **context) -> None: # type: ignore
161
162
  raise ValueError(f"{message} {_format_context(context)}")
162
163
 
163
164
 
165
+ def enrich_with_workflow_id(scheduled_tasks: list[ScheduledTask]) -> list[ScheduledTask]:
166
+ """Does a get call to the linker table to get the workflow_id for each scheduled task.
167
+
168
+ Returns all the scheduled tasks with the workflow_id added.
169
+ """
170
+ schedule_ids = [task.id for task in scheduled_tasks]
171
+
172
+ entries = {
173
+ str(entry.schedule_id): str(entry.workflow_id) for entry in get_linker_entries_by_schedule_ids(schedule_ids)
174
+ }
175
+
176
+ return [
177
+ ScheduledTask(
178
+ id=task.id,
179
+ workflow_id=entries.get(task.id, None),
180
+ name=task.name,
181
+ next_run_time=task.next_run_time,
182
+ trigger=str(task.trigger),
183
+ )
184
+ for task in scheduled_tasks
185
+ ]
186
+
187
+
164
188
  def get_scheduler_tasks(
165
189
  first: int = 10,
166
190
  after: int = 0,
@@ -171,6 +195,7 @@ def get_scheduler_tasks(
171
195
  scheduled_tasks = get_all_scheduler_tasks()
172
196
  scheduled_tasks = filter_scheduled_tasks(scheduled_tasks, error_handler, filter_by)
173
197
  scheduled_tasks = sort_scheduled_tasks(scheduled_tasks, error_handler, sort_by)
198
+ scheduled_tasks = enrich_with_workflow_id(scheduled_tasks)
174
199
 
175
200
  total = len(scheduled_tasks)
176
201
  paginated_tasks = scheduled_tasks[after : after + first + 1]
@@ -178,6 +203,7 @@ def get_scheduler_tasks(
178
203
  return [
179
204
  ScheduledTask(
180
205
  id=task.id,
206
+ workflow_id=task.workflow_id,
181
207
  name=task.name,
182
208
  next_run_time=task.next_run_time,
183
209
  trigger=str(task.trigger),