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