hatchet-sdk 0.47.0__py3-none-any.whl → 1.0.0__py3-none-any.whl
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.
- hatchet_sdk/__init__.py +25 -16
- hatchet_sdk/client.py +14 -39
- hatchet_sdk/clients/admin.py +203 -362
- hatchet_sdk/clients/dispatcher/action_listener.py +106 -84
- hatchet_sdk/clients/dispatcher/dispatcher.py +21 -21
- hatchet_sdk/clients/event_ts.py +23 -10
- hatchet_sdk/clients/events.py +96 -99
- hatchet_sdk/clients/rest/__init__.py +24 -0
- hatchet_sdk/clients/rest/api/__init__.py +2 -0
- hatchet_sdk/clients/rest/api/task_api.py +2174 -0
- hatchet_sdk/clients/rest/api/workflow_runs_api.py +638 -106
- hatchet_sdk/clients/rest/api_client.py +1 -1
- hatchet_sdk/clients/rest/configuration.py +8 -1
- hatchet_sdk/clients/rest/exceptions.py +21 -0
- hatchet_sdk/clients/rest/models/__init__.py +22 -0
- hatchet_sdk/clients/rest/models/tenant.py +4 -0
- hatchet_sdk/clients/rest/models/tenant_version.py +37 -0
- hatchet_sdk/clients/rest/models/update_tenant_request.py +7 -0
- hatchet_sdk/clients/rest/models/v1_cancel_task_request.py +104 -0
- hatchet_sdk/clients/rest/models/v1_dag_children.py +102 -0
- hatchet_sdk/clients/rest/models/v1_replay_task_request.py +104 -0
- hatchet_sdk/clients/rest/models/v1_task.py +174 -0
- hatchet_sdk/clients/rest/models/v1_task_event.py +118 -0
- hatchet_sdk/clients/rest/models/v1_task_event_list.py +110 -0
- hatchet_sdk/clients/rest/models/v1_task_event_type.py +55 -0
- hatchet_sdk/clients/rest/models/v1_task_filter.py +106 -0
- hatchet_sdk/clients/rest/models/v1_task_point_metric.py +92 -0
- hatchet_sdk/clients/rest/models/v1_task_point_metrics.py +100 -0
- hatchet_sdk/clients/rest/models/v1_task_run_metric.py +88 -0
- hatchet_sdk/clients/rest/models/v1_task_run_status.py +40 -0
- hatchet_sdk/clients/rest/models/v1_task_status.py +40 -0
- hatchet_sdk/clients/rest/models/v1_task_summary.py +212 -0
- hatchet_sdk/clients/rest/models/v1_task_summary_list.py +110 -0
- hatchet_sdk/clients/rest/models/v1_workflow_run.py +171 -0
- hatchet_sdk/clients/rest/models/v1_workflow_run_details.py +145 -0
- hatchet_sdk/clients/rest/models/v1_workflow_type.py +37 -0
- hatchet_sdk/clients/rest/models/workflow_run_shape_item_for_workflow_run_details.py +99 -0
- hatchet_sdk/clients/rest/rest.py +37 -26
- hatchet_sdk/clients/rest/tenacity_utils.py +1 -1
- hatchet_sdk/clients/rest_client.py +141 -116
- hatchet_sdk/clients/run_event_listener.py +66 -60
- hatchet_sdk/clients/workflow_listener.py +75 -66
- hatchet_sdk/config.py +117 -0
- hatchet_sdk/connection.py +27 -13
- hatchet_sdk/context/__init__.py +0 -1
- hatchet_sdk/context/context.py +118 -218
- hatchet_sdk/features/cron.py +43 -57
- hatchet_sdk/features/scheduled.py +60 -74
- hatchet_sdk/hatchet.py +192 -195
- hatchet_sdk/labels.py +4 -6
- hatchet_sdk/metadata.py +1 -1
- hatchet_sdk/opentelemetry/instrumentor.py +9 -5
- hatchet_sdk/rate_limit.py +9 -18
- hatchet_sdk/token.py +13 -9
- hatchet_sdk/utils/aio_utils.py +0 -40
- hatchet_sdk/utils/proto_enums.py +54 -0
- hatchet_sdk/utils/typing.py +9 -1
- hatchet_sdk/v0/__init__.py +251 -0
- hatchet_sdk/v0/client.py +119 -0
- hatchet_sdk/v0/clients/admin.py +541 -0
- hatchet_sdk/v0/clients/dispatcher/action_listener.py +422 -0
- hatchet_sdk/v0/clients/dispatcher/dispatcher.py +204 -0
- hatchet_sdk/v0/clients/event_ts.py +28 -0
- hatchet_sdk/v0/clients/events.py +182 -0
- hatchet_sdk/v0/clients/rest/__init__.py +307 -0
- hatchet_sdk/v0/clients/rest/api/__init__.py +19 -0
- hatchet_sdk/v0/clients/rest/api/api_token_api.py +858 -0
- hatchet_sdk/v0/clients/rest/api/default_api.py +2259 -0
- hatchet_sdk/v0/clients/rest/api/event_api.py +2548 -0
- hatchet_sdk/v0/clients/rest/api/github_api.py +331 -0
- hatchet_sdk/v0/clients/rest/api/healthcheck_api.py +483 -0
- hatchet_sdk/v0/clients/rest/api/log_api.py +449 -0
- hatchet_sdk/v0/clients/rest/api/metadata_api.py +728 -0
- hatchet_sdk/v0/clients/rest/api/rate_limits_api.py +423 -0
- hatchet_sdk/v0/clients/rest/api/slack_api.py +577 -0
- hatchet_sdk/v0/clients/rest/api/sns_api.py +872 -0
- hatchet_sdk/v0/clients/rest/api/step_run_api.py +2202 -0
- hatchet_sdk/v0/clients/rest/api/tenant_api.py +4430 -0
- hatchet_sdk/v0/clients/rest/api/user_api.py +2888 -0
- hatchet_sdk/v0/clients/rest/api/worker_api.py +858 -0
- hatchet_sdk/v0/clients/rest/api/workflow_api.py +6312 -0
- hatchet_sdk/v0/clients/rest/api/workflow_run_api.py +1932 -0
- hatchet_sdk/v0/clients/rest/api/workflow_runs_api.py +610 -0
- hatchet_sdk/v0/clients/rest/api_client.py +759 -0
- hatchet_sdk/v0/clients/rest/api_response.py +22 -0
- hatchet_sdk/v0/clients/rest/configuration.py +611 -0
- hatchet_sdk/v0/clients/rest/exceptions.py +200 -0
- hatchet_sdk/v0/clients/rest/models/__init__.py +274 -0
- hatchet_sdk/v0/clients/rest/models/accept_invite_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/api_error.py +102 -0
- hatchet_sdk/v0/clients/rest/models/api_errors.py +100 -0
- hatchet_sdk/v0/clients/rest/models/api_meta.py +144 -0
- hatchet_sdk/v0/clients/rest/models/api_meta_auth.py +85 -0
- hatchet_sdk/v0/clients/rest/models/api_meta_integration.py +88 -0
- hatchet_sdk/v0/clients/rest/models/api_meta_posthog.py +90 -0
- hatchet_sdk/v0/clients/rest/models/api_resource_meta.py +98 -0
- hatchet_sdk/v0/clients/rest/models/api_token.py +105 -0
- hatchet_sdk/v0/clients/rest/models/bulk_create_event_request.py +100 -0
- hatchet_sdk/v0/clients/rest/models/bulk_create_event_response.py +110 -0
- hatchet_sdk/v0/clients/rest/models/cancel_event_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/cancel_step_run_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/concurrency_limit_strategy.py +39 -0
- hatchet_sdk/v0/clients/rest/models/create_api_token_request.py +92 -0
- hatchet_sdk/v0/clients/rest/models/create_api_token_response.py +83 -0
- hatchet_sdk/v0/clients/rest/models/create_cron_workflow_trigger_request.py +98 -0
- hatchet_sdk/v0/clients/rest/models/create_event_request.py +95 -0
- hatchet_sdk/v0/clients/rest/models/create_pull_request_from_step_run.py +83 -0
- hatchet_sdk/v0/clients/rest/models/create_sns_integration_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/create_tenant_alert_email_group_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/create_tenant_invite_request.py +86 -0
- hatchet_sdk/v0/clients/rest/models/create_tenant_request.py +84 -0
- hatchet_sdk/v0/clients/rest/models/cron_workflows.py +131 -0
- hatchet_sdk/v0/clients/rest/models/cron_workflows_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/cron_workflows_method.py +37 -0
- hatchet_sdk/v0/clients/rest/models/cron_workflows_order_by_field.py +37 -0
- hatchet_sdk/v0/clients/rest/models/event.py +143 -0
- hatchet_sdk/v0/clients/rest/models/event_data.py +83 -0
- hatchet_sdk/v0/clients/rest/models/event_key_list.py +98 -0
- hatchet_sdk/v0/clients/rest/models/event_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/event_order_by_direction.py +37 -0
- hatchet_sdk/v0/clients/rest/models/event_order_by_field.py +36 -0
- hatchet_sdk/v0/clients/rest/models/event_update_cancel200_response.py +85 -0
- hatchet_sdk/v0/clients/rest/models/event_workflow_run_summary.py +116 -0
- hatchet_sdk/v0/clients/rest/models/events.py +110 -0
- hatchet_sdk/v0/clients/rest/models/get_step_run_diff_response.py +100 -0
- hatchet_sdk/v0/clients/rest/models/github_app_installation.py +107 -0
- hatchet_sdk/v0/clients/rest/models/github_branch.py +86 -0
- hatchet_sdk/v0/clients/rest/models/github_repo.py +86 -0
- hatchet_sdk/v0/clients/rest/models/info_get_version200_response.py +83 -0
- hatchet_sdk/v0/clients/rest/models/job.py +132 -0
- hatchet_sdk/v0/clients/rest/models/job_run.py +176 -0
- hatchet_sdk/v0/clients/rest/models/job_run_status.py +41 -0
- hatchet_sdk/v0/clients/rest/models/link_github_repository_request.py +106 -0
- hatchet_sdk/v0/clients/rest/models/list_api_tokens_response.py +110 -0
- hatchet_sdk/v0/clients/rest/models/list_github_app_installations_response.py +112 -0
- hatchet_sdk/v0/clients/rest/models/list_pull_requests_response.py +100 -0
- hatchet_sdk/v0/clients/rest/models/list_slack_webhooks.py +110 -0
- hatchet_sdk/v0/clients/rest/models/list_sns_integrations.py +110 -0
- hatchet_sdk/v0/clients/rest/models/log_line.py +94 -0
- hatchet_sdk/v0/clients/rest/models/log_line_level.py +39 -0
- hatchet_sdk/v0/clients/rest/models/log_line_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/log_line_order_by_direction.py +37 -0
- hatchet_sdk/v0/clients/rest/models/log_line_order_by_field.py +36 -0
- hatchet_sdk/v0/clients/rest/models/pagination_response.py +95 -0
- hatchet_sdk/v0/clients/rest/models/pull_request.py +112 -0
- hatchet_sdk/v0/clients/rest/models/pull_request_state.py +37 -0
- hatchet_sdk/v0/clients/rest/models/queue_metrics.py +97 -0
- hatchet_sdk/v0/clients/rest/models/rate_limit.py +117 -0
- hatchet_sdk/v0/clients/rest/models/rate_limit_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/rate_limit_order_by_direction.py +37 -0
- hatchet_sdk/v0/clients/rest/models/rate_limit_order_by_field.py +38 -0
- hatchet_sdk/v0/clients/rest/models/recent_step_runs.py +118 -0
- hatchet_sdk/v0/clients/rest/models/reject_invite_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/replay_event_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/replay_workflow_runs_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/replay_workflow_runs_response.py +100 -0
- hatchet_sdk/v0/clients/rest/models/rerun_step_run_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/schedule_workflow_run_request.py +92 -0
- hatchet_sdk/v0/clients/rest/models/scheduled_run_status.py +42 -0
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows.py +149 -0
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows_method.py +37 -0
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows_order_by_field.py +37 -0
- hatchet_sdk/v0/clients/rest/models/semaphore_slots.py +113 -0
- hatchet_sdk/v0/clients/rest/models/slack_webhook.py +127 -0
- hatchet_sdk/v0/clients/rest/models/sns_integration.py +114 -0
- hatchet_sdk/v0/clients/rest/models/step.py +123 -0
- hatchet_sdk/v0/clients/rest/models/step_run.py +202 -0
- hatchet_sdk/v0/clients/rest/models/step_run_archive.py +142 -0
- hatchet_sdk/v0/clients/rest/models/step_run_archive_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/step_run_diff.py +91 -0
- hatchet_sdk/v0/clients/rest/models/step_run_event.py +122 -0
- hatchet_sdk/v0/clients/rest/models/step_run_event_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/step_run_event_reason.py +52 -0
- hatchet_sdk/v0/clients/rest/models/step_run_event_severity.py +38 -0
- hatchet_sdk/v0/clients/rest/models/step_run_status.py +44 -0
- hatchet_sdk/v0/clients/rest/models/tenant.py +118 -0
- hatchet_sdk/v0/clients/rest/models/tenant_alert_email_group.py +98 -0
- hatchet_sdk/v0/clients/rest/models/tenant_alert_email_group_list.py +112 -0
- hatchet_sdk/v0/clients/rest/models/tenant_alerting_settings.py +143 -0
- hatchet_sdk/v0/clients/rest/models/tenant_invite.py +120 -0
- hatchet_sdk/v0/clients/rest/models/tenant_invite_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/tenant_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/tenant_member.py +123 -0
- hatchet_sdk/v0/clients/rest/models/tenant_member_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/tenant_member_role.py +38 -0
- hatchet_sdk/v0/clients/rest/models/tenant_queue_metrics.py +116 -0
- hatchet_sdk/v0/clients/rest/models/tenant_resource.py +40 -0
- hatchet_sdk/v0/clients/rest/models/tenant_resource_limit.py +135 -0
- hatchet_sdk/v0/clients/rest/models/tenant_resource_policy.py +102 -0
- hatchet_sdk/v0/clients/rest/models/tenant_step_run_queue_metrics.py +83 -0
- hatchet_sdk/v0/clients/rest/models/trigger_workflow_run_request.py +91 -0
- hatchet_sdk/v0/clients/rest/models/update_tenant_alert_email_group_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/update_tenant_invite_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/update_tenant_request.py +137 -0
- hatchet_sdk/v0/clients/rest/models/update_worker_request.py +87 -0
- hatchet_sdk/v0/clients/rest/models/user.py +126 -0
- hatchet_sdk/v0/clients/rest/models/user_change_password_request.py +88 -0
- hatchet_sdk/v0/clients/rest/models/user_login_request.py +86 -0
- hatchet_sdk/v0/clients/rest/models/user_register_request.py +91 -0
- hatchet_sdk/v0/clients/rest/models/user_tenant_memberships_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/user_tenant_public.py +86 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker.py +100 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_create_request.py +94 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_create_response.py +98 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_created.py +102 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_list_response.py +110 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_request.py +102 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_request_list_response.py +104 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_request_method.py +38 -0
- hatchet_sdk/v0/clients/rest/models/worker.py +239 -0
- hatchet_sdk/v0/clients/rest/models/worker_label.py +102 -0
- hatchet_sdk/v0/clients/rest/models/worker_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/worker_runtime_info.py +103 -0
- hatchet_sdk/v0/clients/rest/models/worker_runtime_sdks.py +38 -0
- hatchet_sdk/v0/clients/rest/models/worker_type.py +38 -0
- hatchet_sdk/v0/clients/rest/models/workflow.py +165 -0
- hatchet_sdk/v0/clients/rest/models/workflow_concurrency.py +107 -0
- hatchet_sdk/v0/clients/rest/models/workflow_deployment_config.py +136 -0
- hatchet_sdk/v0/clients/rest/models/workflow_kind.py +38 -0
- hatchet_sdk/v0/clients/rest/models/workflow_list.py +120 -0
- hatchet_sdk/v0/clients/rest/models/workflow_metrics.py +97 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run.py +188 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_cancel200_response.py +85 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_order_by_direction.py +37 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_order_by_field.py +39 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_shape.py +186 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_status.py +42 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_triggered_by.py +112 -0
- hatchet_sdk/v0/clients/rest/models/workflow_runs_cancel_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/workflow_runs_metrics.py +94 -0
- hatchet_sdk/v0/clients/rest/models/workflow_runs_metrics_counts.py +104 -0
- hatchet_sdk/v0/clients/rest/models/workflow_tag.py +84 -0
- hatchet_sdk/v0/clients/rest/models/workflow_trigger_cron_ref.py +86 -0
- hatchet_sdk/v0/clients/rest/models/workflow_trigger_event_ref.py +86 -0
- hatchet_sdk/v0/clients/rest/models/workflow_triggers.py +141 -0
- hatchet_sdk/v0/clients/rest/models/workflow_update_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/workflow_version.py +170 -0
- hatchet_sdk/v0/clients/rest/models/workflow_version_concurrency.py +114 -0
- hatchet_sdk/v0/clients/rest/models/workflow_version_definition.py +85 -0
- hatchet_sdk/v0/clients/rest/models/workflow_version_meta.py +123 -0
- hatchet_sdk/v0/clients/rest/models/workflow_workers_count.py +95 -0
- hatchet_sdk/v0/clients/rest/rest.py +187 -0
- hatchet_sdk/v0/clients/rest/tenacity_utils.py +39 -0
- hatchet_sdk/v0/clients/rest_client.py +613 -0
- hatchet_sdk/v0/clients/run_event_listener.py +260 -0
- hatchet_sdk/v0/clients/workflow_listener.py +277 -0
- hatchet_sdk/v0/connection.py +63 -0
- hatchet_sdk/v0/context/__init__.py +1 -0
- hatchet_sdk/v0/context/context.py +446 -0
- hatchet_sdk/v0/context/worker_context.py +28 -0
- hatchet_sdk/v0/contracts/dispatcher_pb2.py +102 -0
- hatchet_sdk/v0/contracts/dispatcher_pb2.pyi +387 -0
- hatchet_sdk/v0/contracts/dispatcher_pb2_grpc.py +621 -0
- hatchet_sdk/v0/contracts/events_pb2.py +46 -0
- hatchet_sdk/v0/contracts/events_pb2.pyi +87 -0
- hatchet_sdk/v0/contracts/events_pb2_grpc.py +274 -0
- hatchet_sdk/v0/contracts/workflows_pb2.py +80 -0
- hatchet_sdk/v0/contracts/workflows_pb2.pyi +312 -0
- hatchet_sdk/v0/contracts/workflows_pb2_grpc.py +277 -0
- hatchet_sdk/v0/features/cron.py +286 -0
- hatchet_sdk/v0/features/scheduled.py +248 -0
- hatchet_sdk/v0/hatchet.py +310 -0
- hatchet_sdk/v0/labels.py +10 -0
- hatchet_sdk/v0/logger.py +13 -0
- hatchet_sdk/v0/metadata.py +2 -0
- hatchet_sdk/v0/opentelemetry/instrumentor.py +396 -0
- hatchet_sdk/v0/rate_limit.py +126 -0
- hatchet_sdk/v0/semver.py +30 -0
- hatchet_sdk/v0/token.py +27 -0
- hatchet_sdk/v0/utils/aio_utils.py +137 -0
- hatchet_sdk/v0/utils/backoff.py +9 -0
- hatchet_sdk/v0/utils/typing.py +12 -0
- hatchet_sdk/{v2 → v0/v2}/callable.py +8 -8
- hatchet_sdk/{v2 → v0/v2}/concurrency.py +2 -2
- hatchet_sdk/{v2 → v0/v2}/hatchet.py +10 -10
- hatchet_sdk/v0/worker/__init__.py +1 -0
- hatchet_sdk/v0/worker/action_listener_process.py +278 -0
- hatchet_sdk/v0/worker/runner/run_loop_manager.py +112 -0
- hatchet_sdk/v0/worker/runner/runner.py +460 -0
- hatchet_sdk/v0/worker/runner/utils/capture_logs.py +81 -0
- hatchet_sdk/v0/worker/runner/utils/error_with_traceback.py +6 -0
- hatchet_sdk/v0/worker/worker.py +391 -0
- hatchet_sdk/v0/workflow.py +261 -0
- hatchet_sdk/v0/workflow_run.py +59 -0
- hatchet_sdk/worker/__init__.py +0 -1
- hatchet_sdk/worker/action_listener_process.py +36 -33
- hatchet_sdk/worker/runner/run_loop_manager.py +18 -16
- hatchet_sdk/worker/runner/runner.py +32 -60
- hatchet_sdk/worker/runner/utils/capture_logs.py +25 -14
- hatchet_sdk/worker/runner/utils/error_with_traceback.py +1 -1
- hatchet_sdk/worker/worker.py +61 -75
- hatchet_sdk/workflow.py +473 -207
- hatchet_sdk/workflow_run.py +5 -18
- {hatchet_sdk-0.47.0.dist-info → hatchet_sdk-1.0.0.dist-info}/METADATA +2 -1
- hatchet_sdk-1.0.0.dist-info/RECORD +485 -0
- hatchet_sdk/utils/serialization.py +0 -18
- hatchet_sdk-0.47.0.dist-info/RECORD +0 -237
- /hatchet_sdk/{loader.py → v0/loader.py} +0 -0
- /hatchet_sdk/{utils → v0/utils}/types.py +0 -0
- {hatchet_sdk-0.47.0.dist-info → hatchet_sdk-1.0.0.dist-info}/WHEEL +0 -0
- {hatchet_sdk-0.47.0.dist-info → hatchet_sdk-1.0.0.dist-info}/entry_points.txt +0 -0
hatchet_sdk/connection.py
CHANGED
|
@@ -1,26 +1,36 @@
|
|
|
1
1
|
import os
|
|
2
|
-
from typing import
|
|
2
|
+
from typing import Literal, cast, overload
|
|
3
3
|
|
|
4
4
|
import grpc
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
from hatchet_sdk.loader import ClientConfig
|
|
6
|
+
from hatchet_sdk.config import ClientConfig
|
|
8
7
|
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
@overload
|
|
10
|
+
def new_conn(config: ClientConfig, aio: Literal[False]) -> grpc.Channel: ...
|
|
11
11
|
|
|
12
|
+
|
|
13
|
+
@overload
|
|
14
|
+
def new_conn(config: ClientConfig, aio: Literal[True]) -> grpc.aio.Channel: ...
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def new_conn(config: ClientConfig, aio: bool) -> grpc.Channel | grpc.aio.Channel:
|
|
12
18
|
credentials: grpc.ChannelCredentials | None = None
|
|
13
19
|
|
|
14
20
|
# load channel credentials
|
|
15
|
-
if config.tls_config.
|
|
16
|
-
root:
|
|
21
|
+
if config.tls_config.strategy == "tls":
|
|
22
|
+
root: bytes | None = None
|
|
17
23
|
|
|
18
|
-
if config.tls_config.
|
|
19
|
-
root = open(config.tls_config.
|
|
24
|
+
if config.tls_config.root_ca_file:
|
|
25
|
+
root = open(config.tls_config.root_ca_file, "rb").read()
|
|
20
26
|
|
|
21
27
|
credentials = grpc.ssl_channel_credentials(root_certificates=root)
|
|
22
|
-
elif config.tls_config.
|
|
23
|
-
|
|
28
|
+
elif config.tls_config.strategy == "mtls":
|
|
29
|
+
assert config.tls_config.root_ca_file
|
|
30
|
+
assert config.tls_config.key_file
|
|
31
|
+
assert config.tls_config.cert_file
|
|
32
|
+
|
|
33
|
+
root = open(config.tls_config.root_ca_file, "rb").read()
|
|
24
34
|
private_key = open(config.tls_config.key_file, "rb").read()
|
|
25
35
|
certificate_chain = open(config.tls_config.cert_file, "rb").read()
|
|
26
36
|
|
|
@@ -32,7 +42,7 @@ def new_conn(config: "ClientConfig", aio=False):
|
|
|
32
42
|
|
|
33
43
|
start = grpc if not aio else grpc.aio
|
|
34
44
|
|
|
35
|
-
channel_options = [
|
|
45
|
+
channel_options: list[tuple[str, str | int]] = [
|
|
36
46
|
("grpc.max_send_message_length", config.grpc_max_send_message_length),
|
|
37
47
|
("grpc.max_receive_message_length", config.grpc_max_recv_message_length),
|
|
38
48
|
("grpc.keepalive_time_ms", 10 * 1000),
|
|
@@ -46,7 +56,7 @@ def new_conn(config: "ClientConfig", aio=False):
|
|
|
46
56
|
# When steps execute via os.fork, we see `TSI_DATA_CORRUPTED` errors.
|
|
47
57
|
os.environ["GRPC_ENABLE_FORK_SUPPORT"] = "False"
|
|
48
58
|
|
|
49
|
-
if config.tls_config.
|
|
59
|
+
if config.tls_config.strategy == "none":
|
|
50
60
|
conn = start.insecure_channel(
|
|
51
61
|
target=config.host_port,
|
|
52
62
|
options=channel_options,
|
|
@@ -61,4 +71,8 @@ def new_conn(config: "ClientConfig", aio=False):
|
|
|
61
71
|
credentials=credentials,
|
|
62
72
|
options=channel_options,
|
|
63
73
|
)
|
|
64
|
-
|
|
74
|
+
|
|
75
|
+
return cast(
|
|
76
|
+
grpc.Channel | grpc.aio.Channel,
|
|
77
|
+
conn,
|
|
78
|
+
)
|
hatchet_sdk/context/__init__.py
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from .context import Context
|
hatchet_sdk/context/context.py
CHANGED
|
@@ -2,43 +2,34 @@ import inspect
|
|
|
2
2
|
import json
|
|
3
3
|
import traceback
|
|
4
4
|
from concurrent.futures import Future, ThreadPoolExecutor
|
|
5
|
-
from typing import Any,
|
|
6
|
-
from warnings import warn
|
|
5
|
+
from typing import Any, cast
|
|
7
6
|
|
|
8
|
-
from pydantic import BaseModel
|
|
7
|
+
from pydantic import BaseModel
|
|
9
8
|
|
|
10
|
-
from hatchet_sdk.clients.
|
|
11
|
-
from hatchet_sdk.clients.rest.tenacity_utils import tenacity_retry
|
|
12
|
-
from hatchet_sdk.clients.rest_client import RestApi
|
|
13
|
-
from hatchet_sdk.clients.run_event_listener import RunEventListenerClient
|
|
14
|
-
from hatchet_sdk.clients.workflow_listener import PooledWorkflowRunListener
|
|
15
|
-
from hatchet_sdk.context.worker_context import WorkerContext
|
|
16
|
-
from hatchet_sdk.contracts.dispatcher_pb2 import OverridesData
|
|
17
|
-
from hatchet_sdk.contracts.workflows_pb2 import (
|
|
18
|
-
BulkTriggerWorkflowRequest,
|
|
19
|
-
TriggerWorkflowRequest,
|
|
20
|
-
)
|
|
21
|
-
from hatchet_sdk.utils.types import WorkflowValidator
|
|
22
|
-
from hatchet_sdk.utils.typing import is_basemodel_subclass
|
|
23
|
-
from hatchet_sdk.workflow_run import WorkflowRunRef
|
|
24
|
-
|
|
25
|
-
from ..clients.admin import (
|
|
9
|
+
from hatchet_sdk.clients.admin import (
|
|
26
10
|
AdminClient,
|
|
27
11
|
ChildTriggerWorkflowOptions,
|
|
28
12
|
ChildWorkflowRunDict,
|
|
29
13
|
TriggerWorkflowOptions,
|
|
30
14
|
WorkflowRunDict,
|
|
31
15
|
)
|
|
32
|
-
from
|
|
16
|
+
from hatchet_sdk.clients.dispatcher.dispatcher import ( # type: ignore[attr-defined]
|
|
33
17
|
Action,
|
|
34
18
|
DispatcherClient,
|
|
35
19
|
)
|
|
36
|
-
from
|
|
20
|
+
from hatchet_sdk.clients.events import EventClient
|
|
21
|
+
from hatchet_sdk.clients.rest.tenacity_utils import tenacity_retry
|
|
22
|
+
from hatchet_sdk.clients.rest_client import RestApi
|
|
23
|
+
from hatchet_sdk.clients.run_event_listener import RunEventListenerClient
|
|
24
|
+
from hatchet_sdk.clients.workflow_listener import PooledWorkflowRunListener
|
|
25
|
+
from hatchet_sdk.context.worker_context import WorkerContext
|
|
26
|
+
from hatchet_sdk.contracts.dispatcher_pb2 import OverridesData
|
|
27
|
+
from hatchet_sdk.logger import logger
|
|
28
|
+
from hatchet_sdk.utils.typing import JSONSerializableMapping, WorkflowValidator
|
|
29
|
+
from hatchet_sdk.workflow_run import WorkflowRunRef
|
|
37
30
|
|
|
38
31
|
DEFAULT_WORKFLOW_POLLING_INTERVAL = 5 # Seconds
|
|
39
32
|
|
|
40
|
-
T = TypeVar("T", bound=BaseModel)
|
|
41
|
-
|
|
42
33
|
|
|
43
34
|
def get_caller_file_path() -> str:
|
|
44
35
|
caller_frame = inspect.stack()[2]
|
|
@@ -46,125 +37,15 @@ def get_caller_file_path() -> str:
|
|
|
46
37
|
return caller_frame.filename
|
|
47
38
|
|
|
48
39
|
|
|
49
|
-
class
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
def _prepare_workflow_options(
|
|
55
|
-
self,
|
|
56
|
-
key: str | None = None,
|
|
57
|
-
options: ChildTriggerWorkflowOptions | None = None,
|
|
58
|
-
worker_id: str | None = None,
|
|
59
|
-
) -> TriggerWorkflowOptions:
|
|
60
|
-
workflow_run_id = self.action.workflow_run_id
|
|
61
|
-
step_run_id = self.action.step_run_id
|
|
62
|
-
|
|
63
|
-
desired_worker_id = None
|
|
64
|
-
if options is not None and "sticky" in options and options["sticky"] == True:
|
|
65
|
-
desired_worker_id = worker_id
|
|
66
|
-
|
|
67
|
-
meta = None
|
|
68
|
-
if options is not None and "additional_metadata" in options:
|
|
69
|
-
meta = options["additional_metadata"]
|
|
70
|
-
|
|
71
|
-
## TODO: Pydantic here to simplify this
|
|
72
|
-
trigger_options: TriggerWorkflowOptions = {
|
|
73
|
-
"parent_id": workflow_run_id,
|
|
74
|
-
"parent_step_run_id": step_run_id,
|
|
75
|
-
"child_key": key,
|
|
76
|
-
"child_index": self.spawn_index,
|
|
77
|
-
"additional_metadata": meta,
|
|
78
|
-
"desired_worker_id": desired_worker_id,
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
self.spawn_index += 1
|
|
82
|
-
return trigger_options
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
class ContextAioImpl(BaseContext):
|
|
86
|
-
def __init__(
|
|
87
|
-
self,
|
|
88
|
-
action: Action,
|
|
89
|
-
dispatcher_client: DispatcherClient,
|
|
90
|
-
admin_client: AdminClient,
|
|
91
|
-
event_client: EventClient,
|
|
92
|
-
rest_client: RestApi,
|
|
93
|
-
workflow_listener: PooledWorkflowRunListener,
|
|
94
|
-
workflow_run_event_listener: RunEventListenerClient,
|
|
95
|
-
worker: WorkerContext,
|
|
96
|
-
namespace: str = "",
|
|
97
|
-
):
|
|
98
|
-
self.action = action
|
|
99
|
-
self.dispatcher_client = dispatcher_client
|
|
100
|
-
self.admin_client = admin_client
|
|
101
|
-
self.event_client = event_client
|
|
102
|
-
self.rest_client = rest_client
|
|
103
|
-
self.workflow_listener = workflow_listener
|
|
104
|
-
self.workflow_run_event_listener = workflow_run_event_listener
|
|
105
|
-
self.namespace = namespace
|
|
106
|
-
self.spawn_index = -1
|
|
107
|
-
self.worker = worker
|
|
108
|
-
|
|
109
|
-
@tenacity_retry
|
|
110
|
-
async def spawn_workflow(
|
|
111
|
-
self,
|
|
112
|
-
workflow_name: str,
|
|
113
|
-
input: dict[str, Any] = {},
|
|
114
|
-
key: str | None = None,
|
|
115
|
-
options: ChildTriggerWorkflowOptions | None = None,
|
|
116
|
-
) -> WorkflowRunRef:
|
|
117
|
-
worker_id = self.worker.id()
|
|
118
|
-
# if (
|
|
119
|
-
# options is not None
|
|
120
|
-
# and "sticky" in options
|
|
121
|
-
# and options["sticky"] == True
|
|
122
|
-
# and not self.worker.has_workflow(workflow_name)
|
|
123
|
-
# ):
|
|
124
|
-
# raise Exception(
|
|
125
|
-
# f"cannot run with sticky: workflow {workflow_name} is not registered on the worker"
|
|
126
|
-
# )
|
|
127
|
-
|
|
128
|
-
trigger_options = self._prepare_workflow_options(key, options, worker_id)
|
|
40
|
+
class StepRunError(BaseModel):
|
|
41
|
+
step_id: str
|
|
42
|
+
step_run_action_name: str
|
|
43
|
+
error: str
|
|
129
44
|
|
|
130
|
-
return await self.admin_client.aio.run_workflow(
|
|
131
|
-
workflow_name, input, trigger_options
|
|
132
|
-
)
|
|
133
45
|
|
|
134
|
-
|
|
135
|
-
async def spawn_workflows(
|
|
136
|
-
self, child_workflow_runs: list[ChildWorkflowRunDict]
|
|
137
|
-
) -> list[WorkflowRunRef]:
|
|
138
|
-
|
|
139
|
-
if len(child_workflow_runs) == 0:
|
|
140
|
-
raise Exception("no child workflows to spawn")
|
|
141
|
-
|
|
142
|
-
worker_id = self.worker.id()
|
|
143
|
-
|
|
144
|
-
bulk_trigger_workflow_runs: list[WorkflowRunDict] = []
|
|
145
|
-
for child_workflow_run in child_workflow_runs:
|
|
146
|
-
workflow_name = child_workflow_run["workflow_name"]
|
|
147
|
-
input = child_workflow_run["input"]
|
|
148
|
-
|
|
149
|
-
key = child_workflow_run.get("key")
|
|
150
|
-
options = child_workflow_run.get("options", {})
|
|
151
|
-
|
|
152
|
-
trigger_options = self._prepare_workflow_options(key, options, worker_id)
|
|
153
|
-
|
|
154
|
-
bulk_trigger_workflow_runs.append(
|
|
155
|
-
WorkflowRunDict(
|
|
156
|
-
workflow_name=workflow_name, input=input, options=trigger_options
|
|
157
|
-
)
|
|
158
|
-
)
|
|
159
|
-
|
|
160
|
-
return await self.admin_client.aio.run_workflows(bulk_trigger_workflow_runs)
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
class Context(BaseContext):
|
|
46
|
+
class Context:
|
|
164
47
|
spawn_index = -1
|
|
165
48
|
|
|
166
|
-
worker: WorkerContext
|
|
167
|
-
|
|
168
49
|
def __init__(
|
|
169
50
|
self,
|
|
170
51
|
action: Action,
|
|
@@ -172,7 +53,7 @@ class Context(BaseContext):
|
|
|
172
53
|
admin_client: AdminClient,
|
|
173
54
|
event_client: EventClient,
|
|
174
55
|
rest_client: RestApi,
|
|
175
|
-
workflow_listener: PooledWorkflowRunListener,
|
|
56
|
+
workflow_listener: PooledWorkflowRunListener | None,
|
|
176
57
|
workflow_run_event_listener: RunEventListenerClient,
|
|
177
58
|
worker: WorkerContext,
|
|
178
59
|
namespace: str = "",
|
|
@@ -181,38 +62,14 @@ class Context(BaseContext):
|
|
|
181
62
|
self.worker = worker
|
|
182
63
|
self.validator_registry = validator_registry
|
|
183
64
|
|
|
184
|
-
self.
|
|
185
|
-
action,
|
|
186
|
-
dispatcher_client,
|
|
187
|
-
admin_client,
|
|
188
|
-
event_client,
|
|
189
|
-
rest_client,
|
|
190
|
-
workflow_listener,
|
|
191
|
-
workflow_run_event_listener,
|
|
192
|
-
worker,
|
|
193
|
-
namespace,
|
|
194
|
-
)
|
|
195
|
-
|
|
196
|
-
# Check the type of action.action_payload before attempting to load it as JSON
|
|
197
|
-
if isinstance(action.action_payload, (str, bytes, bytearray)):
|
|
198
|
-
try:
|
|
199
|
-
self.data = cast(dict[str, Any], json.loads(action.action_payload))
|
|
200
|
-
except Exception as e:
|
|
201
|
-
logger.error(f"Error parsing action payload: {e}")
|
|
202
|
-
# Assign an empty dictionary if parsing fails
|
|
203
|
-
self.data: dict[str, Any] = {} # type: ignore[no-redef]
|
|
204
|
-
else:
|
|
205
|
-
# Directly assign the payload to self.data if it's already a dict
|
|
206
|
-
self.data = (
|
|
207
|
-
action.action_payload if isinstance(action.action_payload, dict) else {}
|
|
208
|
-
)
|
|
65
|
+
self.data = action.action_payload
|
|
209
66
|
|
|
210
67
|
self.action = action
|
|
211
68
|
|
|
212
69
|
# FIXME: stepRunId is a legacy field, we should remove it
|
|
213
70
|
self.stepRunId = action.step_run_id
|
|
214
71
|
|
|
215
|
-
self.step_run_id = action.step_run_id
|
|
72
|
+
self.step_run_id: str = action.step_run_id
|
|
216
73
|
self.exit_flag = False
|
|
217
74
|
self.dispatcher_client = dispatcher_client
|
|
218
75
|
self.admin_client = admin_client
|
|
@@ -227,14 +84,28 @@ class Context(BaseContext):
|
|
|
227
84
|
self.logger_thread_pool = ThreadPoolExecutor(max_workers=1)
|
|
228
85
|
self.stream_event_thread_pool = ThreadPoolExecutor(max_workers=1)
|
|
229
86
|
|
|
230
|
-
|
|
231
|
-
# overrides_data is a dictionary of key-value pairs
|
|
232
|
-
self.overrides_data = self.data.get("overrides", {})
|
|
87
|
+
self.input = self.data.input
|
|
233
88
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
89
|
+
def _prepare_workflow_options(
|
|
90
|
+
self,
|
|
91
|
+
key: str | None = None,
|
|
92
|
+
options: ChildTriggerWorkflowOptions = ChildTriggerWorkflowOptions(),
|
|
93
|
+
worker_id: str | None = None,
|
|
94
|
+
) -> TriggerWorkflowOptions:
|
|
95
|
+
workflow_run_id = self.action.workflow_run_id
|
|
96
|
+
step_run_id = self.action.step_run_id
|
|
97
|
+
|
|
98
|
+
trigger_options = TriggerWorkflowOptions(
|
|
99
|
+
parent_id=workflow_run_id,
|
|
100
|
+
parent_step_run_id=step_run_id,
|
|
101
|
+
child_key=key,
|
|
102
|
+
child_index=self.spawn_index,
|
|
103
|
+
additional_metadata=options.additional_metadata,
|
|
104
|
+
desired_worker_id=worker_id if options.sticky else None,
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
self.spawn_index += 1
|
|
108
|
+
return trigger_options
|
|
238
109
|
|
|
239
110
|
def step_output(self, step: str) -> dict[str, Any] | BaseModel:
|
|
240
111
|
workflow_validator = next(
|
|
@@ -243,7 +114,7 @@ class Context(BaseContext):
|
|
|
243
114
|
)
|
|
244
115
|
|
|
245
116
|
try:
|
|
246
|
-
parent_step_data = cast(dict[str, Any], self.data
|
|
117
|
+
parent_step_data = cast(dict[str, Any], self.data.parents[step])
|
|
247
118
|
except KeyError:
|
|
248
119
|
raise ValueError(f"Step output for '{step}' not found")
|
|
249
120
|
|
|
@@ -252,20 +123,15 @@ class Context(BaseContext):
|
|
|
252
123
|
|
|
253
124
|
return parent_step_data
|
|
254
125
|
|
|
126
|
+
@property
|
|
255
127
|
def triggered_by_event(self) -> bool:
|
|
256
|
-
return
|
|
257
|
-
|
|
258
|
-
def workflow_input(self) -> dict[str, Any] | T:
|
|
259
|
-
if (r := self.validator_registry.get(self.action.action_id)) and (
|
|
260
|
-
i := r.workflow_input
|
|
261
|
-
):
|
|
262
|
-
return cast(
|
|
263
|
-
T,
|
|
264
|
-
i.model_validate(self.input),
|
|
265
|
-
)
|
|
128
|
+
return self.data.triggered_by == "event"
|
|
266
129
|
|
|
130
|
+
@property
|
|
131
|
+
def workflow_input(self) -> JSONSerializableMapping:
|
|
267
132
|
return self.input
|
|
268
133
|
|
|
134
|
+
@property
|
|
269
135
|
def workflow_run_id(self) -> str:
|
|
270
136
|
return self.action.workflow_run_id
|
|
271
137
|
|
|
@@ -278,15 +144,6 @@ class Context(BaseContext):
|
|
|
278
144
|
return self.exit_flag
|
|
279
145
|
|
|
280
146
|
def playground(self, name: str, default: str | None = None) -> str | None:
|
|
281
|
-
# if the key exists in the overrides_data field, return the value
|
|
282
|
-
if name in self.overrides_data:
|
|
283
|
-
warn(
|
|
284
|
-
"Use of `overrides_data` is deprecated.",
|
|
285
|
-
DeprecationWarning,
|
|
286
|
-
stacklevel=1,
|
|
287
|
-
)
|
|
288
|
-
return str(self.overrides_data[name])
|
|
289
|
-
|
|
290
147
|
caller_file = get_caller_file_path()
|
|
291
148
|
|
|
292
149
|
self.dispatcher_client.put_overrides_data(
|
|
@@ -308,7 +165,9 @@ class Context(BaseContext):
|
|
|
308
165
|
# we don't want to raise an exception here, as it will kill the log thread
|
|
309
166
|
return False, e
|
|
310
167
|
|
|
311
|
-
def log(
|
|
168
|
+
def log(
|
|
169
|
+
self, line: str | JSONSerializableMapping, raise_on_error: bool = False
|
|
170
|
+
) -> None:
|
|
312
171
|
if self.stepRunId == "":
|
|
313
172
|
return
|
|
314
173
|
|
|
@@ -361,23 +220,29 @@ class Context(BaseContext):
|
|
|
361
220
|
except Exception as e:
|
|
362
221
|
logger.error(f"Error refreshing timeout: {e}")
|
|
363
222
|
|
|
223
|
+
@property
|
|
364
224
|
def retry_count(self) -> int:
|
|
365
225
|
return self.action.retry_count
|
|
366
226
|
|
|
367
|
-
|
|
227
|
+
@property
|
|
228
|
+
def additional_metadata(self) -> JSONSerializableMapping | None:
|
|
368
229
|
return self.action.additional_metadata
|
|
369
230
|
|
|
231
|
+
@property
|
|
370
232
|
def child_index(self) -> int | None:
|
|
371
233
|
return self.action.child_workflow_index
|
|
372
234
|
|
|
235
|
+
@property
|
|
373
236
|
def child_key(self) -> str | None:
|
|
374
237
|
return self.action.child_workflow_key
|
|
375
238
|
|
|
239
|
+
@property
|
|
376
240
|
def parent_workflow_run_id(self) -> str | None:
|
|
377
241
|
return self.action.parent_workflow_run_id
|
|
378
242
|
|
|
243
|
+
@property
|
|
379
244
|
def step_run_errors(self) -> dict[str, str]:
|
|
380
|
-
errors =
|
|
245
|
+
errors = self.data.step_run_errors
|
|
381
246
|
|
|
382
247
|
if not errors:
|
|
383
248
|
logger.error(
|
|
@@ -386,18 +251,18 @@ class Context(BaseContext):
|
|
|
386
251
|
|
|
387
252
|
return errors
|
|
388
253
|
|
|
389
|
-
def fetch_run_failures(self) -> list[
|
|
254
|
+
def fetch_run_failures(self) -> list[StepRunError]:
|
|
390
255
|
data = self.rest_client.workflow_run_get(self.action.workflow_run_id)
|
|
391
256
|
other_job_runs = [
|
|
392
257
|
run for run in (data.job_runs or []) if run.job_id != self.action.job_id
|
|
393
258
|
]
|
|
394
|
-
|
|
259
|
+
|
|
395
260
|
return [
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
261
|
+
StepRunError(
|
|
262
|
+
step_id=step_run.step_id,
|
|
263
|
+
step_run_action_name=step_run.step.action,
|
|
264
|
+
error=step_run.error,
|
|
265
|
+
)
|
|
401
266
|
for job_run in other_job_runs
|
|
402
267
|
if job_run.step_runs
|
|
403
268
|
for step_run in job_run.step_runs
|
|
@@ -405,20 +270,23 @@ class Context(BaseContext):
|
|
|
405
270
|
]
|
|
406
271
|
|
|
407
272
|
@tenacity_retry
|
|
408
|
-
def
|
|
273
|
+
async def aio_spawn_workflow(
|
|
409
274
|
self,
|
|
410
275
|
workflow_name: str,
|
|
411
|
-
input:
|
|
276
|
+
input: JSONSerializableMapping = {},
|
|
412
277
|
key: str | None = None,
|
|
413
|
-
options: ChildTriggerWorkflowOptions
|
|
278
|
+
options: ChildTriggerWorkflowOptions = ChildTriggerWorkflowOptions(),
|
|
414
279
|
) -> WorkflowRunRef:
|
|
415
280
|
worker_id = self.worker.id()
|
|
281
|
+
|
|
416
282
|
trigger_options = self._prepare_workflow_options(key, options, worker_id)
|
|
417
283
|
|
|
418
|
-
return self.admin_client.
|
|
284
|
+
return await self.admin_client.aio_run_workflow(
|
|
285
|
+
workflow_name, input, trigger_options
|
|
286
|
+
)
|
|
419
287
|
|
|
420
288
|
@tenacity_retry
|
|
421
|
-
def
|
|
289
|
+
async def aio_spawn_workflows(
|
|
422
290
|
self, child_workflow_runs: list[ChildWorkflowRunDict]
|
|
423
291
|
) -> list[WorkflowRunRef]:
|
|
424
292
|
|
|
@@ -427,20 +295,52 @@ class Context(BaseContext):
|
|
|
427
295
|
|
|
428
296
|
worker_id = self.worker.id()
|
|
429
297
|
|
|
430
|
-
bulk_trigger_workflow_runs
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
298
|
+
bulk_trigger_workflow_runs = [
|
|
299
|
+
WorkflowRunDict(
|
|
300
|
+
workflow_name=child_workflow_run.workflow_name,
|
|
301
|
+
input=child_workflow_run.input,
|
|
302
|
+
options=self._prepare_workflow_options(
|
|
303
|
+
child_workflow_run.key, child_workflow_run.options, worker_id
|
|
304
|
+
),
|
|
305
|
+
)
|
|
306
|
+
for child_workflow_run in child_workflow_runs
|
|
307
|
+
]
|
|
434
308
|
|
|
435
|
-
|
|
436
|
-
options = child_workflow_run.get("options", {})
|
|
309
|
+
return await self.admin_client.aio_run_workflows(bulk_trigger_workflow_runs)
|
|
437
310
|
|
|
438
|
-
|
|
311
|
+
@tenacity_retry
|
|
312
|
+
def spawn_workflow(
|
|
313
|
+
self,
|
|
314
|
+
workflow_name: str,
|
|
315
|
+
input: JSONSerializableMapping = {},
|
|
316
|
+
key: str | None = None,
|
|
317
|
+
options: ChildTriggerWorkflowOptions = ChildTriggerWorkflowOptions(),
|
|
318
|
+
) -> WorkflowRunRef:
|
|
319
|
+
worker_id = self.worker.id()
|
|
320
|
+
|
|
321
|
+
trigger_options = self._prepare_workflow_options(key, options, worker_id)
|
|
322
|
+
|
|
323
|
+
return self.admin_client.run_workflow(workflow_name, input, trigger_options)
|
|
324
|
+
|
|
325
|
+
@tenacity_retry
|
|
326
|
+
def spawn_workflows(
|
|
327
|
+
self, child_workflow_runs: list[ChildWorkflowRunDict]
|
|
328
|
+
) -> list[WorkflowRunRef]:
|
|
329
|
+
|
|
330
|
+
if len(child_workflow_runs) == 0:
|
|
331
|
+
raise Exception("no child workflows to spawn")
|
|
332
|
+
|
|
333
|
+
worker_id = self.worker.id()
|
|
439
334
|
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
335
|
+
bulk_trigger_workflow_runs = [
|
|
336
|
+
WorkflowRunDict(
|
|
337
|
+
workflow_name=child_workflow_run.workflow_name,
|
|
338
|
+
input=child_workflow_run.input,
|
|
339
|
+
options=self._prepare_workflow_options(
|
|
340
|
+
child_workflow_run.key, child_workflow_run.options, worker_id
|
|
341
|
+
),
|
|
444
342
|
)
|
|
343
|
+
for child_workflow_run in child_workflow_runs
|
|
344
|
+
]
|
|
445
345
|
|
|
446
346
|
return self.admin_client.run_workflows(bulk_trigger_workflow_runs)
|