orchestrator-core 4.2.0rc1__tar.gz → 4.2.0rc3__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 (319) hide show
  1. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/PKG-INFO +1 -1
  2. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/__init__.py +1 -1
  3. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/processes.py +2 -1
  4. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/database.py +8 -1
  5. orchestrator_core-4.2.0rc3/orchestrator/cli/domain_gen_helpers/helpers.py +97 -0
  6. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/domain_gen_helpers/product_block_helpers.py +35 -15
  7. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/domain_gen_helpers/resource_type_helpers.py +5 -5
  8. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/domain_gen_helpers/types.py +7 -1
  9. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/migrate_domain_models.py +16 -5
  10. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/settings_env_variables.py +3 -15
  11. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/settings.py +1 -1
  12. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/errors.py +2 -1
  13. orchestrator_core-4.2.0rc1/orchestrator/cli/domain_gen_helpers/helpers.py +0 -55
  14. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/LICENSE +0 -0
  15. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/README.md +0 -0
  16. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/__init__.py +0 -0
  17. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/__init__.py +0 -0
  18. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/api.py +0 -0
  19. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/__init__.py +0 -0
  20. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/health.py +0 -0
  21. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/product_blocks.py +0 -0
  22. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/products.py +0 -0
  23. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/resource_types.py +0 -0
  24. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/settings.py +0 -0
  25. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/subscription_customer_descriptions.py +0 -0
  26. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/subscriptions.py +0 -0
  27. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/translations.py +0 -0
  28. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/user.py +0 -0
  29. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/workflows.py +0 -0
  30. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/api_v1/endpoints/ws.py +0 -0
  31. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/error_handling.py +0 -0
  32. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/helpers.py +0 -0
  33. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/api/models.py +0 -0
  34. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/app.py +0 -0
  35. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/__init__.py +0 -0
  36. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/domain_gen_helpers/__init__.py +0 -0
  37. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/domain_gen_helpers/fixed_input_helpers.py +0 -0
  38. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/domain_gen_helpers/product_helpers.py +0 -0
  39. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generate.py +0 -0
  40. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/__init__.py +0 -0
  41. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/custom_templates/README +0 -0
  42. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/custom_templates/additional_create_imports.j2 +0 -0
  43. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/custom_templates/additional_create_input_fields.j2 +0 -0
  44. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/custom_templates/additional_create_steps.j2 +0 -0
  45. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/custom_templates/additional_modify_imports.j2 +0 -0
  46. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/custom_templates/additional_modify_input_fields.j2 +0 -0
  47. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/custom_templates/additional_modify_steps.j2 +0 -0
  48. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/custom_templates/additional_terminate_imports.j2 +0 -0
  49. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/custom_templates/additional_terminate_input_fields.j2 +0 -0
  50. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/custom_templates/additional_terminate_steps.j2 +0 -0
  51. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/__init__.py +0 -0
  52. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/enums.py +0 -0
  53. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/helpers.py +0 -0
  54. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/migration.py +0 -0
  55. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/product.py +0 -0
  56. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/product_block.py +0 -0
  57. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/settings.py +0 -0
  58. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/translations.py +0 -0
  59. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/unittest.py +0 -0
  60. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/validations.py +0 -0
  61. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/generator/workflow.py +0 -0
  62. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/products/workshop/circuit.yaml +0 -0
  63. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/products/workshop/node.yaml +0 -0
  64. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/products/workshop/user.yaml +0 -0
  65. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/products/workshop/user_group.yaml +0 -0
  66. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/additional_create_imports.j2 +0 -0
  67. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/additional_create_steps.j2 +0 -0
  68. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/additional_modify_imports.j2 +0 -0
  69. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/additional_modify_steps.j2 +0 -0
  70. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/additional_terminate_steps.j2 +0 -0
  71. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/constrained_int_definitions.j2 +0 -0
  72. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/create_data_head.j2 +0 -0
  73. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/create_product.j2 +0 -0
  74. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/enums.j2 +0 -0
  75. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/lazy_workflow_instance.j2 +0 -0
  76. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/list_definitions.j2 +0 -0
  77. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/macros.j2 +0 -0
  78. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/modify_product.j2 +0 -0
  79. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/new_product_migration.j2 +0 -0
  80. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/product.j2 +0 -0
  81. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/product_block.j2 +0 -0
  82. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/shared_forms.j2 +0 -0
  83. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/shared_workflows.j2 +0 -0
  84. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/subscription_model_registry.j2 +0 -0
  85. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/terminate_product.j2 +0 -0
  86. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/test_create_workflow.j2 +0 -0
  87. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/test_modify_workflow.j2 +0 -0
  88. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/test_product_type.j2 +0 -0
  89. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/test_terminate_workflow.j2 +0 -0
  90. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/test_validate_workflow.j2 +0 -0
  91. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/generator/templates/validate_product.j2 +0 -0
  92. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/helpers/__init__.py +0 -0
  93. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/helpers/input_helpers.py +0 -0
  94. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/helpers/print_helpers.py +0 -0
  95. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/main.py +0 -0
  96. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/migrate_tasks.py +0 -0
  97. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/migrate_workflows.py +0 -0
  98. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/migration_helpers.py +0 -0
  99. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/cli/scheduler.py +0 -0
  100. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/config/__init__.py +0 -0
  101. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/config/assignee.py +0 -0
  102. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/__init__.py +0 -0
  103. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/database.py +0 -0
  104. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/filters/__init__.py +0 -0
  105. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/filters/filters.py +0 -0
  106. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/filters/process.py +0 -0
  107. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/filters/product.py +0 -0
  108. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/filters/product_block.py +0 -0
  109. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/filters/resource_type.py +0 -0
  110. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/filters/search_filters/__init__.py +0 -0
  111. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/filters/search_filters/inferred_filter.py +0 -0
  112. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/filters/subscription.py +0 -0
  113. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/filters/workflow.py +0 -0
  114. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/helpers.py +0 -0
  115. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/listeners.py +0 -0
  116. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/loaders.py +0 -0
  117. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/models.py +0 -0
  118. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/queries/__init__.py +0 -0
  119. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/queries/subscription.py +0 -0
  120. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/queries/subscription_instance.py +0 -0
  121. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/range/__init__.py +0 -0
  122. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/range/range.py +0 -0
  123. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/sorting/__init__.py +0 -0
  124. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/sorting/process.py +0 -0
  125. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/sorting/product.py +0 -0
  126. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/sorting/product_block.py +0 -0
  127. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/sorting/resource_type.py +0 -0
  128. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/sorting/sorting.py +0 -0
  129. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/sorting/subscription.py +0 -0
  130. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/db/sorting/workflow.py +0 -0
  131. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/devtools/__init__.py +0 -0
  132. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/devtools/populator.py +0 -0
  133. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/devtools/scripts/__init__.py +0 -0
  134. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/devtools/scripts/migrate_20.py +0 -0
  135. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/devtools/scripts/migrate_30.py +0 -0
  136. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/devtools/scripts/shared.py +0 -0
  137. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/distlock/__init__.py +0 -0
  138. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/distlock/distlock_manager.py +0 -0
  139. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/distlock/managers/__init__.py +0 -0
  140. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/distlock/managers/memory_distlock_manager.py +0 -0
  141. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/distlock/managers/redis_distlock_manager.py +0 -0
  142. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/domain/__init__.py +0 -0
  143. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/domain/base.py +0 -0
  144. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/domain/context_cache.py +0 -0
  145. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/domain/customer_description.py +0 -0
  146. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/domain/helpers.py +0 -0
  147. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/domain/lifecycle.py +0 -0
  148. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/domain/subscription_instance_transform.py +0 -0
  149. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/exception_handlers.py +0 -0
  150. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/forms/__init__.py +0 -0
  151. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/forms/validators/__init__.py +0 -0
  152. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/forms/validators/customer_contact_list.py +0 -0
  153. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/forms/validators/customer_id.py +0 -0
  154. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/forms/validators/display_subscription.py +0 -0
  155. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/forms/validators/network_type_validators.py +0 -0
  156. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/forms/validators/product_id.py +0 -0
  157. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/__init__.py +0 -0
  158. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/autoregistration.py +0 -0
  159. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/extensions/__init__.py +0 -0
  160. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/extensions/model_cache.py +0 -0
  161. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/extensions/stats.py +0 -0
  162. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/loaders/__init__.py +0 -0
  163. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/loaders/subscriptions.py +0 -0
  164. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/mutations/customer_description.py +0 -0
  165. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/mutations/start_process.py +0 -0
  166. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/pagination.py +0 -0
  167. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/__init__.py +0 -0
  168. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/customer.py +0 -0
  169. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/helpers.py +0 -0
  170. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/process.py +0 -0
  171. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/product.py +0 -0
  172. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/product_block.py +0 -0
  173. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/resource_type.py +0 -0
  174. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/settings.py +0 -0
  175. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/subscription.py +0 -0
  176. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/version.py +0 -0
  177. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/resolvers/workflow.py +0 -0
  178. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schema.py +0 -0
  179. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/__init__.py +0 -0
  180. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/customer.py +0 -0
  181. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/customer_description.py +0 -0
  182. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/errors.py +0 -0
  183. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/fixed_input.py +0 -0
  184. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/helpers.py +0 -0
  185. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/process.py +0 -0
  186. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/product.py +0 -0
  187. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/product_block.py +0 -0
  188. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/resource_type.py +0 -0
  189. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/settings.py +0 -0
  190. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/strawberry_pydantic_patch.py +0 -0
  191. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/subscription.py +0 -0
  192. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/version.py +0 -0
  193. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/schemas/workflow.py +0 -0
  194. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/types.py +0 -0
  195. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/utils/__init__.py +0 -0
  196. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/utils/create_resolver_error_handler.py +0 -0
  197. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/utils/get_query_loaders.py +0 -0
  198. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/utils/get_selected_fields.py +0 -0
  199. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/utils/get_selected_paths.py +0 -0
  200. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/utils/get_subscription_product_blocks.py +0 -0
  201. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/utils/is_query_detailed.py +0 -0
  202. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/utils/override_class.py +0 -0
  203. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/graphql/utils/to_graphql_result_page.py +0 -0
  204. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/log_config.py +0 -0
  205. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/metrics/__init__.py +0 -0
  206. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/metrics/engine.py +0 -0
  207. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/metrics/init.py +0 -0
  208. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/metrics/processes.py +0 -0
  209. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/metrics/subscriptions.py +0 -0
  210. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/README +0 -0
  211. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/alembic.ini +0 -0
  212. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/env.py +0 -0
  213. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/helpers.py +0 -0
  214. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/script.py.mako +0 -0
  215. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/templates/alembic.ini.j2 +0 -0
  216. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/templates/env.py.j2 +0 -0
  217. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/templates/helpers.py.j2 +0 -0
  218. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2020-10-19_3323bcb934e7_fix_tsv_triggers.py +0 -0
  219. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2020-10-19_a76b9185b334_add_generic_workflows_to_core.py +0 -0
  220. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2020-10-19_c112305b07d3_initial_schema_migration.py +0 -0
  221. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2021-04-06_3c8b9185c221_add_validate_products_task.py +0 -0
  222. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2021-07-01_6896a54e9483_add_product_block_relations.py +0 -0
  223. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2021-11-17_19cdd3ab86f6_fix_parse_websearch.py +0 -0
  224. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2022-02-16_bed6bc0b197a_rename_parent_and_child_block_relations.py +0 -0
  225. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2023-03-06_e05bb1967eff_add_subscriptions_search_view.py +0 -0
  226. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2023-05-25_b1970225392d_add_subscription_metadata_workflow.py +0 -0
  227. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.py +0 -0
  228. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2023-06-28_a09ac125ea73_add_throttling_to_refresh_subscriptions.sql +0 -0
  229. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.py +0 -0
  230. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2023-07-17_165303a20fb1_customer_id_to_varchar.sql +0 -0
  231. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.py +0 -0
  232. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2023-09-25_da5c9f4cce1c_add_subscription_metadata_to_fulltext_.sql +0 -0
  233. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2023-12-06_048219045729_add_workflow_id_to_processes_table.py +0 -0
  234. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.py +0 -0
  235. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2024-09-27_460ec6748e37_add_uuid_search_workaround.sql +0 -0
  236. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2025-01-08_4c5859620539_add_version_column_to_subscription.py +0 -0
  237. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2025-01-19_4fjdn13f83ga_add_validate_product_type_task.py +0 -0
  238. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2025-02-12_bac6be6f2b4f_added_input_state_table.py +0 -0
  239. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2025-02-20_68d14db1b8da_make_workflow_description_mandatory.py +0 -0
  240. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.py +0 -0
  241. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2025-03-06_42b3d076a85b_subscription_instance_as_json_function.sql +0 -0
  242. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2025-04-09_fc5c993a4b4a_add_cascade_constraint_on_processes_.py +0 -0
  243. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2025-05-08_161918133bec_add_is_task_to_workflow.py +0 -0
  244. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2025-07-01_93fc5834c7e5_changed_timestamping_fields_in_process_steps.py +0 -0
  245. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/migrations/versions/schema/2025-07-04_4b58e336d1bf_deprecating_workflow_target_in_.py +0 -0
  246. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/py.typed +0 -0
  247. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schedules/__init__.py +0 -0
  248. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schedules/resume_workflows.py +0 -0
  249. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schedules/scheduling.py +0 -0
  250. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schedules/task_vacuum.py +0 -0
  251. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schedules/validate_products.py +0 -0
  252. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schedules/validate_subscriptions.py +0 -0
  253. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/__init__.py +0 -0
  254. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/base.py +0 -0
  255. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/engine_settings.py +0 -0
  256. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/fixed_input.py +0 -0
  257. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/problem_detail.py +0 -0
  258. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/process.py +0 -0
  259. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/product.py +0 -0
  260. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/product_block.py +0 -0
  261. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/resource_type.py +0 -0
  262. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/subscription.py +0 -0
  263. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/subscription_descriptions.py +0 -0
  264. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/schemas/workflow.py +0 -0
  265. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/security.py +0 -0
  266. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/__init__.py +0 -0
  267. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/celery.py +0 -0
  268. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/fixed_inputs.py +0 -0
  269. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/input_state.py +0 -0
  270. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/process_broadcast_thread.py +0 -0
  271. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/processes.py +0 -0
  272. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/products.py +0 -0
  273. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/resource_types.py +0 -0
  274. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/settings.py +0 -0
  275. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/subscription_relations.py +0 -0
  276. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/subscriptions.py +0 -0
  277. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/tasks.py +0 -0
  278. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/translations.py +0 -0
  279. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/services/workflows.py +0 -0
  280. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/targets.py +0 -0
  281. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/types.py +0 -0
  282. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/__init__.py +0 -0
  283. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/auth.py +0 -0
  284. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/crypt.py +0 -0
  285. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/datetime.py +0 -0
  286. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/deprecation_logger.py +0 -0
  287. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/docs.py +0 -0
  288. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/enrich_process.py +0 -0
  289. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/expose_settings.py +0 -0
  290. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/fixed_inputs.py +0 -0
  291. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/functional.py +0 -0
  292. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/get_subscription_dict.py +0 -0
  293. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/get_updated_properties.py +0 -0
  294. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/helpers.py +0 -0
  295. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/json.py +0 -0
  296. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/redis.py +0 -0
  297. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/redis_client.py +0 -0
  298. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/search_query.py +0 -0
  299. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/state.py +0 -0
  300. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/strings.py +0 -0
  301. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/utils/validate_data_version.py +0 -0
  302. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/version.py +0 -0
  303. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/websocket/__init__.py +0 -0
  304. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/websocket/managers/broadcast_websocket_manager.py +0 -0
  305. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/websocket/managers/memory_websocket_manager.py +0 -0
  306. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/websocket/websocket_manager.py +0 -0
  307. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflow.py +0 -0
  308. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/__init__.py +0 -0
  309. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/modify_note.py +0 -0
  310. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/removed_workflow.py +0 -0
  311. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/steps.py +0 -0
  312. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/tasks/__init__.py +0 -0
  313. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/tasks/cleanup_tasks_log.py +0 -0
  314. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/tasks/resume_workflows.py +0 -0
  315. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/tasks/validate_product_type.py +0 -0
  316. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/tasks/validate_products.py +0 -0
  317. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/translations/en-GB.json +0 -0
  318. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/orchestrator/workflows/utils.py +0 -0
  319. {orchestrator_core-4.2.0rc1 → orchestrator_core-4.2.0rc3}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: orchestrator-core
