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/worker/worker.py
CHANGED
|
@@ -4,33 +4,36 @@ import multiprocessing.context
|
|
|
4
4
|
import os
|
|
5
5
|
import signal
|
|
6
6
|
import sys
|
|
7
|
-
from concurrent.futures import Future
|
|
8
7
|
from dataclasses import dataclass, field
|
|
9
8
|
from enum import Enum
|
|
10
9
|
from multiprocessing import Queue
|
|
11
10
|
from multiprocessing.process import BaseProcess
|
|
12
11
|
from types import FrameType
|
|
13
|
-
from typing import Any,
|
|
12
|
+
from typing import Any, TypeVar, get_type_hints
|
|
14
13
|
|
|
15
14
|
from aiohttp import web
|
|
16
15
|
from aiohttp.web_request import Request
|
|
17
16
|
from aiohttp.web_response import Response
|
|
18
|
-
from prometheus_client import
|
|
17
|
+
from prometheus_client import Gauge, generate_latest
|
|
19
18
|
|
|
20
|
-
from hatchet_sdk import Context
|
|
21
19
|
from hatchet_sdk.client import Client, new_client_raw
|
|
20
|
+
from hatchet_sdk.clients.dispatcher.action_listener import Action
|
|
21
|
+
from hatchet_sdk.config import ClientConfig
|
|
22
22
|
from hatchet_sdk.contracts.workflows_pb2 import CreateWorkflowVersionOpts
|
|
23
|
-
from hatchet_sdk.loader import ClientConfig
|
|
24
23
|
from hatchet_sdk.logger import logger
|
|
25
|
-
from hatchet_sdk.utils.
|
|
26
|
-
from hatchet_sdk.
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
from hatchet_sdk.worker.runner.run_loop_manager import
|
|
31
|
-
|
|
24
|
+
from hatchet_sdk.utils.typing import WorkflowValidator, is_basemodel_subclass
|
|
25
|
+
from hatchet_sdk.worker.action_listener_process import (
|
|
26
|
+
ActionEvent,
|
|
27
|
+
worker_action_listener_process,
|
|
28
|
+
)
|
|
29
|
+
from hatchet_sdk.worker.runner.run_loop_manager import (
|
|
30
|
+
STOP_LOOP_TYPE,
|
|
31
|
+
WorkerActionRunLoopManager,
|
|
32
|
+
)
|
|
33
|
+
from hatchet_sdk.workflow import BaseWorkflow, Step, StepType, Task
|
|
32
34
|
|
|
33
35
|
T = TypeVar("T")
|
|
36
|
+
TBaseWorkflow = TypeVar("TBaseWorkflow", bound=BaseWorkflow)
|
|
34
37
|
|
|
35
38
|
|
|
36
39
|
class WorkerStatus(Enum):
|
|
@@ -45,9 +48,6 @@ class WorkerStartOptions:
|
|
|
45
48
|
loop: asyncio.AbstractEventLoop | None = field(default=None)
|
|
46
49
|
|
|
47
50
|
|
|
48
|
-
TWorkflow = TypeVar("TWorkflow", bound=object)
|
|
49
|
-
|
|
50
|
-
|
|
51
51
|
class Worker:
|
|
52
52
|
def __init__(
|
|
53
53
|
self,
|
|
@@ -69,20 +69,20 @@ class Worker:
|
|
|
69
69
|
|
|
70
70
|
self.client: Client
|
|
71
71
|
|
|
72
|
-
self.action_registry: dict[str,
|
|
72
|
+
self.action_registry: dict[str, Step[Any]] = {}
|
|
73
73
|
self.validator_registry: dict[str, WorkflowValidator] = {}
|
|
74
74
|
|
|
75
75
|
self.killing: bool = False
|
|
76
76
|
self._status: WorkerStatus
|
|
77
77
|
|
|
78
78
|
self.action_listener_process: BaseProcess
|
|
79
|
-
self.action_listener_health_check: asyncio.Task[
|
|
79
|
+
self.action_listener_health_check: asyncio.Task[None]
|
|
80
80
|
self.action_runner: WorkerActionRunLoopManager
|
|
81
81
|
|
|
82
82
|
self.ctx = multiprocessing.get_context("spawn")
|
|
83
83
|
|
|
84
|
-
self.action_queue: "Queue[
|
|
85
|
-
self.event_queue: "Queue[
|
|
84
|
+
self.action_queue: "Queue[Action | STOP_LOOP_TYPE]" = self.ctx.Queue()
|
|
85
|
+
self.event_queue: "Queue[ActionEvent]" = self.ctx.Queue()
|
|
86
86
|
|
|
87
87
|
self.loop: asyncio.AbstractEventLoop
|
|
88
88
|
|
|
@@ -95,9 +95,6 @@ class Worker:
|
|
|
95
95
|
"hatchet_worker_status", "Current status of the Hatchet worker"
|
|
96
96
|
)
|
|
97
97
|
|
|
98
|
-
def register_function(self, action: str, func: Callable[[Context], Any]) -> None:
|
|
99
|
-
self.action_registry[action] = func
|
|
100
|
-
|
|
101
98
|
def register_workflow_from_opts(
|
|
102
99
|
self, name: str, opts: CreateWorkflowVersionOpts
|
|
103
100
|
) -> None:
|
|
@@ -108,10 +105,7 @@ class Worker:
|
|
|
108
105
|
logger.error(e)
|
|
109
106
|
sys.exit(1)
|
|
110
107
|
|
|
111
|
-
def register_workflow(self, workflow:
|
|
112
|
-
## Hack for typing
|
|
113
|
-
assert isinstance(workflow, WorkflowInterface)
|
|
114
|
-
|
|
108
|
+
def register_workflow(self, workflow: TBaseWorkflow) -> None:
|
|
115
109
|
namespace = self.client.config.namespace
|
|
116
110
|
|
|
117
111
|
try:
|
|
@@ -123,28 +117,42 @@ class Worker:
|
|
|
123
117
|
logger.error(e)
|
|
124
118
|
sys.exit(1)
|
|
125
119
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
return action_func(workflow, context)
|
|
131
|
-
|
|
132
|
-
if asyncio.iscoroutinefunction(action_func):
|
|
133
|
-
setattr(action_function, "is_coroutine", True)
|
|
134
|
-
else:
|
|
135
|
-
setattr(action_function, "is_coroutine", False)
|
|
136
|
-
|
|
137
|
-
return action_function
|
|
138
|
-
|
|
139
|
-
for action_name, action_func in workflow.get_actions(namespace):
|
|
140
|
-
self.action_registry[action_name] = create_action_function(action_func)
|
|
141
|
-
return_type = get_type_hints(action_func).get("return")
|
|
120
|
+
for step in workflow.steps:
|
|
121
|
+
action_name = workflow.create_action_name(namespace, step)
|
|
122
|
+
self.action_registry[action_name] = step
|
|
123
|
+
return_type = get_type_hints(step.fn).get("return")
|
|
142
124
|
|
|
143
125
|
self.validator_registry[action_name] = WorkflowValidator(
|
|
144
|
-
workflow_input=workflow.input_validator,
|
|
126
|
+
workflow_input=workflow.config.input_validator,
|
|
145
127
|
step_output=return_type if is_basemodel_subclass(return_type) else None,
|
|
146
128
|
)
|
|
147
129
|
|
|
130
|
+
def register_function(self, function: Task[Any, Any]) -> None:
|
|
131
|
+
from hatchet_sdk.workflow import BaseWorkflow
|
|
132
|
+
|
|
133
|
+
declaration = function.hatchet.declare_workflow(
|
|
134
|
+
**function.workflow_config.model_dump()
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
class Workflow(BaseWorkflow):
|
|
138
|
+
config = declaration.config
|
|
139
|
+
|
|
140
|
+
@property
|
|
141
|
+
def default_steps(self) -> list[Step[Any]]:
|
|
142
|
+
return [function.step]
|
|
143
|
+
|
|
144
|
+
@property
|
|
145
|
+
def on_failure_steps(self) -> list[Step[Any]]:
|
|
146
|
+
if not function.on_failure_step:
|
|
147
|
+
return []
|
|
148
|
+
|
|
149
|
+
step = function.on_failure_step.step
|
|
150
|
+
step.type = StepType.ON_FAILURE
|
|
151
|
+
|
|
152
|
+
return [step]
|
|
153
|
+
|
|
154
|
+
self.register_workflow(Workflow())
|
|
155
|
+
|
|
148
156
|
def status(self) -> WorkerStatus:
|
|
149
157
|
return self._status
|
|
150
158
|
|
|
@@ -173,7 +181,7 @@ class Worker:
|
|
|
173
181
|
return web.Response(body=generate_latest(), content_type="text/plain")
|
|
174
182
|
|
|
175
183
|
async def start_health_server(self) -> None:
|
|
176
|
-
port = self.config.
|
|
184
|
+
port = self.config.healthcheck.port
|
|
177
185
|
|
|
178
186
|
app = web.Application()
|
|
179
187
|
app.add_routes(
|
|
@@ -195,13 +203,11 @@ class Worker:
|
|
|
195
203
|
|
|
196
204
|
logger.info(f"healthcheck server running on port {port}")
|
|
197
205
|
|
|
198
|
-
def start(
|
|
199
|
-
self, options: WorkerStartOptions = WorkerStartOptions()
|
|
200
|
-
) -> Future[asyncio.Task[Any] | None]:
|
|
206
|
+
def start(self, options: WorkerStartOptions = WorkerStartOptions()) -> None:
|
|
201
207
|
self.owned_loop = self.setup_loop(options.loop)
|
|
202
208
|
|
|
203
|
-
|
|
204
|
-
self.
|
|
209
|
+
asyncio.run_coroutine_threadsafe(
|
|
210
|
+
self.aio_start(options, _from_start=True), self.loop
|
|
205
211
|
)
|
|
206
212
|
|
|
207
213
|
# start the loop and wait until its closed
|
|
@@ -211,14 +217,12 @@ class Worker:
|
|
|
211
217
|
if self.handle_kill:
|
|
212
218
|
sys.exit(0)
|
|
213
219
|
|
|
214
|
-
return f
|
|
215
|
-
|
|
216
220
|
## Start methods
|
|
217
|
-
async def
|
|
221
|
+
async def aio_start(
|
|
218
222
|
self,
|
|
219
223
|
options: WorkerStartOptions = WorkerStartOptions(),
|
|
220
224
|
_from_start: bool = False,
|
|
221
|
-
) ->
|
|
225
|
+
) -> None:
|
|
222
226
|
main_pid = os.getpid()
|
|
223
227
|
logger.info("------------------------------------------")
|
|
224
228
|
logger.info("STARTING HATCHET...")
|
|
@@ -236,7 +240,7 @@ class Worker:
|
|
|
236
240
|
if not _from_start:
|
|
237
241
|
self.setup_loop(options.loop)
|
|
238
242
|
|
|
239
|
-
if self.config.
|
|
243
|
+
if self.config.healthcheck.enabled:
|
|
240
244
|
await self.start_health_server()
|
|
241
245
|
|
|
242
246
|
self.action_listener_process = self._start_listener()
|
|
@@ -247,7 +251,7 @@ class Worker:
|
|
|
247
251
|
self._check_listener_health()
|
|
248
252
|
)
|
|
249
253
|
|
|
250
|
-
|
|
254
|
+
await self.action_listener_health_check
|
|
251
255
|
|
|
252
256
|
def _run_action_runner(self) -> WorkerActionRunLoopManager:
|
|
253
257
|
# Retrieve the shared queue
|
|
@@ -362,7 +366,8 @@ class Worker:
|
|
|
362
366
|
|
|
363
367
|
logger.debug(f"forcefully stopping worker: {self.name}")
|
|
364
368
|
|
|
365
|
-
self.close
|
|
369
|
+
## TODO: `self.close` needs to be awaited / used
|
|
370
|
+
self.close() # type: ignore[unused-coroutine]
|
|
366
371
|
|
|
367
372
|
if self.action_listener_process:
|
|
368
373
|
self.action_listener_process.kill() # Forcefully kill the process
|
|
@@ -371,22 +376,3 @@ class Worker:
|
|
|
371
376
|
sys.exit(
|
|
372
377
|
1
|
|
373
378
|
) # Exit immediately TODO - should we exit with 1 here, there may be other workers to cleanup
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
def register_on_worker(callable: HatchetCallable[T], worker: Worker) -> None:
|
|
377
|
-
worker.register_function(callable.get_action_name(), callable)
|
|
378
|
-
|
|
379
|
-
if callable.function_on_failure is not None:
|
|
380
|
-
worker.register_function(
|
|
381
|
-
callable.function_on_failure.get_action_name(), callable.function_on_failure
|
|
382
|
-
)
|
|
383
|
-
|
|
384
|
-
if callable.function_concurrency is not None:
|
|
385
|
-
worker.register_function(
|
|
386
|
-
callable.function_concurrency.get_action_name(),
|
|
387
|
-
callable.function_concurrency,
|
|
388
|
-
)
|
|
389
|
-
|
|
390
|
-
opts = callable.to_workflow_opts()
|
|
391
|
-
|
|
392
|
-
worker.register_workflow_from_opts(opts.name, opts)
|