orchestrator-core 4.7.1__tar.gz → 4.8.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 (392) hide show
  1. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/PKG-INFO +4 -4
  2. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/__init__.py +1 -1
  3. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/search.py +17 -2
  4. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/models.py +42 -12
  5. orchestrator_core-4.8.0rc1/orchestrator/migrations/versions/schema/2026-01-12_d69e10434a04_convert_unlimited_text_fields_to_.py +32 -0
  6. orchestrator_core-4.8.0rc1/orchestrator/migrations/versions/schema/2026-01-12_d69e10434a04_convert_unlimited_text_fields_to__downgrade.sql +138 -0
  7. orchestrator_core-4.8.0rc1/orchestrator/migrations/versions/schema/2026-01-12_d69e10434a04_convert_unlimited_text_fields_to__upgrade.sql +153 -0
  8. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/product.py +4 -2
  9. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/product_block.py +4 -2
  10. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/resource_type.py +4 -2
  11. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/search.py +7 -0
  12. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/workflow.py +3 -2
  13. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/query/engine.py +41 -7
  14. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/query/results.py +22 -2
  15. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/processes.py +9 -4
  16. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/modify_note.py +6 -1
  17. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/pyproject.toml +3 -3
  18. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/LICENSE +0 -0
  19. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/README.md +0 -0
  20. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/agentic_app.py +0 -0
  21. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/__init__.py +0 -0
  22. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/__init__.py +0 -0
  23. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/api.py +0 -0
  24. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
  25. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/agent.py +0 -0
  26. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/health.py +0 -0
  27. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/processes.py +0 -0
  28. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
  29. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/products.py +0 -0
  30. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
  31. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/schedules.py +0 -0
  32. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
  33. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
  34. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/subscriptions.py +0 -0
  35. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
  36. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/user.py +0 -0
  37. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
  38. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
  39. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/error_handling.py +0 -0
  40. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/helpers.py +0 -0
  41. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/api/models.py +0 -0
  42. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/app.py +0 -0
  43. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/__init__.py +0 -0
  44. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/database.py +0 -0
  45. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
  46. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
  47. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/domain_gen_helpers/helpers.py +0 -0
  48. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +0 -0
  49. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
  50. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +0 -0
  51. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/domain_gen_helpers/types.py +0 -0
  52. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generate.py +0 -0
  53. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/__init__.py +0 -0
  54. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/custom_templates/README +0 -0
  55. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
  56. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
  57. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
  58. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
  59. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
  60. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
  61. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
  62. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
  63. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
  64. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/__init__.py +0 -0
  65. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/enums.py +0 -0
  66. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/helpers.py +0 -0
  67. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/migration.py +0 -0
  68. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/product.py +0 -0
  69. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/product_block.py +0 -0
  70. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/settings.py +0 -0
  71. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/translations.py +0 -0
  72. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/unittest.py +0 -0
  73. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/validations.py +0 -0
  74. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/generator/workflow.py +0 -0
  75. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
  76. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
  77. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
  78. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
  79. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
  80. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
  81. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
  82. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
  83. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
  84. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
  85. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
  86. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
  87. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/enums.j2 +0 -0
  88. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
  89. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
  90. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/macros.j2 +0 -0
  91. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
  92. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
  93. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/product.j2 +0 -0
  94. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
  95. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
  96. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
  97. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
  98. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
  99. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
  100. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
  101. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
  102. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
  103. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
  104. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
  105. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/helpers/__init__.py +0 -0
  106. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/helpers/input_helpers.py +0 -0
  107. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/helpers/print_helpers.py +0 -0
  108. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/main.py +0 -0
  109. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/migrate_domain_models.py +0 -0
  110. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/migrate_tasks.py +0 -0
  111. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/migrate_workflows.py +0 -0
  112. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/migration_helpers.py +0 -0
  113. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/scheduler.py +0 -0
  114. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/search/__init__.py +0 -0
  115. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/search/display.py +0 -0
  116. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/search/index_llm.py +0 -0
  117. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/search/resize_embedding.py +0 -0
  118. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/search/search_explore.py +0 -0
  119. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/cli/search/speedtest.py +0 -0
  120. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/config/__init__.py +0 -0
  121. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/config/assignee.py +0 -0
  122. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/__init__.py +0 -0
  123. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/database.py +0 -0
  124. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/filters/__init__.py +0 -0
  125. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/filters/filters.py +0 -0
  126. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/filters/process.py +0 -0
  127. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/filters/product.py +0 -0
  128. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/filters/product_block.py +0 -0
  129. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/filters/resource_type.py +0 -0
  130. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/filters/search_filters/__init__.py +0 -0
  131. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
  132. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/filters/subscription.py +0 -0
  133. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/filters/workflow.py +0 -0
  134. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/helpers.py +0 -0
  135. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/listeners.py +0 -0
  136. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/loaders.py +0 -0
  137. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/queries/__init__.py +0 -0
  138. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/queries/subscription.py +0 -0
  139. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/queries/subscription_instance.py +0 -0
  140. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/range/__init__.py +0 -0
  141. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/range/range.py +0 -0
  142. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/sorting/__init__.py +0 -0
  143. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/sorting/process.py +0 -0
  144. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/sorting/product.py +0 -0
  145. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/sorting/product_block.py +0 -0
  146. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/sorting/resource_type.py +0 -0
  147. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/sorting/sorting.py +0 -0
  148. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/sorting/subscription.py +0 -0
  149. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/db/sorting/workflow.py +0 -0
  150. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/devtools/__init__.py +0 -0
  151. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/devtools/populator.py +0 -0
  152. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/devtools/scripts/__init__.py +0 -0
  153. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/devtools/scripts/migrate_20.py +0 -0
  154. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/devtools/scripts/migrate_30.py +0 -0
  155. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/devtools/scripts/shared.py +0 -0
  156. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/distlock/__init__.py +0 -0
  157. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/distlock/distlock_manager.py +0 -0
  158. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/distlock/managers/__init__.py +0 -0
  159. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
  160. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
  161. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/domain/__init__.py +0 -0
  162. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/domain/base.py +0 -0
  163. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/domain/context_cache.py +0 -0
  164. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/domain/customer_description.py +0 -0
  165. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/domain/helpers.py +0 -0
  166. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/domain/lifecycle.py +0 -0
  167. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/domain/subscription_instance_transform.py +0 -0
  168. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/exception_handlers.py +0 -0
  169. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/forms/__init__.py +0 -0
  170. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/forms/validators/__init__.py +0 -0
  171. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/forms/validators/customer_contact_list.py +0 -0
  172. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/forms/validators/customer_id.py +0 -0
  173. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/forms/validators/display_subscription.py +0 -0
  174. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/forms/validators/network_type_validators.py +0 -0
  175. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/forms/validators/product_id.py +0 -0
  176. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/__init__.py +0 -0
  177. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/autoregistration.py +0 -0
  178. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/extensions/__init__.py +0 -0
  179. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/extensions/model_cache.py +0 -0
  180. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/extensions/stats.py +0 -0
  181. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/loaders/__init__.py +0 -0
  182. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/loaders/subscriptions.py +0 -0
  183. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/mutations/customer_description.py +0 -0
  184. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/mutations/start_process.py +0 -0
  185. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/pagination.py +0 -0
  186. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/__init__.py +0 -0
  187. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/customer.py +0 -0
  188. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/helpers.py +0 -0
  189. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/process.py +0 -0
  190. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/product.py +0 -0
  191. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/product_block.py +0 -0
  192. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/resource_type.py +0 -0
  193. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/scheduled_tasks.py +0 -0
  194. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/settings.py +0 -0
  195. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/subscription.py +0 -0
  196. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/version.py +0 -0
  197. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/resolvers/workflow.py +0 -0
  198. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schema.py +0 -0
  199. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/__init__.py +0 -0
  200. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/customer.py +0 -0
  201. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/customer_description.py +0 -0
  202. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/errors.py +0 -0
  203. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/fixed_input.py +0 -0
  204. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/helpers.py +0 -0
  205. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/process.py +0 -0
  206. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/product.py +0 -0
  207. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/product_block.py +0 -0
  208. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/resource_type.py +0 -0
  209. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/scheduled_task.py +0 -0
  210. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/settings.py +0 -0
  211. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
  212. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/subscription.py +0 -0
  213. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/version.py +0 -0
  214. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/schemas/workflow.py +0 -0
  215. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/types.py +0 -0
  216. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/utils/__init__.py +0 -0
  217. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
  218. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
  219. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
  220. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
  221. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
  222. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
  223. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/utils/override_class.py +0 -0
  224. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
  225. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/llm_settings.py +0 -0
  226. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/log_config.py +0 -0
  227. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/metrics/__init__.py +0 -0
  228. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/metrics/engine.py +0 -0
  229. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/metrics/init.py +0 -0
  230. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/metrics/processes.py +0 -0
  231. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/metrics/subscriptions.py +0 -0
  232. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/README +0 -0
  233. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/__init__.py +0 -0
  234. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/alembic.ini +0 -0
  235. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/env.py +0 -0
  236. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/helpers.py +0 -0
  237. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/script.py.mako +0 -0
  238. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
  239. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/templates/env.py.j2 +0 -0
  240. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
  241. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
  242. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
  243. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
  244. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
  245. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
  246. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
  247. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
  248. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
  249. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
  250. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
  251. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
  252. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
  253. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
  254. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
  255. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
  256. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
  257. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
  258. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
  259. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
  260. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
  261. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +0 -0
  262. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +0 -0
  263. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py +0 -0
  264. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql +0 -0
  265. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +0 -0
  266. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +0 -0
  267. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-07-01_93fc5834c7e5_changed_timestamping_fields_in_process_steps.py +0 -0
  268. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-07-04_4b58e336d1bf_deprecating_workflow_target_in_.py +0 -0
  269. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-07-28_850dccac3b02_update_description_of_resume_workflows_.py +0 -0
  270. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-11-18_961eddbd4c13_create_linker_table_workflow_apscheduler.py +0 -0
  271. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/migrations/versions/schema/2025-12-10_9736496e3eba_set_is_task_true_on_certain_tasks.py +0 -0
  272. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/py.typed +0 -0
  273. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schedules/__init__.py +0 -0
  274. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schedules/scheduler.py +0 -0
  275. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schedules/scheduling.py +0 -0
  276. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schedules/service.py +0 -0
  277. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schedules/validate_products.py +0 -0
  278. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/__init__.py +0 -0
  279. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/base.py +0 -0
  280. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/engine_settings.py +0 -0
  281. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/fixed_input.py +0 -0
  282. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/problem_detail.py +0 -0
  283. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/process.py +0 -0
  284. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/schedules.py +0 -0
  285. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/search_requests.py +0 -0
  286. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/subscription.py +0 -0
  287. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/schemas/subscription_descriptions.py +0 -0
  288. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/__init__.py +0 -0
  289. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/agent/__init__.py +0 -0
  290. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/agent/agent.py +0 -0
  291. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/agent/handlers.py +0 -0
  292. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/agent/json_patch.py +0 -0
  293. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/agent/prompts.py +0 -0
  294. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/agent/state.py +0 -0
  295. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/agent/tools.py +0 -0
  296. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/agent/validation.py +0 -0
  297. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/aggregations/__init__.py +0 -0
  298. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/aggregations/base.py +0 -0
  299. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/core/__init__.py +0 -0
  300. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/core/embedding.py +0 -0
  301. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/core/exceptions.py +0 -0
  302. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/core/types.py +0 -0
  303. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/core/validators.py +0 -0
  304. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/docs/index.md +0 -0
  305. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/docs/running_local_text_embedding_inference.md +0 -0
  306. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/filters/__init__.py +0 -0
  307. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/filters/base.py +0 -0
  308. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/filters/date_filters.py +0 -0
  309. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/filters/definitions.py +0 -0
  310. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/filters/ltree_filters.py +0 -0
  311. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/filters/numeric_filter.py +0 -0
  312. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/indexing/__init__.py +0 -0
  313. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/indexing/indexer.py +0 -0
  314. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/indexing/registry.py +0 -0
  315. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/indexing/tasks.py +0 -0
  316. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/indexing/traverse.py +0 -0
  317. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/llm_migration.py +0 -0
  318. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/query/__init__.py +0 -0
  319. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/query/builder.py +0 -0
  320. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/query/exceptions.py +0 -0
  321. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/query/export.py +0 -0
  322. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/query/mixins.py +0 -0
  323. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/query/queries.py +0 -0
  324. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/query/state.py +0 -0
  325. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/query/validation.py +0 -0
  326. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/retrieval/__init__.py +0 -0
  327. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/retrieval/pagination.py +0 -0
  328. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/retrieval/retrievers/__init__.py +0 -0
  329. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/retrieval/retrievers/base.py +0 -0
  330. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/retrieval/retrievers/fuzzy.py +0 -0
  331. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/retrieval/retrievers/hybrid.py +0 -0
  332. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/retrieval/retrievers/process.py +0 -0
  333. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/retrieval/retrievers/semantic.py +0 -0
  334. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/search/retrieval/retrievers/structured.py +0 -0
  335. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/security.py +0 -0
  336. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/__init__.py +0 -0
  337. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/executors/__init__.py +0 -0
  338. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/executors/celery.py +0 -0
  339. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/executors/threadpool.py +0 -0
  340. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/fixed_inputs.py +0 -0
  341. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/input_state.py +0 -0
  342. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/process_broadcast_thread.py +0 -0
  343. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/products.py +0 -0
  344. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/resource_types.py +0 -0
  345. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/settings.py +0 -0
  346. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/settings_env_variables.py +0 -0
  347. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/subscription_relations.py +0 -0
  348. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/subscriptions.py +0 -0
  349. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/tasks.py +0 -0
  350. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/translations.py +0 -0
  351. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/services/workflows.py +0 -0
  352. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/settings.py +0 -0
  353. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/targets.py +0 -0
  354. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/types.py +0 -0
  355. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/__init__.py +0 -0
  356. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/auth.py +0 -0
  357. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/crypt.py +0 -0
  358. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/datetime.py +0 -0
  359. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/deprecation_logger.py +0 -0
  360. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/docs.py +0 -0
  361. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/enrich_process.py +0 -0
  362. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/errors.py +0 -0
  363. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/expose_settings.py +0 -0
  364. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/fixed_inputs.py +0 -0
  365. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/functional.py +0 -0
  366. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/get_subscription_dict.py +0 -0
  367. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/get_updated_properties.py +0 -0
  368. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/helpers.py +0 -0
  369. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/json.py +0 -0
  370. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/redis.py +0 -0
  371. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/redis_client.py +0 -0
  372. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/search_query.py +0 -0
  373. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/state.py +0 -0
  374. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/strings.py +0 -0
  375. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/utils/validate_data_version.py +0 -0
  376. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/version.py +0 -0
  377. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/websocket/__init__.py +0 -0
  378. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
  379. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
  380. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/websocket/websocket_manager.py +0 -0
  381. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflow.py +0 -0
  382. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/__init__.py +0 -0
  383. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/removed_workflow.py +0 -0
  384. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/steps.py +0 -0
  385. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/tasks/__init__.py +0 -0
  386. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
  387. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
  388. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/tasks/validate_product_type.py +0 -0
  389. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/tasks/validate_products.py +0 -0
  390. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/tasks/validate_subscriptions.py +0 -0
  391. {orchestrator_core-4.7.1 → orchestrator_core-4.8.0rc1}/orchestrator/workflows/translations/en-GB.json +0 -0
  392. {orchestrator_core-4.7.1 → orchestrator_core-4.8.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.7.1
3
+ Version: 4.8.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
@@ -31,7 +31,7 @@ Classifier: Topic :: Software Development :: Libraries
31
31
  Classifier: Topic :: Software Development
32
32
  Classifier: Typing :: Typed
33
33
  License-File: LICENSE
34
- Requires-Dist: alembic==1.18.1
34
+ Requires-Dist: alembic==1.18.3
35
35
  Requires-Dist: anyio>=3.7.0
36
36
  Requires-Dist: apscheduler>=3.11.0
37
37
  Requires-Dist: click==8.*
@@ -44,7 +44,7 @@ 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.5
47
+ Requires-Dist: orjson==3.11.7
48
48
  Requires-Dist: pgvector>=0.4.1
49
49
  Requires-Dist: prometheus-client==0.24.1
50
50
  Requires-Dist: psycopg2-binary==2.9.11
@@ -57,7 +57,7 @@ Requires-Dist: pytz==2025.2
57
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
- Requires-Dist: sqlalchemy==2.0.45
60
+ Requires-Dist: sqlalchemy==2.0.46
61
61
  Requires-Dist: sqlalchemy-utils==0.42.1
62
62
  Requires-Dist: strawberry-graphql>=0.281.0,<0.285.0
63
63
  Requires-Dist: structlog>=25.4.0
@@ -13,7 +13,7 @@
13
13
 
14
14
  """This is the orchestrator workflow engine."""
15
15
 
16
- __version__ = "4.7.1"
16
+ __version__ = "4.8.0rc1"
17
17
 
18
18
 
19
19
  from structlog import get_logger
@@ -16,6 +16,7 @@ from fastapi import APIRouter, HTTPException, Query, status
16
16
 
17
17
  from orchestrator.db import db
18
18
  from orchestrator.schemas.search import (
19
+ CursorInfoSchema,
19
20
  ExportResponse,
20
21
  PageInfoSchema,
21
22
  PathsResponse,
@@ -81,10 +82,24 @@ async def _perform_search_and_fetch(
81
82
 
82
83
  next_page_cursor = encode_next_page_cursor(search_response, page_cursor, query)
83
84
  has_next_page = next_page_cursor is not None
84
- page_info = PageInfoSchema(has_next_page=has_next_page, next_page_cursor=next_page_cursor)
85
+ page_info = PageInfoSchema(
86
+ has_next_page=has_next_page,
87
+ next_page_cursor=next_page_cursor,
88
+ )
89
+
90
+ cursor_info = None
91
+ if search_response.total_items:
92
+ cursor_info = CursorInfoSchema(
93
+ total_items=search_response.total_items,
94
+ start_cursor=search_response.start_cursor,
95
+ end_cursor=search_response.end_cursor,
96
+ )
85
97
 
86
98
  return SearchResultsSchema(
87
- data=search_response.results, page_info=page_info, search_metadata=search_response.metadata
99
+ data=search_response.results,
100
+ page_info=page_info,
101
+ search_metadata=search_response.metadata,
102
+ cursor=cursor_info,
88
103
  )
89
104
  except (InvalidCursorError, ValueError) as e:
90
105
  raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail=str(e))
@@ -38,7 +38,6 @@ from sqlalchemy import (
38
38
  Select,
39
39
  String,
40
40
  Table,
41
- Text,
42
41
  TypeDecorator,
43
42
  UniqueConstraint,
44
43
  select,
@@ -69,6 +68,37 @@ logger = structlog.get_logger(__name__)
69
68
  TAG_LENGTH = 20
70
69
  STATUS_LENGTH = 255
71
70
 
71
+ # Field length limits chosen based on expected usage patterns
72
+ # These values are intended to be reasonable, but give lots of wiggle room
73
+ # If these values are updated, they also need to be updated in a migration, as in migration d69e10434a04
74
+ NOTE_LENGTH = 5000
75
+ DESCRIPTION_LENGTH = 2000
76
+ FAILED_REASON_LENGTH = 10000
77
+ TRACEBACK_LENGTH = 50000
78
+ RESOURCE_VALUE_LENGTH = 10000
79
+ DOMAIN_MODEL_ATTR_LENGTH = 255
80
+
81
+
82
+ class StringThatAutoConvertsToNullWhenEmpty(TypeDecorator):
83
+ """A String type that converts empty strings to NULL on save."""
84
+
85
+ impl = String
86
+ cache_ok = True
87
+ python_type = str
88
+
89
+ def __init__(self, length: int | None = None):
90
+ super().__init__(length)
91
+
92
+ def process_bind_param(self, value: str | None, dialect: Dialect) -> str | None:
93
+ """Called when saving to DB - convert empty/whitespace to NULL."""
94
+ if value is not None and value.strip() == "":
95
+ return None
96
+ return value
97
+
98
+ def process_result_value(self, value: str | None, dialect: Dialect) -> str | None:
99
+ """Called when loading from DB - return as-is."""
100
+ return value
101
+
72
102
 
73
103
  class UtcTimestampError(Exception, DontWrapMixin):
74
104
  pass
@@ -122,8 +152,8 @@ class ProcessTable(BaseModel):
122
152
  last_modified_at = mapped_column(
123
153
  UtcTimestamp, server_default=text("current_timestamp()"), onupdate=nowtz, nullable=False
124
154
  )
125
- failed_reason = mapped_column(Text())
126
- traceback = mapped_column(Text())
155
+ failed_reason = mapped_column(String(FAILED_REASON_LENGTH))
156
+ traceback = mapped_column(String(TRACEBACK_LENGTH))
127
157
  created_by = mapped_column(String(255), nullable=True)
128
158
  is_task = mapped_column(Boolean, nullable=False, server_default=text("false"), index=True)
129
159
 
@@ -223,7 +253,7 @@ class ProductTable(BaseModel):
223
253
 
224
254
  product_id = mapped_column(UUIDType, server_default=text("uuid_generate_v4()"), primary_key=True)
225
255
  name = mapped_column(String(), nullable=False, unique=True)
226
- description = mapped_column(Text(), nullable=False)
256
+ description = mapped_column(String(DESCRIPTION_LENGTH), nullable=False)
227
257
  product_type = mapped_column(String(255), nullable=False)
228
258
  tag = mapped_column(String(TAG_LENGTH), nullable=False, index=True)
229
259
  status = mapped_column(String(STATUS_LENGTH), nullable=False)
@@ -302,7 +332,7 @@ class ProductBlockTable(BaseModel):
302
332
 
303
333
  product_block_id = mapped_column(UUIDType, server_default=text("uuid_generate_v4()"), primary_key=True)
304
334
  name = mapped_column(String(), nullable=False, unique=True)
305
- description = mapped_column(Text(), nullable=False)
335
+ description = mapped_column(String(DESCRIPTION_LENGTH), nullable=False)
306
336
  tag = mapped_column(String(TAG_LENGTH))
307
337
  status = mapped_column(String(STATUS_LENGTH))
308
338
  created_at = mapped_column(UtcTimestamp, nullable=False, server_default=text("current_timestamp()"))
@@ -401,7 +431,7 @@ class ResourceTypeTable(BaseModel):
401
431
 
402
432
  resource_type_id = mapped_column(UUIDType, server_default=text("uuid_generate_v4()"), primary_key=True)
403
433
  resource_type = mapped_column(String(510), nullable=False, unique=True)
404
- description = mapped_column(Text())
434
+ description = mapped_column(String(DESCRIPTION_LENGTH))
405
435
 
406
436
  product_blocks = relationship(
407
437
  "ProductBlockTable", secondary=product_block_resource_type_association, back_populates="resource_types"
@@ -414,7 +444,7 @@ class WorkflowTable(BaseModel):
414
444
  workflow_id = mapped_column(UUIDType, server_default=text("uuid_generate_v4()"), primary_key=True)
415
445
  name = mapped_column(String(), nullable=False, unique=True)
416
446
  target = mapped_column(String(), nullable=False)
417
- description = mapped_column(Text(), nullable=False)
447
+ description = mapped_column(String(DESCRIPTION_LENGTH), nullable=False)
418
448
  created_at = mapped_column(UtcTimestamp, nullable=False, server_default=text("current_timestamp()"))
419
449
  deleted_at = mapped_column(UtcTimestamp, deferred=True)
420
450
 
@@ -452,7 +482,7 @@ class SubscriptionInstanceRelationTable(BaseModel):
452
482
 
453
483
  # Needed to make sure subscription instance is populated in the right domain model attribute, if more than one
454
484
  # attribute uses the same product block model.
455
- domain_model_attr = Column(Text())
485
+ domain_model_attr = Column(String(DOMAIN_MODEL_ATTR_LENGTH))
456
486
 
457
487
  in_use_by: Mapped[SubscriptionInstanceTable] = relationship(
458
488
  "SubscriptionInstanceTable", back_populates="depends_on_block_relations", foreign_keys=[in_use_by_id]
@@ -559,7 +589,7 @@ class SubscriptionInstanceValueTable(BaseModel):
559
589
  resource_type_id = mapped_column(
560
590
  UUIDType, ForeignKey("resource_types.resource_type_id"), nullable=False, index=True
561
591
  )
562
- value = mapped_column(Text(), nullable=False)
592
+ value = mapped_column(String(RESOURCE_VALUE_LENGTH), nullable=False)
563
593
 
564
594
  resource_type = relationship("ResourceTypeTable", lazy="subquery")
565
595
  subscription_instance = relationship("SubscriptionInstanceTable", back_populates="values")
@@ -587,7 +617,7 @@ class SubscriptionCustomerDescriptionTable(BaseModel):
587
617
  index=True,
588
618
  )
589
619
  customer_id = mapped_column(String, nullable=False, index=True)
590
- description = mapped_column(Text(), nullable=False)
620
+ description = mapped_column(String(DESCRIPTION_LENGTH), nullable=False)
591
621
  created_at = mapped_column(UtcTimestamp, nullable=False, server_default=text("current_timestamp()"))
592
622
  version = mapped_column(Integer, nullable=False, server_default="1")
593
623
 
@@ -600,14 +630,14 @@ class SubscriptionTable(BaseModel):
600
630
  subscription_id = mapped_column(
601
631
  UUIDType, server_default=text("uuid_generate_v4()"), primary_key=True, nullable=False
602
632
  )
603
- description = mapped_column(Text(), nullable=False)
633
+ description = mapped_column(String(DESCRIPTION_LENGTH), nullable=False)
604
634
  status = mapped_column(String(STATUS_LENGTH), nullable=False, index=True)
605
635
  product_id = mapped_column(UUIDType, ForeignKey("products.product_id"), nullable=False, index=True)
606
636
  customer_id = mapped_column(String, index=True, nullable=False)
607
637
  insync = mapped_column(Boolean(), nullable=False)
608
638
  start_date = mapped_column(UtcTimestamp, nullable=True)
609
639
  end_date = mapped_column(UtcTimestamp)
610
- note = mapped_column(Text())
640
+ note = mapped_column(StringThatAutoConvertsToNullWhenEmpty(NOTE_LENGTH))
611
641
  version = mapped_column(Integer, nullable=False, server_default="1")
612
642
 
613
643
  product = relationship("ProductTable", foreign_keys=[product_id])
@@ -0,0 +1,32 @@
1
+ """Convert unlimited text fields to limited nullable strings and normalize empty subscription notes.
2
+
3
+ Revision ID: d69e10434a04
4
+ Revises: 9736496e3eba
5
+ Create Date: 2026-01-12 14:17:58.255515
6
+
7
+ """
8
+
9
+ from pathlib import Path
10
+
11
+ import sqlalchemy as sa
12
+ from alembic import op
13
+
14
+ # revision identifiers, used by Alembic.
15
+ revision = "d69e10434a04"
16
+ down_revision = "9736496e3eba"
17
+ branch_labels = None
18
+ depends_on = None
19
+
20
+
21
+ def upgrade() -> None:
22
+ conn = op.get_bind()
23
+ revision_file_path = Path(__file__.replace(".py", "_upgrade.sql"))
24
+ with open(revision_file_path) as f:
25
+ conn.execute(sa.text(f.read()))
26
+
27
+
28
+ def downgrade() -> None:
29
+ conn = op.get_bind()
30
+ revision_file_path = Path(__file__.replace(".py", "_downgrade.sql"))
31
+ with open(revision_file_path) as f:
32
+ conn.execute(sa.text(f.read()))
@@ -0,0 +1,138 @@
1
+ -- Downgrade: Revert limited nullable strings back to unlimited text fields.
2
+ -- Revision ID: d69e10434a04
3
+
4
+ -- Drop triggers first
5
+ DROP TRIGGER IF EXISTS fi_refresh_search ON fixed_inputs;
6
+ DROP TRIGGER IF EXISTS products_refresh_search ON products;
7
+ DROP TRIGGER IF EXISTS sub_cust_desc_refresh_search ON subscription_customer_descriptions;
8
+ DROP TRIGGER IF EXISTS siv_refresh_search ON subscription_instance_values;
9
+ DROP TRIGGER IF EXISTS sub_refresh_search ON subscriptions;
10
+
11
+ -- Drop the refresh function
12
+ DROP FUNCTION IF EXISTS refresh_subscriptions_search_view();
13
+
14
+ -- Drop the materialized view (CASCADE will drop indexes)
15
+ DROP MATERIALIZED VIEW IF EXISTS subscriptions_search CASCADE;
16
+
17
+ -- Alter column types back from VARCHAR to TEXT
18
+ ALTER TABLE subscriptions ALTER COLUMN note TYPE TEXT;
19
+ ALTER TABLE subscriptions ALTER COLUMN description TYPE TEXT;
20
+ ALTER TABLE processes ALTER COLUMN failed_reason TYPE TEXT;
21
+ ALTER TABLE processes ALTER COLUMN traceback TYPE TEXT;
22
+ ALTER TABLE products ALTER COLUMN description TYPE TEXT;
23
+ ALTER TABLE product_blocks ALTER COLUMN description TYPE TEXT;
24
+ ALTER TABLE resource_types ALTER COLUMN description TYPE TEXT;
25
+ ALTER TABLE workflows ALTER COLUMN description TYPE TEXT;
26
+ ALTER TABLE subscription_customer_descriptions ALTER COLUMN description TYPE TEXT;
27
+ ALTER TABLE subscription_instance_values ALTER COLUMN value TYPE TEXT;
28
+ ALTER TABLE subscription_instance_relations ALTER COLUMN domain_model_attr TYPE TEXT;
29
+
30
+ -- Recreate the materialized view
31
+ CREATE MATERIALIZED VIEW subscriptions_search AS
32
+ WITH rt_info AS (SELECT s.subscription_id,
33
+ concat_ws(
34
+ ' ',
35
+ string_agg(rt.resource_type || ' ' || siv.value, ' '),
36
+ string_agg(distinct 'subscription_instance_id' || ':' || si.subscription_instance_id, ' ')
37
+ ) AS rt_info
38
+ FROM subscription_instance_values siv
39
+ JOIN resource_types rt ON siv.resource_type_id = rt.resource_type_id
40
+ JOIN subscription_instances si ON siv.subscription_instance_id = si.subscription_instance_id
41
+ JOIN subscriptions s ON si.subscription_id = s.subscription_id
42
+ GROUP BY s.subscription_id),
43
+ sub_prod_info AS (SELECT s.subscription_id,
44
+ array_to_string(
45
+ ARRAY ['subscription_id:' || s.subscription_id,
46
+ 'status:' || s.status,
47
+ 'insync:' || s.insync,
48
+ 'subscription_description:' || s.description,
49
+ 'note:' || coalesce(s.note, ''),
50
+ 'customer_id:' || s.customer_id,
51
+ 'product_id:' || s.product_id],
52
+ ' '
53
+ ) AS sub_info,
54
+ array_to_string(
55
+ ARRAY ['product_name:' || p.name,
56
+ 'product_description:' || p.description,
57
+ 'tag:' || p.tag,
58
+ 'product_type:', p.product_type],
59
+ ' '
60
+ ) AS prod_info
61
+ FROM subscriptions s
62
+ JOIN products p ON s.product_id = p.product_id),
63
+ fi_info AS (SELECT s.subscription_id,
64
+ string_agg(fi.name || ':' || fi.value, ' ') AS fi_info
65
+ FROM subscriptions s
66
+ JOIN products p ON s.product_id = p.product_id
67
+ JOIN fixed_inputs fi ON p.product_id = fi.product_id
68
+ GROUP BY s.subscription_id),
69
+ cust_info AS (SELECT s.subscription_id,
70
+ string_agg('customer_description: ' || scd.description, ' ') AS cust_info
71
+ FROM subscriptions s
72
+ JOIN subscription_customer_descriptions scd ON s.subscription_id = scd.subscription_id
73
+ GROUP BY s.subscription_id)
74
+ -- to_tsvector handles parsing of hyphened words in a peculiar way and is inconsistent with how to_tsquery parses it in Postgres <14
75
+ -- Replacing all hyphens with underscores makes the parsing more predictable and removes some issues arising when searching for subscription ids for example
76
+ -- See: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=0c4f355c6a5fd437f71349f2f3d5d491382572b7
77
+ SELECT s.subscription_id,
78
+ to_tsvector(
79
+ 'simple',
80
+ replace(
81
+ concat_ws(
82
+ ' ',
83
+ spi.sub_info,
84
+ spi.prod_info,
85
+ fi.fi_info,
86
+ rti.rt_info,
87
+ ci.cust_info,
88
+ md.metadata::text
89
+ ),
90
+ '-', '_')
91
+ ) as tsv
92
+ FROM subscriptions s
93
+ LEFT JOIN sub_prod_info spi ON s.subscription_id = spi.subscription_id
94
+ LEFT JOIN fi_info fi ON s.subscription_id = fi.subscription_id
95
+ LEFT JOIN rt_info rti ON s.subscription_id = rti.subscription_id
96
+ LEFT JOIN cust_info ci ON s.subscription_id = ci.subscription_id
97
+ LEFT JOIN subscription_metadata md ON s.subscription_id = md.subscription_id;
98
+
99
+ -- Create indexes
100
+ CREATE INDEX subscriptions_search_tsv_idx ON subscriptions_search USING GIN (tsv);
101
+ CREATE UNIQUE INDEX subscriptions_search_subscription_id_idx ON subscriptions_search (subscription_id);
102
+
103
+ -- Create refresh function with epoch-based throttling
104
+ CREATE OR REPLACE FUNCTION refresh_subscriptions_search_view()
105
+ RETURNS TRIGGER
106
+ LANGUAGE plpgsql
107
+ AS
108
+ $$
109
+ DECLARE
110
+ should_refresh bool;
111
+ current_epoch int;
112
+ last_refresh_epoch int;
113
+ comment_sql text;
114
+ BEGIN
115
+ SELECT extract(epoch from now())::int INTO current_epoch;
116
+ SELECT coalesce(pg_catalog.obj_description('subscriptions_search'::regclass)::int, 0) INTO last_refresh_epoch;
117
+
118
+ SELECT (current_epoch - last_refresh_epoch) > 120 INTO should_refresh;
119
+
120
+ IF should_refresh THEN
121
+ REFRESH MATERIALIZED VIEW CONCURRENTLY subscriptions_search;
122
+
123
+ comment_sql := 'COMMENT ON MATERIALIZED VIEW subscriptions_search IS ' || quote_literal(current_epoch);
124
+ EXECUTE comment_sql;
125
+ END IF;
126
+ RETURN NULL;
127
+ END;
128
+ $$;
129
+
130
+ -- Create triggers
131
+ CREATE CONSTRAINT TRIGGER fi_refresh_search AFTER UPDATE ON fixed_inputs DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION refresh_subscriptions_search_view();
132
+ CREATE CONSTRAINT TRIGGER products_refresh_search AFTER UPDATE ON products DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION refresh_subscriptions_search_view();
133
+ CREATE CONSTRAINT TRIGGER sub_cust_desc_refresh_search AFTER INSERT OR UPDATE OR DELETE ON subscription_customer_descriptions DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION refresh_subscriptions_search_view();
134
+ CREATE CONSTRAINT TRIGGER siv_refresh_search AFTER INSERT OR UPDATE OR DELETE ON subscription_instance_values DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION refresh_subscriptions_search_view();
135
+ CREATE CONSTRAINT TRIGGER sub_refresh_search AFTER INSERT OR UPDATE OR DELETE ON subscriptions DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION refresh_subscriptions_search_view();
136
+
137
+ -- Refresh the materialized view
138
+ REFRESH MATERIALIZED VIEW subscriptions_search;
@@ -0,0 +1,153 @@
1
+ -- Convert unlimited text fields to limited nullable strings and normalize empty subscription notes.
2
+ -- Revision ID: d69e10434a04
3
+
4
+ -- Field length limits chosen based on expected usage patterns
5
+ -- These values are intended to be reasonable, but give lots of wiggle room
6
+ -- If these values are updated, they also need to be updated in orchestrator-core/orchestrator/db/models.py
7
+ -- NOTE_LENGTH = 5000
8
+ -- DESCRIPTION_LENGTH = 2000
9
+ -- FAILED_REASON_LENGTH = 10000
10
+ -- TRACEBACK_LENGTH = 50000
11
+ -- RESOURCE_VALUE_LENGTH = 10000
12
+ -- DOMAIN_MODEL_ATTR_LENGTH = 255
13
+
14
+ -- Drop triggers first
15
+ DROP TRIGGER IF EXISTS fi_refresh_search ON fixed_inputs;
16
+ DROP TRIGGER IF EXISTS products_refresh_search ON products;
17
+ DROP TRIGGER IF EXISTS sub_cust_desc_refresh_search ON subscription_customer_descriptions;
18
+ DROP TRIGGER IF EXISTS siv_refresh_search ON subscription_instance_values;
19
+ DROP TRIGGER IF EXISTS sub_refresh_search ON subscriptions;
20
+
21
+ -- Drop the refresh function
22
+ DROP FUNCTION IF EXISTS refresh_subscriptions_search_view();
23
+
24
+ -- Drop the materialized view (CASCADE will drop indexes)
25
+ DROP MATERIALIZED VIEW IF EXISTS subscriptions_search CASCADE;
26
+
27
+ -- Normalize empty strings to NULL before altering column types
28
+ UPDATE subscriptions
29
+ SET note = NULL
30
+ WHERE note IS NOT NULL AND TRIM(note) = '';
31
+
32
+ -- Alter column types from TEXT to VARCHAR with limits
33
+ ALTER TABLE subscriptions ALTER COLUMN note TYPE VARCHAR(5000);
34
+ ALTER TABLE subscriptions ALTER COLUMN description TYPE VARCHAR(2000);
35
+ ALTER TABLE processes ALTER COLUMN failed_reason TYPE VARCHAR(10000);
36
+ ALTER TABLE processes ALTER COLUMN traceback TYPE VARCHAR(50000);
37
+ ALTER TABLE products ALTER COLUMN description TYPE VARCHAR(2000);
38
+ ALTER TABLE product_blocks ALTER COLUMN description TYPE VARCHAR(2000);
39
+ ALTER TABLE resource_types ALTER COLUMN description TYPE VARCHAR(2000);
40
+ ALTER TABLE workflows ALTER COLUMN description TYPE VARCHAR(2000);
41
+ ALTER TABLE subscription_customer_descriptions ALTER COLUMN description TYPE VARCHAR(2000);
42
+ ALTER TABLE subscription_instance_values ALTER COLUMN value TYPE VARCHAR(10000);
43
+ ALTER TABLE subscription_instance_relations ALTER COLUMN domain_model_attr TYPE VARCHAR(255);
44
+
45
+ -- Recreate the materialized view
46
+ CREATE MATERIALIZED VIEW subscriptions_search AS
47
+ WITH rt_info AS (SELECT s.subscription_id,
48
+ concat_ws(
49
+ ' ',
50
+ string_agg(rt.resource_type || ' ' || siv.value, ' '),
51
+ string_agg(distinct 'subscription_instance_id' || ':' || si.subscription_instance_id, ' ')
52
+ ) AS rt_info
53
+ FROM subscription_instance_values siv
54
+ JOIN resource_types rt ON siv.resource_type_id = rt.resource_type_id
55
+ JOIN subscription_instances si ON siv.subscription_instance_id = si.subscription_instance_id
56
+ JOIN subscriptions s ON si.subscription_id = s.subscription_id
57
+ GROUP BY s.subscription_id),
58
+ sub_prod_info AS (SELECT s.subscription_id,
59
+ array_to_string(
60
+ ARRAY ['subscription_id:' || s.subscription_id,
61
+ 'status:' || s.status,
62
+ 'insync:' || s.insync,
63
+ 'subscription_description:' || s.description,
64
+ 'note:' || coalesce(s.note, ''),
65
+ 'customer_id:' || s.customer_id,
66
+ 'product_id:' || s.product_id],
67
+ ' '
68
+ ) AS sub_info,
69
+ array_to_string(
70
+ ARRAY ['product_name:' || p.name,
71
+ 'product_description:' || p.description,
72
+ 'tag:' || p.tag,
73
+ 'product_type:', p.product_type],
74
+ ' '
75
+ ) AS prod_info
76
+ FROM subscriptions s
77
+ JOIN products p ON s.product_id = p.product_id),
78
+ fi_info AS (SELECT s.subscription_id,
79
+ string_agg(fi.name || ':' || fi.value, ' ') AS fi_info
80
+ FROM subscriptions s
81
+ JOIN products p ON s.product_id = p.product_id
82
+ JOIN fixed_inputs fi ON p.product_id = fi.product_id
83
+ GROUP BY s.subscription_id),
84
+ cust_info AS (SELECT s.subscription_id,
85
+ string_agg('customer_description: ' || scd.description, ' ') AS cust_info
86
+ FROM subscriptions s
87
+ JOIN subscription_customer_descriptions scd ON s.subscription_id = scd.subscription_id
88
+ GROUP BY s.subscription_id)
89
+ -- to_tsvector handles parsing of hyphened words in a peculiar way and is inconsistent with how to_tsquery parses it in Postgres <14
90
+ -- Replacing all hyphens with underscores makes the parsing more predictable and removes some issues arising when searching for subscription ids for example
91
+ -- See: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=0c4f355c6a5fd437f71349f2f3d5d491382572b7
92
+ SELECT s.subscription_id,
93
+ to_tsvector(
94
+ 'simple',
95
+ replace(
96
+ concat_ws(
97
+ ' ',
98
+ spi.sub_info,
99
+ spi.prod_info,
100
+ fi.fi_info,
101
+ rti.rt_info,
102
+ ci.cust_info,
103
+ md.metadata::text
104
+ ),
105
+ '-', '_')
106
+ ) as tsv
107
+ FROM subscriptions s
108
+ LEFT JOIN sub_prod_info spi ON s.subscription_id = spi.subscription_id
109
+ LEFT JOIN fi_info fi ON s.subscription_id = fi.subscription_id
110
+ LEFT JOIN rt_info rti ON s.subscription_id = rti.subscription_id
111
+ LEFT JOIN cust_info ci ON s.subscription_id = ci.subscription_id
112
+ LEFT JOIN subscription_metadata md ON s.subscription_id = md.subscription_id;
113
+
114
+ -- Create indexes
115
+ CREATE INDEX subscriptions_search_tsv_idx ON subscriptions_search USING GIN (tsv);
116
+ CREATE UNIQUE INDEX subscriptions_search_subscription_id_idx ON subscriptions_search (subscription_id);
117
+
118
+ -- Create refresh function with epoch-based throttling
119
+ CREATE OR REPLACE FUNCTION refresh_subscriptions_search_view()
120
+ RETURNS TRIGGER
121
+ LANGUAGE plpgsql
122
+ AS
123
+ $$
124
+ DECLARE
125
+ should_refresh bool;
126
+ current_epoch int;
127
+ last_refresh_epoch int;
128
+ comment_sql text;
129
+ BEGIN
130
+ SELECT extract(epoch from now())::int INTO current_epoch;
131
+ SELECT coalesce(pg_catalog.obj_description('subscriptions_search'::regclass)::int, 0) INTO last_refresh_epoch;
132
+
133
+ SELECT (current_epoch - last_refresh_epoch) > 120 INTO should_refresh;
134
+
135
+ IF should_refresh THEN
136
+ REFRESH MATERIALIZED VIEW CONCURRENTLY subscriptions_search;
137
+
138
+ comment_sql := 'COMMENT ON MATERIALIZED VIEW subscriptions_search IS ' || quote_literal(current_epoch);
139
+ EXECUTE comment_sql;
140
+ END IF;
141
+ RETURN NULL;
142
+ END;
143
+ $$;
144
+
145
+ -- Create triggers
146
+ CREATE CONSTRAINT TRIGGER fi_refresh_search AFTER UPDATE ON fixed_inputs DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION refresh_subscriptions_search_view();
147
+ CREATE CONSTRAINT TRIGGER products_refresh_search AFTER UPDATE ON products DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION refresh_subscriptions_search_view();
148
+ CREATE CONSTRAINT TRIGGER sub_cust_desc_refresh_search AFTER INSERT OR UPDATE OR DELETE ON subscription_customer_descriptions DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION refresh_subscriptions_search_view();
149
+ CREATE CONSTRAINT TRIGGER siv_refresh_search AFTER INSERT OR UPDATE OR DELETE ON subscription_instance_values DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION refresh_subscriptions_search_view();
150
+ CREATE CONSTRAINT TRIGGER sub_refresh_search AFTER INSERT OR UPDATE OR DELETE ON subscriptions DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION refresh_subscriptions_search_view();
151
+
152
+ -- Refresh the materialized view
153
+ REFRESH MATERIALIZED VIEW subscriptions_search;
@@ -12,10 +12,12 @@
12
12
  # limitations under the License.
13
13
 
14
14
  from datetime import datetime
15
+ from typing import Annotated
15
16
  from uuid import UUID
16
17
 
17
- from pydantic import ConfigDict
18
+ from pydantic import ConfigDict, Field
18
19
 
20
+ from orchestrator.db.models import DESCRIPTION_LENGTH
19
21
  from orchestrator.domain.lifecycle import ProductLifecycle
20
22
  from orchestrator.schemas.base import OrchestratorBaseModel
21
23
  from orchestrator.schemas.fixed_input import FixedInputSchema
@@ -44,4 +46,4 @@ class ProductSchema(ProductBaseSchema):
44
46
 
45
47
 
46
48
  class ProductPatchSchema(OrchestratorBaseModel):
47
- description: str | None = None
49
+ description: Annotated[str, Field(max_length=DESCRIPTION_LENGTH)] | None = None
@@ -12,10 +12,12 @@
12
12
  # limitations under the License.
13
13
 
14
14
  from datetime import datetime
15
+ from typing import Annotated
15
16
  from uuid import UUID
16
17
 
17
- from pydantic import ConfigDict
18
+ from pydantic import ConfigDict, Field
18
19
 
20
+ from orchestrator.db.models import DESCRIPTION_LENGTH
19
21
  from orchestrator.domain.lifecycle import ProductLifecycle
20
22
  from orchestrator.schemas.base import OrchestratorBaseModel
21
23
  from orchestrator.schemas.resource_type import ResourceTypeBaseSchema, ResourceTypeSchema
@@ -40,4 +42,4 @@ class ProductBlockSchema(ProductBlockBaseSchema):
40
42
 
41
43
 
42
44
  class ProductBlockPatchSchema(OrchestratorBaseModel):
43
- description: str | None = None
45
+ description: Annotated[str, Field(max_length=DESCRIPTION_LENGTH)] | None = None
@@ -11,10 +11,12 @@
11
11
  # See the License for the specific language governing permissions and
12
12
  # limitations under the License.
13
13
 
14
+ from typing import Annotated
14
15
  from uuid import UUID
15
16
 
16
- from pydantic import ConfigDict
17
+ from pydantic import ConfigDict, Field
17
18
 
19
+ from orchestrator.db.models import DESCRIPTION_LENGTH
18
20
  from orchestrator.schemas.base import OrchestratorBaseModel
19
21
 
20
22
 
@@ -30,4 +32,4 @@ class ResourceTypeSchema(ResourceTypeBaseSchema):
30
32
 
31
33
 
32
34
  class ResourceTypePatchSchema(OrchestratorBaseModel):
33
- description: str | None = None
35
+ description: Annotated[str, Field(max_length=DESCRIPTION_LENGTH)] | None = None
@@ -34,10 +34,17 @@ class ProductSchema(BaseModel):
34
34
  product_type: str
35
35
 
36
36
 
37
+ class CursorInfoSchema(BaseModel):
38
+ total_items: int | None = None
39
+ start_cursor: int | None = None
40
+ end_cursor: int | None = None
41
+
42
+
37
43
  class SearchResultsSchema(BaseModel, Generic[T]):
38
44
  data: list[T] = Field(default_factory=list)
39
45
  page_info: PageInfoSchema = Field(default_factory=PageInfoSchema)
40
46
  search_metadata: SearchMetadata | None = None
47
+ cursor: CursorInfoSchema | None = None
41
48
 
42
49
 
43
50
  class PathsResponse(BaseModel):
@@ -12,11 +12,12 @@
12
12
  # limitations under the License.
13
13
 
14
14
  from datetime import datetime
15
- from typing import Any
15
+ from typing import Annotated, Any
16
16
  from uuid import UUID
17
17
 
18
18
  from pydantic import ConfigDict, Field
19
19
 
20
+ from orchestrator.db.models import DESCRIPTION_LENGTH
20
21
  from orchestrator.schemas.base import OrchestratorBaseModel
21
22
  from orchestrator.targets import Target
22
23
 
@@ -65,4 +66,4 @@ class SubscriptionWorkflowListsSchema(OrchestratorBaseModel):
65
66
 
66
67
 
67
68
  class WorkflowPatchSchema(OrchestratorBaseModel):
68
- description: str | None = None
69
+ description: Annotated[str, Field(max_length=DESCRIPTION_LENGTH)] | None = None