hatchet-sdk 0.47.1__py3-none-any.whl → 1.0.0a1__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.
Potentially problematic release.
This version of hatchet-sdk might be problematic. Click here for more details.
- hatchet_sdk/__init__.py +45 -25
- hatchet_sdk/client.py +19 -94
- hatchet_sdk/clients/admin.py +309 -389
- hatchet_sdk/clients/dispatcher/action_listener.py +131 -109
- hatchet_sdk/clients/dispatcher/dispatcher.py +39 -37
- hatchet_sdk/clients/durable_event_listener.py +327 -0
- hatchet_sdk/clients/event_ts.py +23 -10
- hatchet_sdk/clients/events.py +96 -99
- hatchet_sdk/clients/rest/__init__.py +35 -0
- hatchet_sdk/clients/rest/api/__init__.py +2 -0
- hatchet_sdk/clients/rest/api/log_api.py +258 -0
- hatchet_sdk/clients/rest/api/task_api.py +2200 -0
- hatchet_sdk/clients/rest/api/workflow_runs_api.py +1274 -116
- 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 +33 -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_log_line.py +94 -0
- hatchet_sdk/clients/rest/models/v1_log_line_level.py +39 -0
- hatchet_sdk/clients/rest/models/v1_log_line_list.py +110 -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 +228 -0
- hatchet_sdk/clients/rest/models/v1_task_summary_list.py +110 -0
- hatchet_sdk/clients/rest/models/v1_trigger_workflow_run_request.py +95 -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_run_display_name.py +98 -0
- hatchet_sdk/clients/rest/models/v1_workflow_run_display_name_list.py +114 -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 +104 -0
- hatchet_sdk/clients/rest/rest.py +37 -26
- hatchet_sdk/clients/rest/tenacity_utils.py +1 -1
- hatchet_sdk/clients/rest_client.py +153 -116
- hatchet_sdk/clients/run_event_listener.py +65 -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 -280
- hatchet_sdk/contracts/dispatcher_pb2_grpc.py +1 -1
- hatchet_sdk/contracts/events_pb2.py +2 -2
- hatchet_sdk/contracts/events_pb2_grpc.py +1 -1
- hatchet_sdk/contracts/v1/dispatcher_pb2.py +36 -0
- hatchet_sdk/contracts/v1/dispatcher_pb2.pyi +38 -0
- hatchet_sdk/contracts/v1/dispatcher_pb2_grpc.py +145 -0
- hatchet_sdk/contracts/v1/shared/condition_pb2.py +39 -0
- hatchet_sdk/contracts/v1/shared/condition_pb2.pyi +72 -0
- hatchet_sdk/contracts/v1/shared/condition_pb2_grpc.py +29 -0
- hatchet_sdk/contracts/v1/workflows_pb2.py +67 -0
- hatchet_sdk/contracts/v1/workflows_pb2.pyi +228 -0
- hatchet_sdk/contracts/v1/workflows_pb2_grpc.py +234 -0
- hatchet_sdk/contracts/workflows_pb2_grpc.py +1 -1
- hatchet_sdk/features/cron.py +43 -57
- hatchet_sdk/features/scheduled.py +60 -74
- hatchet_sdk/hatchet.py +491 -218
- hatchet_sdk/labels.py +4 -6
- hatchet_sdk/metadata.py +1 -1
- hatchet_sdk/opentelemetry/instrumentor.py +17 -18
- hatchet_sdk/rate_limit.py +40 -55
- hatchet_sdk/runnables/contextvars.py +12 -0
- hatchet_sdk/runnables/standalone.py +194 -0
- hatchet_sdk/runnables/task.py +144 -0
- hatchet_sdk/runnables/types.py +138 -0
- hatchet_sdk/runnables/workflow.py +764 -0
- hatchet_sdk/token.py +13 -9
- hatchet_sdk/utils/aio_utils.py +0 -119
- hatchet_sdk/utils/proto_enums.py +47 -0
- hatchet_sdk/utils/timedelta_to_expression.py +23 -0
- hatchet_sdk/utils/typing.py +10 -2
- 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 +622 -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/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 +294 -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/worker.py +391 -0
- hatchet_sdk/{workflow.py → v0/workflow.py} +4 -4
- hatchet_sdk/v0/workflow_run.py +59 -0
- hatchet_sdk/waits.py +120 -0
- hatchet_sdk/worker/__init__.py +0 -1
- hatchet_sdk/worker/action_listener_process.py +80 -55
- hatchet_sdk/worker/runner/run_loop_manager.py +46 -34
- hatchet_sdk/worker/runner/runner.py +82 -87
- hatchet_sdk/worker/runner/utils/capture_logs.py +26 -23
- hatchet_sdk/worker/worker.py +172 -149
- hatchet_sdk/workflow_run.py +7 -21
- {hatchet_sdk-0.47.1.dist-info → hatchet_sdk-1.0.0a1.dist-info}/METADATA +2 -2
- hatchet_sdk-1.0.0a1.dist-info/RECORD +505 -0
- {hatchet_sdk-0.47.1.dist-info → hatchet_sdk-1.0.0a1.dist-info}/entry_points.txt +2 -0
- hatchet_sdk/utils/serialization.py +0 -18
- hatchet_sdk-0.47.1.dist-info/RECORD +0 -237
- /hatchet_sdk/{loader.py → v0/loader.py} +0 -0
- /hatchet_sdk/{semver.py → v0/semver.py} +0 -0
- /hatchet_sdk/{utils → v0/utils}/types.py +0 -0
- /hatchet_sdk/{worker → v0/worker}/runner/utils/error_with_traceback.py +0 -0
- {hatchet_sdk-0.47.1.dist-info → hatchet_sdk-1.0.0a1.dist-info}/WHEEL +0 -0
|
@@ -2,27 +2,32 @@ import asyncio
|
|
|
2
2
|
import logging
|
|
3
3
|
import signal
|
|
4
4
|
import time
|
|
5
|
-
from dataclasses import dataclass
|
|
5
|
+
from dataclasses import dataclass
|
|
6
6
|
from multiprocessing import Queue
|
|
7
|
-
from typing import Any,
|
|
7
|
+
from typing import Any, Literal
|
|
8
8
|
|
|
9
9
|
import grpc
|
|
10
10
|
|
|
11
|
-
from hatchet_sdk.client import Client
|
|
12
|
-
from hatchet_sdk.clients.dispatcher.action_listener import
|
|
13
|
-
|
|
11
|
+
from hatchet_sdk.client import Client
|
|
12
|
+
from hatchet_sdk.clients.dispatcher.action_listener import (
|
|
13
|
+
Action,
|
|
14
14
|
ActionListener,
|
|
15
|
+
ActionType,
|
|
15
16
|
GetActionListenerRequest,
|
|
16
|
-
new_dispatcher,
|
|
17
17
|
)
|
|
18
|
+
from hatchet_sdk.clients.dispatcher.dispatcher import DispatcherClient
|
|
18
19
|
from hatchet_sdk.clients.rest.models.update_worker_request import UpdateWorkerRequest
|
|
20
|
+
from hatchet_sdk.config import ClientConfig
|
|
19
21
|
from hatchet_sdk.contracts.dispatcher_pb2 import (
|
|
20
22
|
GROUP_KEY_EVENT_TYPE_STARTED,
|
|
21
23
|
STEP_EVENT_TYPE_STARTED,
|
|
22
|
-
ActionType,
|
|
23
24
|
)
|
|
24
|
-
from hatchet_sdk.loader import ClientConfig
|
|
25
25
|
from hatchet_sdk.logger import logger
|
|
26
|
+
from hatchet_sdk.runnables.contextvars import (
|
|
27
|
+
ctx_step_run_id,
|
|
28
|
+
ctx_worker_id,
|
|
29
|
+
ctx_workflow_run_id,
|
|
30
|
+
)
|
|
26
31
|
from hatchet_sdk.utils.backoff import exp_backoff_sleep
|
|
27
32
|
|
|
28
33
|
ACTION_EVENT_RETRY_COUNT = 5
|
|
@@ -32,10 +37,11 @@ ACTION_EVENT_RETRY_COUNT = 5
|
|
|
32
37
|
class ActionEvent:
|
|
33
38
|
action: Action
|
|
34
39
|
type: Any # TODO type
|
|
35
|
-
payload:
|
|
40
|
+
payload: str
|
|
36
41
|
|
|
37
42
|
|
|
38
|
-
|
|
43
|
+
STOP_LOOP_TYPE = Literal["STOP_LOOP"]
|
|
44
|
+
STOP_LOOP: STOP_LOOP_TYPE = "STOP_LOOP" # Sentinel object to stop the loop
|
|
39
45
|
|
|
40
46
|
# TODO link to a block post
|
|
41
47
|
BLOCKED_THREAD_WARNING = (
|
|
@@ -43,32 +49,39 @@ BLOCKED_THREAD_WARNING = (
|
|
|
43
49
|
)
|
|
44
50
|
|
|
45
51
|
|
|
46
|
-
@dataclass
|
|
47
52
|
class WorkerActionListenerProcess:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
53
|
+
def __init__(
|
|
54
|
+
self,
|
|
55
|
+
name: str,
|
|
56
|
+
actions: list[str],
|
|
57
|
+
slots: int,
|
|
58
|
+
config: ClientConfig,
|
|
59
|
+
action_queue: "Queue[Action]",
|
|
60
|
+
event_queue: "Queue[ActionEvent | STOP_LOOP_TYPE]",
|
|
61
|
+
handle_kill: bool = True,
|
|
62
|
+
debug: bool = False,
|
|
63
|
+
labels: dict[str, str | int] = {},
|
|
64
|
+
) -> None:
|
|
65
|
+
self.name = name
|
|
66
|
+
self.actions = actions
|
|
67
|
+
self.slots = slots
|
|
68
|
+
self.config = config
|
|
69
|
+
self.action_queue = action_queue
|
|
70
|
+
self.event_queue = event_queue
|
|
71
|
+
self.debug = debug
|
|
72
|
+
self.labels = labels
|
|
73
|
+
self.handle_kill = handle_kill
|
|
74
|
+
|
|
75
|
+
self.listener: ActionListener | None = None
|
|
76
|
+
self.killing = False
|
|
77
|
+
self.action_loop_task: asyncio.Task[None] | None = None
|
|
78
|
+
self.event_send_loop_task: asyncio.Task[None] | None = None
|
|
79
|
+
self.running_step_runs: dict[str, float] = {}
|
|
61
80
|
|
|
62
|
-
action_loop_task: asyncio.Task = field(init=False, default=None)
|
|
63
|
-
event_send_loop_task: asyncio.Task = field(init=False, default=None)
|
|
64
|
-
|
|
65
|
-
running_step_runs: Mapping[str, float] = field(init=False, default_factory=dict)
|
|
66
|
-
|
|
67
|
-
def __post_init__(self):
|
|
68
81
|
if self.debug:
|
|
69
82
|
logger.setLevel(logging.DEBUG)
|
|
70
83
|
|
|
71
|
-
self.client =
|
|
84
|
+
self.client = Client(config=self.config, debug=self.debug)
|
|
72
85
|
|
|
73
86
|
loop = asyncio.get_event_loop()
|
|
74
87
|
loop.add_signal_handler(
|
|
@@ -81,7 +94,16 @@ class WorkerActionListenerProcess:
|
|
|
81
94
|
signal.SIGQUIT, lambda: asyncio.create_task(self.exit_gracefully())
|
|
82
95
|
)
|
|
83
96
|
|
|
84
|
-
async def
|
|
97
|
+
async def pause_task_assignment(self) -> None:
|
|
98
|
+
if self.listener is None:
|
|
99
|
+
raise ValueError("listener not started")
|
|
100
|
+
|
|
101
|
+
await self.client.rest.worker_api.worker_update(
|
|
102
|
+
worker=self.listener.worker_id,
|
|
103
|
+
update_worker_request=UpdateWorkerRequest(isPaused=True),
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
async def start(self, retry_attempt: int = 0) -> None:
|
|
85
107
|
if retry_attempt > 5:
|
|
86
108
|
logger.error("could not start action listener")
|
|
87
109
|
return
|
|
@@ -89,15 +111,15 @@ class WorkerActionListenerProcess:
|
|
|
89
111
|
logger.debug(f"starting action listener: {self.name}")
|
|
90
112
|
|
|
91
113
|
try:
|
|
92
|
-
self.dispatcher_client =
|
|
114
|
+
self.dispatcher_client = DispatcherClient(self.config)
|
|
93
115
|
|
|
94
116
|
self.listener = await self.dispatcher_client.get_action_listener(
|
|
95
117
|
GetActionListenerRequest(
|
|
96
118
|
worker_name=self.name,
|
|
97
119
|
services=["default"],
|
|
98
120
|
actions=self.actions,
|
|
99
|
-
|
|
100
|
-
|
|
121
|
+
slots=self.slots,
|
|
122
|
+
raw_labels=self.labels,
|
|
101
123
|
)
|
|
102
124
|
)
|
|
103
125
|
|
|
@@ -112,13 +134,13 @@ class WorkerActionListenerProcess:
|
|
|
112
134
|
self.blocked_main_loop = asyncio.create_task(self.start_blocked_main_loop())
|
|
113
135
|
|
|
114
136
|
# TODO move event methods to separate class
|
|
115
|
-
async def _get_event(self):
|
|
137
|
+
async def _get_event(self) -> ActionEvent | STOP_LOOP_TYPE:
|
|
116
138
|
loop = asyncio.get_running_loop()
|
|
117
139
|
return await loop.run_in_executor(None, self.event_queue.get)
|
|
118
140
|
|
|
119
|
-
async def start_event_send_loop(self):
|
|
141
|
+
async def start_event_send_loop(self) -> None:
|
|
120
142
|
while True:
|
|
121
|
-
event
|
|
143
|
+
event = await self._get_event()
|
|
122
144
|
if event == STOP_LOOP:
|
|
123
145
|
logger.debug("stopping event send loop...")
|
|
124
146
|
break
|
|
@@ -126,11 +148,11 @@ class WorkerActionListenerProcess:
|
|
|
126
148
|
logger.debug(f"tx: event: {event.action.action_id}/{event.type}")
|
|
127
149
|
asyncio.create_task(self.send_event(event))
|
|
128
150
|
|
|
129
|
-
async def start_blocked_main_loop(self):
|
|
151
|
+
async def start_blocked_main_loop(self) -> None:
|
|
130
152
|
threshold = 1
|
|
131
153
|
while not self.killing:
|
|
132
154
|
count = 0
|
|
133
|
-
for
|
|
155
|
+
for _, start_time in self.running_step_runs.items():
|
|
134
156
|
diff = self.now() - start_time
|
|
135
157
|
if diff > threshold:
|
|
136
158
|
count += 1
|
|
@@ -139,7 +161,7 @@ class WorkerActionListenerProcess:
|
|
|
139
161
|
logger.warning(f"{BLOCKED_THREAD_WARNING}: Waiting Steps {count}")
|
|
140
162
|
await asyncio.sleep(1)
|
|
141
163
|
|
|
142
|
-
async def send_event(self, event: ActionEvent, retry_attempt: int = 1):
|
|
164
|
+
async def send_event(self, event: ActionEvent, retry_attempt: int = 1) -> None:
|
|
143
165
|
try:
|
|
144
166
|
match event.action.action_type:
|
|
145
167
|
# FIXME: all events sent from an execution of a function are of type ActionType.START_STEP_RUN since
|
|
@@ -189,15 +211,22 @@ class WorkerActionListenerProcess:
|
|
|
189
211
|
await exp_backoff_sleep(retry_attempt, 1)
|
|
190
212
|
await self.send_event(event, retry_attempt + 1)
|
|
191
213
|
|
|
192
|
-
def now(self):
|
|
214
|
+
def now(self) -> float:
|
|
193
215
|
return time.time()
|
|
194
216
|
|
|
195
|
-
async def start_action_loop(self):
|
|
217
|
+
async def start_action_loop(self) -> None:
|
|
218
|
+
if self.listener is None:
|
|
219
|
+
raise ValueError("listener not started")
|
|
220
|
+
|
|
196
221
|
try:
|
|
197
222
|
async for action in self.listener:
|
|
198
223
|
if action is None:
|
|
199
224
|
break
|
|
200
225
|
|
|
226
|
+
ctx_step_run_id.set(action.step_run_id)
|
|
227
|
+
ctx_workflow_run_id.set(action.workflow_run_id)
|
|
228
|
+
ctx_worker_id.set(action.worker_id)
|
|
229
|
+
|
|
201
230
|
# Process the action here
|
|
202
231
|
match action.action_type:
|
|
203
232
|
case ActionType.START_STEP_RUN:
|
|
@@ -205,6 +234,7 @@ class WorkerActionListenerProcess:
|
|
|
205
234
|
ActionEvent(
|
|
206
235
|
action=action,
|
|
207
236
|
type=STEP_EVENT_TYPE_STARTED, # TODO ack type
|
|
237
|
+
payload="",
|
|
208
238
|
)
|
|
209
239
|
)
|
|
210
240
|
logger.info(
|
|
@@ -224,6 +254,7 @@ class WorkerActionListenerProcess:
|
|
|
224
254
|
ActionEvent(
|
|
225
255
|
action=action,
|
|
226
256
|
type=GROUP_KEY_EVENT_TYPE_STARTED, # TODO ack type
|
|
257
|
+
payload="",
|
|
227
258
|
)
|
|
228
259
|
)
|
|
229
260
|
logger.info(
|
|
@@ -243,9 +274,9 @@ class WorkerActionListenerProcess:
|
|
|
243
274
|
finally:
|
|
244
275
|
logger.info("action loop closed")
|
|
245
276
|
if not self.killing:
|
|
246
|
-
await self.exit_gracefully(
|
|
277
|
+
await self.exit_gracefully()
|
|
247
278
|
|
|
248
|
-
async def cleanup(self):
|
|
279
|
+
async def cleanup(self) -> None:
|
|
249
280
|
self.killing = True
|
|
250
281
|
|
|
251
282
|
if self.listener is not None:
|
|
@@ -253,13 +284,7 @@ class WorkerActionListenerProcess:
|
|
|
253
284
|
|
|
254
285
|
self.event_queue.put(STOP_LOOP)
|
|
255
286
|
|
|
256
|
-
async def
|
|
257
|
-
await self.client.rest.aio.worker_api.worker_update(
|
|
258
|
-
worker=self.listener.worker_id,
|
|
259
|
-
update_worker_request=UpdateWorkerRequest(isPaused=True),
|
|
260
|
-
)
|
|
261
|
-
|
|
262
|
-
async def exit_gracefully(self, skip_unregister=False):
|
|
287
|
+
async def exit_gracefully(self) -> None:
|
|
263
288
|
await self.pause_task_assignment()
|
|
264
289
|
|
|
265
290
|
if self.killing:
|
|
@@ -274,13 +299,13 @@ class WorkerActionListenerProcess:
|
|
|
274
299
|
|
|
275
300
|
logger.info("action listener closed")
|
|
276
301
|
|
|
277
|
-
def exit_forcefully(self):
|
|
302
|
+
def exit_forcefully(self) -> None:
|
|
278
303
|
asyncio.run(self.cleanup())
|
|
279
304
|
logger.debug("forcefully closing listener...")
|
|
280
305
|
|
|
281
306
|
|
|
282
|
-
def worker_action_listener_process(*args, **kwargs):
|
|
283
|
-
async def run():
|
|
307
|
+
def worker_action_listener_process(*args: Any, **kwargs: Any) -> None:
|
|
308
|
+
async def run() -> None:
|
|
284
309
|
process = WorkerActionListenerProcess(*args, **kwargs)
|
|
285
310
|
await process.start()
|
|
286
311
|
# Keep the process running
|
|
@@ -1,52 +1,64 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
import logging
|
|
3
|
-
from dataclasses import dataclass, field
|
|
4
3
|
from multiprocessing import Queue
|
|
5
|
-
from typing import
|
|
4
|
+
from typing import Any, Literal, TypeVar
|
|
6
5
|
|
|
7
|
-
from hatchet_sdk import
|
|
8
|
-
from hatchet_sdk.client import Client, new_client_raw
|
|
6
|
+
from hatchet_sdk.client import Client
|
|
9
7
|
from hatchet_sdk.clients.dispatcher.action_listener import Action
|
|
10
|
-
from hatchet_sdk.
|
|
8
|
+
from hatchet_sdk.config import ClientConfig
|
|
11
9
|
from hatchet_sdk.logger import logger
|
|
12
|
-
from hatchet_sdk.
|
|
10
|
+
from hatchet_sdk.runnables.task import Task
|
|
11
|
+
from hatchet_sdk.utils.typing import WorkflowValidator
|
|
12
|
+
from hatchet_sdk.worker.action_listener_process import ActionEvent
|
|
13
13
|
from hatchet_sdk.worker.runner.runner import Runner
|
|
14
14
|
from hatchet_sdk.worker.runner.utils.capture_logs import capture_logs
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
STOP_LOOP_TYPE = Literal["STOP_LOOP"]
|
|
17
|
+
STOP_LOOP: STOP_LOOP_TYPE = "STOP_LOOP"
|
|
17
18
|
|
|
18
19
|
T = TypeVar("T")
|
|
19
20
|
|
|
20
21
|
|
|
21
|
-
@dataclass
|
|
22
22
|
class WorkerActionRunLoopManager:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
23
|
+
def __init__(
|
|
24
|
+
self,
|
|
25
|
+
name: str,
|
|
26
|
+
action_registry: dict[str, Task[Any, Any]],
|
|
27
|
+
validator_registry: dict[str, WorkflowValidator],
|
|
28
|
+
slots: int | None,
|
|
29
|
+
config: ClientConfig,
|
|
30
|
+
action_queue: "Queue[Action | STOP_LOOP_TYPE]",
|
|
31
|
+
event_queue: "Queue[ActionEvent]",
|
|
32
|
+
loop: asyncio.AbstractEventLoop,
|
|
33
|
+
handle_kill: bool = True,
|
|
34
|
+
debug: bool = False,
|
|
35
|
+
labels: dict[str, str | int] = {},
|
|
36
|
+
) -> None:
|
|
37
|
+
self.name = name
|
|
38
|
+
self.action_registry = action_registry
|
|
39
|
+
self.validator_registry = validator_registry
|
|
40
|
+
self.slots = slots
|
|
41
|
+
self.config = config
|
|
42
|
+
self.action_queue = action_queue
|
|
43
|
+
self.event_queue = event_queue
|
|
44
|
+
self.loop = loop
|
|
45
|
+
self.handle_kill = handle_kill
|
|
46
|
+
self.debug = debug
|
|
47
|
+
self.labels = labels
|
|
48
|
+
|
|
41
49
|
if self.debug:
|
|
42
50
|
logger.setLevel(logging.DEBUG)
|
|
43
|
-
|
|
51
|
+
|
|
52
|
+
self.killing = False
|
|
53
|
+
self.runner: Runner | None = None
|
|
54
|
+
|
|
55
|
+
self.client = Client(config=self.config, debug=self.debug)
|
|
44
56
|
self.start()
|
|
45
57
|
|
|
46
|
-
def start(self, retry_count=1):
|
|
47
|
-
k = self.loop.create_task(self.
|
|
58
|
+
def start(self, retry_count: int = 1) -> None:
|
|
59
|
+
k = self.loop.create_task(self.aio_start(retry_count)) # noqa: F841
|
|
48
60
|
|
|
49
|
-
async def
|
|
61
|
+
async def aio_start(self, retry_count: int = 1) -> None:
|
|
50
62
|
await capture_logs(
|
|
51
63
|
self.client.logInterceptor,
|
|
52
64
|
self.client.event,
|
|
@@ -73,17 +85,17 @@ class WorkerActionRunLoopManager:
|
|
|
73
85
|
self.runner = Runner(
|
|
74
86
|
self.name,
|
|
75
87
|
self.event_queue,
|
|
76
|
-
self.
|
|
88
|
+
self.config,
|
|
89
|
+
self.slots,
|
|
77
90
|
self.handle_kill,
|
|
78
91
|
self.action_registry,
|
|
79
92
|
self.validator_registry,
|
|
80
|
-
self.config,
|
|
81
93
|
self.labels,
|
|
82
94
|
)
|
|
83
95
|
|
|
84
96
|
logger.debug(f"'{self.name}' waiting for {list(self.action_registry.keys())}")
|
|
85
97
|
while not self.killing:
|
|
86
|
-
action
|
|
98
|
+
action = await self._get_action()
|
|
87
99
|
if action == STOP_LOOP:
|
|
88
100
|
logger.debug("stopping action runner loop...")
|
|
89
101
|
break
|
|
@@ -91,7 +103,7 @@ class WorkerActionRunLoopManager:
|
|
|
91
103
|
self.runner.run(action)
|
|
92
104
|
logger.debug("action runner loop stopped")
|
|
93
105
|
|
|
94
|
-
async def _get_action(self):
|
|
106
|
+
async def _get_action(self) -> Action | STOP_LOOP_TYPE:
|
|
95
107
|
return await self.loop.run_in_executor(None, self.action_queue.get)
|
|
96
108
|
|
|
97
109
|
async def exit_gracefully(self) -> None:
|