3
- Version: 4.2.0rc1
3
+ Version: 4.2.0rc3
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.14
@@ -13,7 +13,7 @@
13
13
 
14
14
  """This is the orchestrator workflow engine."""
15
15
 
16
- __version__ = "4.2.0rc1"
16
+ __version__ = "4.2.0rc3"
17
17
 
18
18
  from orchestrator.app import OrchestratorCore
19
19
  from orchestrator.settings import app_settings
@@ -123,6 +123,7 @@ def get_auth_callbacks(steps: StepList, workflow: Workflow) -> tuple[Authorizer
123
123
  def can_be_resumed(status: ProcessStatus) -> bool:
124
124
  return status in (
125
125
  ProcessStatus.SUSPENDED, # Can be resumed
126
+ ProcessStatus.WAITING, # Can be retried
126
127
  ProcessStatus.FAILED, # Can be retried
127
128
  ProcessStatus.API_UNAVAILABLE, # subtype of FAILED
128
129
  ProcessStatus.INCONSISTENT_DATA, # subtype of FAILED
@@ -212,7 +213,7 @@ def resume_process_endpoint(
212
213
  if process.last_status == ProcessStatus.SUSPENDED:
213
214
  if auth_resume is not None and not auth_resume(user_model):
214
215
  raise_status(HTTPStatus.FORBIDDEN, "User is not authorized to resume step")
215
- elif process.last_status == ProcessStatus.FAILED:
216
+ elif process.last_status in (ProcessStatus.FAILED, ProcessStatus.WAITING):
216
217
  if auth_retry is not None and not auth_retry(user_model):
217
218
  raise_status(HTTPStatus.FORBIDDEN, "User is not authorized to retry step")
218
219
 
@@ -256,6 +256,9 @@ def migrate_domain_models(
256
256
  test: bool = typer.Option(False, help="Optional boolean if you don't want to generate a migration file"),
257
257
  inputs: str = typer.Option("{}", help="Stringified dict to prefill inputs"),
258
258
  updates: str = typer.Option("{}", help="Stringified dict to map updates instead of using inputs"),
259
+ confirm_warnings: bool = typer.Option(
260
+ False, help="Optional boolean if you want to accept all warning inputs, fully knowing things can go wrong"
261
+ ),
259
262
  ) -> tuple[list[str], list[str]] | None:
260
263
  """Create migration file based on SubscriptionModel.diff_product_in_database. BACKUP DATABASE BEFORE USING THE MIGRATION!.
261
264
 
@@ -282,6 +285,8 @@ def migrate_domain_models(
282
285
  - `updates = { "resource_types": { "old_resource_type_name": "new_resource_type_name" } }`
283
286
  - renaming a resource type to existing resource type: `updates = { "resource_types": { "old_resource_type_name": "new_resource_type_name" } }`
284
287
 
288
+ confirm_warnings: Optional boolean if you want to accept all warning inputs, fully knowing things can go wrong.
289
+
285
290
  Returns None unless `--test` is used, in which case it returns:
286
291
  - tuple:
287
292
  - list of upgrade SQL statements in string format.
@@ -304,7 +309,9 @@ def migrate_domain_models(
304
309
  resource_types=updates_dict.get("resource_types", {}),
305
310
  block_resource_types=updates_dict.get("block_resource_types", {}),
306
311
  )
307
- sql_upgrade_stmts, sql_downgrade_stmts = create_domain_models_migration_sql(inputs_dict, updates_class, bool(test))
312
+ sql_upgrade_stmts, sql_downgrade_stmts = create_domain_models_migration_sql(
313
+ inputs_dict, updates_class, test, confirm_warnings
314
+ )
308
315
 
309
316
  if test:
310
317
  return sql_upgrade_stmts, sql_downgrade_stmts
@@ -0,0 +1,97 @@
1
+ from collections.abc import Iterable
2
+ from itertools import groupby
3
+
4
+ import structlog
5
+ import typer
6
+ from more_itertools import first
7
+ from sqlalchemy.dialects import postgresql
8
+ from sqlalchemy.sql.dml import UpdateBase
9
+
10
+ from orchestrator.cli.domain_gen_helpers.types import BlockRelationDict
11
+ from orchestrator.cli.helpers.input_helpers import _prompt_user_menu
12
+ from orchestrator.cli.helpers.print_helpers import noqa_print
13
+ from orchestrator.domain.base import ProductBlockModel, SubscriptionModel
14
+
15
+ logger = structlog.get_logger(__name__)
16
+
17
+
18
+ def sql_compile(sql: UpdateBase) -> str:
19
+ sql_string = str(sql.compile(dialect=postgresql.dialect(), compile_kwargs={"literal_binds": True})) # type: ignore[no-untyped-call]
20
+ sql_string = sql_string.replace("\n", "")
21
+ logger.debug("generated SQL", sql_string=sql_string)
22
+ return sql_string
23
+
24
+
25
+ def generic_mapper(prop_name: str, model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
26
+ model_by_resource = [
27
+ (prop_name_value, model_name)
28
+ for model_name, diff in model_diffs.items()
29
+ for prop_name_value in diff.get(prop_name, [])
30
+ ]
31
+ grouped = groupby(model_by_resource, lambda x: x[0])
32
+ return {k: {val[1] for val in v} for k, v in grouped}
33
+
34
+
35
+ def map_create_fixed_inputs(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
36
+ return generic_mapper("missing_fixed_inputs_in_db", model_diffs)
37
+
38
+
39
+ def map_delete_fixed_inputs(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
40
+ return generic_mapper("missing_fixed_inputs_in_model", model_diffs)
41
+
42
+
43
+ def map_create_resource_type_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
44
+ return generic_mapper("missing_resource_types_in_db", model_diffs)
45
+
46
+
47
+ def map_delete_resource_type_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
48
+ return generic_mapper("missing_resource_types_in_model", model_diffs)
49
+
50
+
51
+ def map_create_product_to_product_block_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
52
+ return generic_mapper("missing_product_blocks_in_db", model_diffs)
53
+
54
+
55
+ def format_block_relation_to_dict(
56
+ model_name: str,
57
+ block_to_find_in_props: str,
58
+ models: dict[str, type[SubscriptionModel]] | dict[str, type[ProductBlockModel]],
59
+ confirm_warnings: bool,
60
+ ) -> BlockRelationDict:
61
+ model = models[model_name]
62
+ block_props = model._get_depends_on_product_block_types()
63
+ props = {k for k, v in block_props.items() if v.name == block_to_find_in_props} # type: ignore
64
+
65
+ if len(props) > 1 and not confirm_warnings:
66
+ noqa_print("WARNING: Relating a Product Block multiple times is not supported by this migrator!")
67
+ noqa_print(
68
+ "You will need to create your own migration to create a Product Block Instance for each attribute that is related"
69
+ )
70
+ noqa_print(f"Product Block '{block_to_find_in_props}' has been related multiple times to '{model_name}'")
71
+ noqa_print(f"Attributes the block ('{block_to_find_in_props}') has been related with: {', '.join(props)}")
72
+ noqa_print(f"The relation will only be added to the first attribute ('{first(props)}') want to continue?")
73
+
74
+ if _prompt_user_menu([("yes", "yes"), ("no", "no")]) == "no":
75
+ typer.echo("Aborted.")
76
+ raise typer.Exit(code=1)
77
+
78
+ return BlockRelationDict(name=model_name, attribute_name=first(props))
79
+
80
+
81
+ def map_create_product_block_relations(
82
+ model_diffs: dict[str, dict[str, set[str]]],
83
+ models: dict[str, type[SubscriptionModel]] | dict[str, type[ProductBlockModel]],
84
+ confirm_warnings: bool,
85
+ ) -> dict[str, list[BlockRelationDict]]:
86
+ data = generic_mapper("missing_product_blocks_in_db", model_diffs)
87
+ return {
88
+ k: [format_block_relation_to_dict(b, k, models, confirm_warnings) for b in blocks] for k, blocks in data.items()
89
+ }
90
+
91
+
92
+ def map_delete_product_block_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
93
+ return generic_mapper("missing_product_blocks_in_model", model_diffs)
94
+
95
+
96
+ def get_product_block_names(pbs: list[type[ProductBlockModel]]) -> Iterable[str]:
97
+ return filter(None, (pb.name for pb in pbs))
@@ -7,8 +7,12 @@ from sqlalchemy import select
7
7
  from sqlalchemy.sql.expression import Delete, Insert
8
8
  from sqlalchemy.sql.selectable import ScalarSelect
9
9
 
10
- from orchestrator.cli.domain_gen_helpers.helpers import get_product_block_names, sql_compile
11
- from orchestrator.cli.domain_gen_helpers.types import DomainModelChanges
10
+ from orchestrator.cli.domain_gen_helpers.helpers import (
11
+ format_block_relation_to_dict,
12
+ get_product_block_names,
13
+ sql_compile,
14
+ )
15
+ from orchestrator.cli.domain_gen_helpers.types import BlockRelationDict, DomainModelChanges
12
16
  from orchestrator.cli.helpers.input_helpers import get_user_input
13
17
  from orchestrator.cli.helpers.print_helpers import COLOR, print_fmt, str_fmt
14
18
  from orchestrator.db import db
@@ -68,13 +72,17 @@ def map_delete_product_blocks(product_blocks: dict[str, type[ProductBlockModel]]
68
72
  return {name for name in existing_product_blocks if name not in product_blocks}
69
73
 
70
74
 
71
- def map_product_block_additional_relations(changes: DomainModelChanges) -> DomainModelChanges:
75
+ def map_product_block_additional_relations(
76
+ changes: DomainModelChanges, models: dict[str, type[ProductBlockModel]], confirm_warnings: bool
77
+ ) -> DomainModelChanges:
72
78
  """Map additional relations for created product blocks.
73
79
 
74
80
  Adds resource type and product block relations.
75
81
 
76
82
  Args:
77
83
  changes: DomainModelChanges class with all changes.
84
+ models: All product block models.
85
+ confirm_warnings: confirm warnings to continue, fully knowing that things can go wrong.
78
86
 
79
87
  Returns: Updated DomainModelChanges.
80
88
  """
@@ -86,7 +94,12 @@ def map_product_block_additional_relations(changes: DomainModelChanges) -> Domai
86
94
  product_blocks_in_model = block_class._get_depends_on_product_block_types()
87
95
  product_blocks_types_in_model = get_depends_on_product_block_type_list(product_blocks_in_model)
88
96
  for product_block_name in get_product_block_names(product_blocks_types_in_model):
89
- changes.create_product_block_relations.setdefault(product_block_name, set()).add(block_name)
97
+ relation_list = changes.create_product_block_relations.get(product_block_name, [])
98
+ new_relation = format_block_relation_to_dict(block_name, product_block_name, models, confirm_warnings)
99
+
100
+ if new_relation not in relation_list:
101
+ changes.create_product_block_relations[product_block_name] = relation_list + [new_relation]
102
+
90
103
  return changes
91
104
 
92
105
 
@@ -147,31 +160,35 @@ def generate_delete_product_blocks_sql(delete_product_blocks: set[str]) -> list[
147
160
  ]
148
161
 
149
162
 
150
- def generate_create_product_block_relations_sql(create_block_relations: dict[str, set[str]]) -> list[str]:
163
+ def generate_create_product_block_relations_sql(
164
+ create_block_relations: dict[str, list[BlockRelationDict]],
165
+ ) -> list[str]:
151
166
  """Generate SQL to create product block to product block relations.
152
167
 
153
168
  Args:
154
169
  create_block_relations: Dict with product blocks by product block
155
170
  - key: product block name.
156
- - value: Set of product block names to relate with.
171
+ - list: List of product blocks to relate with by prop names.
157
172
 
158
173
  Returns: List of SQL to create relation between product blocks.
159
174
  """
160
175
 
161
- def create_block_relation(depends_block_name: str, block_names: set[str]) -> str:
176
+ def create_block_relation(depends_block_name: str, block_relations: list[BlockRelationDict]) -> str:
162
177
  depends_block_id_sql = get_product_block_id(depends_block_name)
163
178
 
164
- def create_block_relation_dict(block_name: str) -> dict[str, ScalarSelect]:
165
- block_id_sql = get_product_block_id(block_name)
179
+ def create_block_relation_dict(block_relation: BlockRelationDict) -> dict[str, ScalarSelect]:
180
+ block_id_sql = get_product_block_id(block_relation["name"])
166
181
  return {"in_use_by_id": block_id_sql, "depends_on_id": depends_block_id_sql}
167
182
 
168
- product_product_block_relation_dicts = [create_block_relation_dict(block_name) for block_name in block_names]
183
+ product_product_block_relation_dicts = [create_block_relation_dict(block) for block in block_relations]
169
184
  return sql_compile(Insert(ProductBlockRelationTable).values(product_product_block_relation_dicts))
170
185
 
171
186
  return [create_block_relation(*item) for item in create_block_relations.items()]
172
187
 
173
188
 
174
- def generate_create_product_block_instance_relations_sql(product_block_relations: dict[str, set[str]]) -> list[str]:
189
+ def generate_create_product_block_instance_relations_sql(
190
+ product_block_relations: dict[str, list[BlockRelationDict]],
191
+ ) -> list[str]:
175
192
  """Generate SQL to create resource type instance values for existing instances.
176
193
 
177
194
  Args:
@@ -183,12 +200,14 @@ def generate_create_product_block_instance_relations_sql(product_block_relations
183
200
  """
184
201
 
185
202
  def create_subscription_instance_relations(
186
- depends_block_name: str, block_names: set[str]
203
+ depends_block_name: str, block_relations: list[BlockRelationDict]
187
204
  ) -> Generator[str, None, None]:
188
205
  depends_block_id_sql = get_product_block_id(depends_block_name)
189
206
 
190
- def map_subscription_instances(block_name: str) -> dict[str, list[dict[str, str | ScalarSelect]]]:
191
- in_use_by_id_sql = get_product_block_id(block_name)
207
+ def map_subscription_instances(
208
+ block_relation: BlockRelationDict,
209
+ ) -> dict[str, list[dict[str, str | ScalarSelect]]]:
210
+ in_use_by_id_sql = get_product_block_id(block_relation["name"])
192
211
  stmt = select(
193
212
  SubscriptionInstanceTable.subscription_instance_id, SubscriptionInstanceTable.subscription_id
194
213
  ).where(SubscriptionInstanceTable.product_block_id.in_(in_use_by_id_sql))
@@ -206,13 +225,14 @@ def generate_create_product_block_instance_relations_sql(product_block_relations
206
225
  "in_use_by_id": instance.subscription_instance_id,
207
226
  "depends_on_id": get_subscription_instance(instance.subscription_id, depends_block_id_sql),
208
227
  "order_id": 0,
228
+ "domain_model_attr": block_relation["attribute_name"],
209
229
  }
210
230
  for instance in subscription_instances
211
231
  ]
212
232
 
213
233
  return {"instance_list": instance_list, "instance_relation_list": instance_relation_list}
214
234
 
215
- create_instance_list = [map_subscription_instances(block_name) for block_name in block_names]
235
+ create_instance_list = [map_subscription_instances(block_relation) for block_relation in block_relations]
216
236
 
217
237
  subscription_instance_dicts = list(flatten(item["instance_list"] for item in create_instance_list))
218
238
  subscription_relation_dicts = list(flatten(item["instance_relation_list"] for item in create_instance_list))
@@ -9,7 +9,7 @@ from sqlalchemy.sql.selectable import ScalarSelect
9
9
 
10
10
  from orchestrator.cli.domain_gen_helpers.helpers import sql_compile
11
11
  from orchestrator.cli.domain_gen_helpers.product_block_helpers import get_product_block_id, get_product_block_ids
12
- from orchestrator.cli.domain_gen_helpers.types import DomainModelChanges
12
+ from orchestrator.cli.domain_gen_helpers.types import BlockRelationDict, DomainModelChanges
13
13
  from orchestrator.cli.helpers.input_helpers import _enumerate_menu_keys, _prompt_user_menu, get_user_input
14
14
  from orchestrator.cli.helpers.print_helpers import COLOR, noqa_print, print_fmt, str_fmt
15
15
  from orchestrator.db import db
@@ -262,8 +262,8 @@ def _has_product_existing_instances(product_name: str) -> bool:
262
262
  return bool(product and get_product_instance_count(product.product_id))
263
263
 
264
264
 
265
- def _find_new_relations(block_name: str, relations: dict[str, set[str]]) -> set[str]:
266
- return set(flatten((list(v) for k, v in relations.items() if block_name in k)))
265
+ def _find_new_block_relations(block_name: str, relations: dict[str, list[BlockRelationDict]]) -> set[str]:
266
+ return {r["name"] for r in relations.get(block_name, [])}
267
267
 
268
268
 
269
269
  def map_create_resource_type_instances(changes: DomainModelChanges) -> dict[str, set[str]]:
@@ -285,11 +285,11 @@ def map_create_resource_type_instances(changes: DomainModelChanges) -> dict[str,
285
285
  if block and get_block_instance_count(block.product_block_id):
286
286
  return True
287
287
 
288
- related_block_names = _find_new_relations(block_name, changes.create_product_block_relations)
288
+ related_block_names = _find_new_block_relations(block_name, changes.create_product_block_relations)
289
289
  if related_block_names:
290
290
  return any(_has_existing_instances(name) for name in related_block_names)
291
291
 
292
- related_product_names = _find_new_relations(block_name, changes.create_product_to_block_relations)
292
+ related_product_names = changes.create_product_to_block_relations.get(block_name, set())
293
293
  return any(_has_product_existing_instances(name) for name in related_product_names)
294
294
 
295
295
  return {
@@ -1,8 +1,14 @@
1
1
  from pydantic import BaseModel
2
+ from typing_extensions import TypedDict
2
3
 
3
4
  from orchestrator.domain.base import ProductBlockModel, SubscriptionModel
4
5
 
5
6
 
7
+ class BlockRelationDict(TypedDict):
8
+ name: str
9
+ attribute_name: str
10
+
11
+
6
12
  class DomainModelChanges(BaseModel):
7
13
  create_products: dict[str, type[SubscriptionModel]] = {}
8
14
  delete_products: set[str] = set()
@@ -10,7 +16,7 @@ class DomainModelChanges(BaseModel):
10
16
  delete_product_to_block_relations: dict[str, set[str]] = {}
11
17
  create_product_blocks: dict[str, type[ProductBlockModel]] = {}
12
18
  delete_product_blocks: set[str] = set()
13
- create_product_block_relations: dict[str, set[str]] = {}
19
+ create_product_block_relations: dict[str, list[BlockRelationDict]] = {}
14
20
  delete_product_block_relations: dict[str, set[str]] = {}
15
21
  create_product_fixed_inputs: dict[str, set[str]] = {}
16
22
  update_product_fixed_inputs: dict[str, dict[str, str]] = {}
@@ -21,6 +21,7 @@ from orchestrator.cli.domain_gen_helpers.fixed_input_helpers import (
21
21
  from orchestrator.cli.domain_gen_helpers.helpers import (
22
22
  map_create_fixed_inputs,
23
23
  map_create_product_block_relations,
24
+ map_create_product_to_product_block_relations,
24
25
  map_create_resource_type_relations,
25
26
  map_delete_fixed_inputs,
26
27
  map_delete_product_block_relations,
@@ -191,6 +192,7 @@ def map_changes(
191
192
  db_product_names: list[str],
192
193
  inputs: dict[str, dict[str, str]],
193
194
  updates: ModelUpdates | None,
195
+ confirm_warnings: bool,
194
196
  ) -> DomainModelChanges:
195
197
  """Map changes that need to be made to fix differences between models and database.
196
198
 
@@ -203,6 +205,7 @@ def map_changes(
203
205
  db_product_names: Product names out of the database.
204
206
  inputs: Optional Dict with prefilled values.
205
207
  updates: Optional Dict.
208
+ confirm_warnings: confirm warnings to continue, fully knowing that things can go wrong.
206
209
 
207
210
  Returns: Mapped changes.
208
211
  """
@@ -231,7 +234,7 @@ def map_changes(
231
234
  create_product_fixed_inputs=map_create_fixed_inputs(model_diffs["products"]),
232
235
  update_product_fixed_inputs=updates.fixed_inputs,
233
236
  delete_product_fixed_inputs=map_delete_fixed_inputs(model_diffs["products"]),
234
- create_product_to_block_relations=map_create_product_block_relations(model_diffs["products"]),
237
+ create_product_to_block_relations=map_create_product_to_product_block_relations(model_diffs["products"]),
235
238
  delete_product_to_block_relations=map_delete_product_block_relations(model_diffs["products"]),
236
239
  rename_resource_types=updates.resource_types,
237
240
  update_block_resource_types=updates.block_resource_types,
@@ -242,12 +245,14 @@ def map_changes(
242
245
  delete_resource_type_relations=delete_resource_type_relations,
243
246
  create_product_blocks=map_create_product_blocks(product_blocks),
244
247
  delete_product_blocks=map_delete_product_blocks(product_blocks),
245
- create_product_block_relations=map_create_product_block_relations(model_diffs["blocks"]),
248
+ create_product_block_relations=map_create_product_block_relations(
249
+ model_diffs["blocks"], product_blocks, confirm_warnings
250
+ ),
246
251
  delete_product_block_relations=map_delete_product_block_relations(model_diffs["blocks"]),
247
252
  )
248
253
 
249
254
  changes = map_product_additional_relations(changes)
250
- changes = map_product_block_additional_relations(changes)
255
+ changes = map_product_block_additional_relations(changes, product_blocks, confirm_warnings)
251
256
  temp = {key for v in changes.update_block_resource_types.values() for key in v.values()}
252
257
  related_resource_type_names = set(changes.create_resource_type_relations.keys()) | temp
253
258
  existing_renamed_rts = set(changes.rename_resource_types.values())
@@ -334,8 +339,12 @@ def generate_downgrade_sql(changes: DomainModelChanges) -> list[str]:
334
339
  sql_revert_create_product_product_block_relations = generate_delete_product_relations_sql(
335
340
  changes.create_product_to_block_relations,
336
341
  )
342
+
343
+ downgrade_block_relations = {
344
+ k: {b["name"] for b in blocks} for k, blocks in changes.create_product_block_relations.items()
345
+ }
337
346
  sql_revert_create_product_block_depends_blocks = generate_delete_product_block_relations_sql(
338
- changes.create_product_block_relations
347
+ downgrade_block_relations
339
348
  )
340
349
 
341
350
  sql_revert_create_product_blocks = generate_delete_product_blocks_sql(set(changes.create_product_blocks.keys()))
@@ -361,6 +370,7 @@ def create_domain_models_migration_sql(
361
370
  inputs: dict[str, dict[str, str]],
362
371
  updates: ModelUpdates | None,
363
372
  is_test: bool = False,
373
+ confirm_warnings: bool = False,
364
374
  ) -> tuple[list[str], list[str]]:
365
375
  """Create tuple with list for upgrade and downgrade SQL statements based on SubscriptionModel.diff_product_in_database.
366
376
 
@@ -370,6 +380,7 @@ def create_domain_models_migration_sql(
370
380
  inputs: dict with pre-defined input values
371
381
  updates: The model
372
382
  is_test: the bool for if it is test
383
+ confirm_warnings: confirm warnings to continue, fully knowing that things can go wrong.
373
384
 
374
385
  Returns tuple:
375
386
  list of upgrade SQL statements in string format.
@@ -384,7 +395,7 @@ def create_domain_models_migration_sql(
384
395
  product_blocks = map_product_blocks(list(SUBSCRIPTION_MODEL_REGISTRY.values()))
385
396
  model_diffs = map_differences_unique(products, existing_products)
386
397
 
387
- changes = map_changes(model_diffs, products, product_blocks, db_product_names, inputs, updates)
398
+ changes = map_changes(model_diffs, products, product_blocks, db_product_names, inputs, updates, confirm_warnings)
388
399
 
389
400
  logger.info("create_products", create_products=changes.create_products)
390
401
  logger.info("delete_products", delete_products=changes.delete_products)
@@ -14,7 +14,7 @@
14
14
  from typing import Any, Dict, Type
15
15
 
16
16
  from pydantic import SecretStr as PydanticSecretStr
17
- from pydantic_core import MultiHostUrl
17
+ from pydantic_core import MultiHostUrl, Url
18
18
  from pydantic_settings import BaseSettings
19
19
 
20
20
  from orchestrator.utils.expose_settings import SecretStr as OrchSecretStr
@@ -32,21 +32,9 @@ def expose_settings(settings_name: str, base_settings: Type[BaseSettings]) -> Ty
32
32
 
33
33
  def mask_value(key: str, value: Any) -> Any:
34
34
  key_lower = key.lower()
35
+ is_sensitive_key = "secret" in key_lower or "password" in key_lower
35
36
 
36
- if "secret" in key_lower or "password" in key_lower:
37
- # Mask sensitive information
38
- return MASK
39
-
40
- if isinstance(value, PydanticSecretStr):
41
- # Need to convert SecretStr to str for serialization
42
- return str(value)
43
-
44
- if isinstance(value, OrchSecretStr):
45
- return MASK
46
-
47
- # PostgresDsn is just MultiHostUrl with extra metadata (annotations)
48
- if isinstance(value, MultiHostUrl):
49
- # Convert PostgresDsn to str for serialization
37
+ if is_sensitive_key or isinstance(value, (OrchSecretStr, PydanticSecretStr, MultiHostUrl, Url)):
50
38
  return MASK
51
39
 
52
40
  return value
@@ -72,7 +72,7 @@ class AppSettings(BaseSettings):
72
72
  TRACING_ENABLED: bool = False
73
73
  TRACE_HOST: str = "http://localhost:4317"
74
74
  TRANSLATIONS_DIR: Path | None = None
75
- WEBSOCKET_BROADCASTER_URL: str = "memory://"
75
+ WEBSOCKET_BROADCASTER_URL: OrchSecretStr = "memory://" # type: ignore
76
76
  ENABLE_WEBSOCKETS: bool = True
77
77
  DISABLE_INSYNC_CHECK: bool = False
78
78
  DEFAULT_PRODUCT_WORKFLOWS: list[str] = ["modify_note"]
@@ -128,12 +128,13 @@ def _(err: Exception) -> ErrorDict:
128
128
  # We can't dispatch on ApiException, see is_api_exception docstring
129
129
  if is_api_exception(err):
130
130
  err = cast(ApiException, err)
131
+ headers = err.headers or {}
131
132
  return {
132
133
  "class": type(err).__name__,
133
134
  "error": err.reason,
134
135
  "status_code": err.status,
135
136
  "body": err.body,
136
- "headers": "\n".join(f"{k}: {v}" for k, v in err.headers.items()),
137
+ "headers": "\n".join(f"{k}: {v}" for k, v in headers.items()),
137
138
  "traceback": show_ex(err),
138
139
  }
139
140
 
@@ -1,55 +0,0 @@
1
- from collections.abc import Iterable
2
- from itertools import groupby
3
-
4
- import structlog
5
- from sqlalchemy.dialects import postgresql
6
- from sqlalchemy.sql.dml import UpdateBase
7
-
8
- from orchestrator.domain.base import ProductBlockModel
9
-
10
- logger = structlog.get_logger(__name__)
11
-
12
-
13
- def sql_compile(sql: UpdateBase) -> str:
14
- sql_string = str(sql.compile(dialect=postgresql.dialect(), compile_kwargs={"literal_binds": True})) # type: ignore[no-untyped-call]
15
- sql_string = sql_string.replace("\n", "")
16
- logger.debug("generated SQL", sql_string=sql_string)
17
- return sql_string
18
-
19
-
20
- def generic_mapper(prop_name: str, model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
21
- model_by_resource = [
22
- (prop_name_value, model_name)
23
- for model_name, diff in model_diffs.items()
24
- for prop_name_value in diff.get(prop_name, [])
25
- ]
26
- grouped = groupby(model_by_resource, lambda x: x[0])
27
- return {k: {val[1] for val in v} for k, v in grouped}
28
-
29
-
30
- def map_create_fixed_inputs(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
31
- return generic_mapper("missing_fixed_inputs_in_db", model_diffs)
32
-
33
-
34
- def map_delete_fixed_inputs(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
35
- return generic_mapper("missing_fixed_inputs_in_model", model_diffs)
36
-
37
-
38
- def map_create_resource_type_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
39
- return generic_mapper("missing_resource_types_in_db", model_diffs)
40
-
41
-
42
- def map_delete_resource_type_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
43
- return generic_mapper("missing_resource_types_in_model", model_diffs)
44
-
45
-
46
- def map_create_product_block_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
47
- return generic_mapper("missing_product_blocks_in_db", model_diffs)
48
-
49
-
50
- def map_delete_product_block_relations(model_diffs: dict[str, dict[str, set[str]]]) -> dict[str, set[str]]:
51
- return generic_mapper("missing_product_blocks_in_model", model_diffs)
52
-
53
-
54
- def get_product_block_names(pbs: list[type[ProductBlockModel]]) -> Iterable[str]:
55
- return filter(None, (pb.name for pb in pbs))