hatchet-sdk 0.46.1__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 +77 -64
- hatchet_sdk/config.py +117 -0
- hatchet_sdk/connection.py +27 -13
- hatchet_sdk/context/__init__.py +0 -1
- hatchet_sdk/context/context.py +143 -202
- 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 +112 -35
- 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/{loader.py ā v0/loader.py} +11 -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 +37 -59
- 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 +14 -25
- {hatchet_sdk-0.46.1.dist-info ā hatchet_sdk-1.0.0.dist-info}/METADATA +3 -2
- hatchet_sdk-1.0.0.dist-info/RECORD +485 -0
- {hatchet_sdk-0.46.1.dist-info ā hatchet_sdk-1.0.0.dist-info}/entry_points.txt +1 -0
- hatchet_sdk/utils/serialization.py +0 -18
- hatchet_sdk-0.46.1.dist-info/RECORD +0 -237
- /hatchet_sdk/{utils ā v0/utils}/types.py +0 -0
- {hatchet_sdk-0.46.1.dist-info ā hatchet_sdk-1.0.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import asyncio
|
|
2
|
+
import logging
|
|
3
|
+
from typing import Any, Callable, Optional, ParamSpec, Type, TypeVar, Union
|
|
4
|
+
|
|
5
|
+
from pydantic import BaseModel
|
|
6
|
+
from typing_extensions import deprecated
|
|
7
|
+
|
|
8
|
+
from hatchet_sdk.v0.clients.rest_client import RestApi
|
|
9
|
+
from hatchet_sdk.v0.context.context import Context
|
|
10
|
+
from hatchet_sdk.v0.contracts.workflows_pb2 import (
|
|
11
|
+
ConcurrencyLimitStrategy,
|
|
12
|
+
CreateStepRateLimit,
|
|
13
|
+
DesiredWorkerLabels,
|
|
14
|
+
StickyStrategy,
|
|
15
|
+
)
|
|
16
|
+
from hatchet_sdk.v0.features.cron import CronClient
|
|
17
|
+
from hatchet_sdk.v0.features.scheduled import ScheduledClient
|
|
18
|
+
from hatchet_sdk.v0.labels import DesiredWorkerLabel
|
|
19
|
+
from hatchet_sdk.v0.loader import ClientConfig, ConfigLoader
|
|
20
|
+
from hatchet_sdk.v0.rate_limit import RateLimit
|
|
21
|
+
from hatchet_sdk.v0.v2.callable import HatchetCallable
|
|
22
|
+
|
|
23
|
+
from .client import Client, new_client, new_client_raw
|
|
24
|
+
from .clients.admin import AdminClient
|
|
25
|
+
from .clients.dispatcher.dispatcher import DispatcherClient
|
|
26
|
+
from .clients.events import EventClient
|
|
27
|
+
from .clients.run_event_listener import RunEventListenerClient
|
|
28
|
+
from .logger import logger
|
|
29
|
+
from .worker.worker import Worker
|
|
30
|
+
from .workflow import (
|
|
31
|
+
ConcurrencyExpression,
|
|
32
|
+
WorkflowInterface,
|
|
33
|
+
WorkflowMeta,
|
|
34
|
+
WorkflowStepProtocol,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
T = TypeVar("T", bound=BaseModel)
|
|
38
|
+
R = TypeVar("R")
|
|
39
|
+
P = ParamSpec("P")
|
|
40
|
+
|
|
41
|
+
TWorkflow = TypeVar("TWorkflow", bound=object)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def workflow(
|
|
45
|
+
name: str = "",
|
|
46
|
+
on_events: list[str] | None = None,
|
|
47
|
+
on_crons: list[str] | None = None,
|
|
48
|
+
version: str = "",
|
|
49
|
+
timeout: str = "60m",
|
|
50
|
+
schedule_timeout: str = "5m",
|
|
51
|
+
sticky: Union[StickyStrategy.Value, None] = None, # type: ignore[name-defined]
|
|
52
|
+
default_priority: int | None = None,
|
|
53
|
+
concurrency: ConcurrencyExpression | None = None,
|
|
54
|
+
input_validator: Type[T] | None = None,
|
|
55
|
+
) -> Callable[[Type[TWorkflow]], WorkflowMeta]:
|
|
56
|
+
on_events = on_events or []
|
|
57
|
+
on_crons = on_crons or []
|
|
58
|
+
|
|
59
|
+
def inner(cls: Type[TWorkflow]) -> WorkflowMeta:
|
|
60
|
+
nonlocal name
|
|
61
|
+
name = name or str(cls.__name__)
|
|
62
|
+
|
|
63
|
+
setattr(cls, "on_events", on_events)
|
|
64
|
+
setattr(cls, "on_crons", on_crons)
|
|
65
|
+
setattr(cls, "name", name)
|
|
66
|
+
setattr(cls, "version", version)
|
|
67
|
+
setattr(cls, "timeout", timeout)
|
|
68
|
+
setattr(cls, "schedule_timeout", schedule_timeout)
|
|
69
|
+
setattr(cls, "sticky", sticky)
|
|
70
|
+
setattr(cls, "default_priority", default_priority)
|
|
71
|
+
setattr(cls, "concurrency_expression", concurrency)
|
|
72
|
+
|
|
73
|
+
# Define a new class with the same name and bases as the original, but
|
|
74
|
+
# with WorkflowMeta as its metaclass
|
|
75
|
+
|
|
76
|
+
## TODO: Figure out how to type this metaclass correctly
|
|
77
|
+
setattr(cls, "input_validator", input_validator)
|
|
78
|
+
|
|
79
|
+
return WorkflowMeta(name, cls.__bases__, dict(cls.__dict__))
|
|
80
|
+
|
|
81
|
+
return inner
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def step(
|
|
85
|
+
name: str = "",
|
|
86
|
+
timeout: str = "",
|
|
87
|
+
parents: list[str] | None = None,
|
|
88
|
+
retries: int = 0,
|
|
89
|
+
rate_limits: list[RateLimit] | None = None,
|
|
90
|
+
desired_worker_labels: dict[str, DesiredWorkerLabel] = {},
|
|
91
|
+
backoff_factor: float | None = None,
|
|
92
|
+
backoff_max_seconds: int | None = None,
|
|
93
|
+
) -> Callable[[Callable[P, R]], Callable[P, R]]:
|
|
94
|
+
parents = parents or []
|
|
95
|
+
|
|
96
|
+
def inner(func: Callable[P, R]) -> Callable[P, R]:
|
|
97
|
+
limits = None
|
|
98
|
+
if rate_limits:
|
|
99
|
+
limits = [rate_limit._req for rate_limit in rate_limits or []]
|
|
100
|
+
|
|
101
|
+
setattr(func, "_step_name", name.lower() or str(func.__name__).lower())
|
|
102
|
+
setattr(func, "_step_parents", parents)
|
|
103
|
+
setattr(func, "_step_timeout", timeout)
|
|
104
|
+
setattr(func, "_step_retries", retries)
|
|
105
|
+
setattr(func, "_step_rate_limits", limits)
|
|
106
|
+
setattr(func, "_step_backoff_factor", backoff_factor)
|
|
107
|
+
setattr(func, "_step_backoff_max_seconds", backoff_max_seconds)
|
|
108
|
+
|
|
109
|
+
def create_label(d: DesiredWorkerLabel) -> DesiredWorkerLabels:
|
|
110
|
+
value = d["value"] if "value" in d else None
|
|
111
|
+
return DesiredWorkerLabels(
|
|
112
|
+
strValue=str(value) if not isinstance(value, int) else None,
|
|
113
|
+
intValue=value if isinstance(value, int) else None,
|
|
114
|
+
required=d["required"] if "required" in d else None, # type: ignore[arg-type]
|
|
115
|
+
weight=d["weight"] if "weight" in d else None,
|
|
116
|
+
comparator=d["comparator"] if "comparator" in d else None, # type: ignore[arg-type]
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
setattr(
|
|
120
|
+
func,
|
|
121
|
+
"_step_desired_worker_labels",
|
|
122
|
+
{key: create_label(d) for key, d in desired_worker_labels.items()},
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
return func
|
|
126
|
+
|
|
127
|
+
return inner
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
def on_failure_step(
|
|
131
|
+
name: str = "",
|
|
132
|
+
timeout: str = "",
|
|
133
|
+
retries: int = 0,
|
|
134
|
+
rate_limits: list[RateLimit] | None = None,
|
|
135
|
+
backoff_factor: float | None = None,
|
|
136
|
+
backoff_max_seconds: int | None = None,
|
|
137
|
+
) -> Callable[..., Any]:
|
|
138
|
+
def inner(func: Callable[[Context], Any]) -> Callable[[Context], Any]:
|
|
139
|
+
limits = None
|
|
140
|
+
if rate_limits:
|
|
141
|
+
limits = [
|
|
142
|
+
CreateStepRateLimit(key=rate_limit.static_key, units=rate_limit.units) # type: ignore[arg-type]
|
|
143
|
+
for rate_limit in rate_limits or []
|
|
144
|
+
]
|
|
145
|
+
|
|
146
|
+
setattr(
|
|
147
|
+
func, "_on_failure_step_name", name.lower() or str(func.__name__).lower()
|
|
148
|
+
)
|
|
149
|
+
setattr(func, "_on_failure_step_timeout", timeout)
|
|
150
|
+
setattr(func, "_on_failure_step_retries", retries)
|
|
151
|
+
setattr(func, "_on_failure_step_rate_limits", limits)
|
|
152
|
+
setattr(func, "_on_failure_step_backoff_factor", backoff_factor)
|
|
153
|
+
setattr(func, "_on_failure_step_backoff_max_seconds", backoff_max_seconds)
|
|
154
|
+
|
|
155
|
+
return func
|
|
156
|
+
|
|
157
|
+
return inner
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def concurrency(
|
|
161
|
+
name: str = "",
|
|
162
|
+
max_runs: int = 1,
|
|
163
|
+
limit_strategy: ConcurrencyLimitStrategy = ConcurrencyLimitStrategy.CANCEL_IN_PROGRESS,
|
|
164
|
+
) -> Callable[..., Any]:
|
|
165
|
+
def inner(func: Callable[[Context], Any]) -> Callable[[Context], Any]:
|
|
166
|
+
setattr(
|
|
167
|
+
func,
|
|
168
|
+
"_concurrency_fn_name",
|
|
169
|
+
name.lower() or str(func.__name__).lower(),
|
|
170
|
+
)
|
|
171
|
+
setattr(func, "_concurrency_max_runs", max_runs)
|
|
172
|
+
setattr(func, "_concurrency_limit_strategy", limit_strategy)
|
|
173
|
+
|
|
174
|
+
return func
|
|
175
|
+
|
|
176
|
+
return inner
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
class HatchetRest:
|
|
180
|
+
"""
|
|
181
|
+
Main client for interacting with the Hatchet API.
|
|
182
|
+
|
|
183
|
+
This class provides access to various client interfaces and utility methods
|
|
184
|
+
for working with Hatchet via the REST API,
|
|
185
|
+
|
|
186
|
+
Attributes:
|
|
187
|
+
rest (RestApi): Interface for REST API operations.
|
|
188
|
+
"""
|
|
189
|
+
|
|
190
|
+
rest: RestApi
|
|
191
|
+
|
|
192
|
+
def __init__(self, config: ClientConfig = ClientConfig()):
|
|
193
|
+
_config: ClientConfig = ConfigLoader(".").load_client_config(config)
|
|
194
|
+
self.rest = RestApi(_config.server_url, _config.token, _config.tenant_id)
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
class Hatchet:
|
|
198
|
+
"""
|
|
199
|
+
Main client for interacting with the Hatchet SDK.
|
|
200
|
+
|
|
201
|
+
This class provides access to various client interfaces and utility methods
|
|
202
|
+
for working with Hatchet workers, workflows, and steps.
|
|
203
|
+
|
|
204
|
+
Attributes:
|
|
205
|
+
cron (CronClient): Interface for cron trigger operations.
|
|
206
|
+
|
|
207
|
+
admin (AdminClient): Interface for administrative operations.
|
|
208
|
+
dispatcher (DispatcherClient): Interface for dispatching operations.
|
|
209
|
+
event (EventClient): Interface for event-related operations.
|
|
210
|
+
rest (RestApi): Interface for REST API operations.
|
|
211
|
+
"""
|
|
212
|
+
|
|
213
|
+
_client: Client
|
|
214
|
+
cron: CronClient
|
|
215
|
+
scheduled: ScheduledClient
|
|
216
|
+
|
|
217
|
+
@classmethod
|
|
218
|
+
def from_environment(
|
|
219
|
+
cls, defaults: ClientConfig = ClientConfig(), **kwargs: Any
|
|
220
|
+
) -> "Hatchet":
|
|
221
|
+
return cls(client=new_client(defaults), **kwargs)
|
|
222
|
+
|
|
223
|
+
@classmethod
|
|
224
|
+
def from_config(cls, config: ClientConfig, **kwargs: Any) -> "Hatchet":
|
|
225
|
+
return cls(client=new_client_raw(config), **kwargs)
|
|
226
|
+
|
|
227
|
+
def __init__(
|
|
228
|
+
self,
|
|
229
|
+
debug: bool = False,
|
|
230
|
+
client: Optional[Client] = None,
|
|
231
|
+
config: ClientConfig = ClientConfig(),
|
|
232
|
+
):
|
|
233
|
+
"""
|
|
234
|
+
Initialize a new Hatchet instance.
|
|
235
|
+
|
|
236
|
+
Args:
|
|
237
|
+
debug (bool, optional): Enable debug logging. Defaults to False.
|
|
238
|
+
client (Optional[Client], optional): A pre-configured Client instance. Defaults to None.
|
|
239
|
+
config (ClientConfig, optional): Configuration for creating a new Client. Defaults to ClientConfig().
|
|
240
|
+
"""
|
|
241
|
+
if client is not None:
|
|
242
|
+
self._client = client
|
|
243
|
+
else:
|
|
244
|
+
self._client = new_client(config, debug)
|
|
245
|
+
|
|
246
|
+
if debug:
|
|
247
|
+
logger.setLevel(logging.DEBUG)
|
|
248
|
+
|
|
249
|
+
self.cron = CronClient(self._client)
|
|
250
|
+
self.scheduled = ScheduledClient(self._client)
|
|
251
|
+
|
|
252
|
+
@property
|
|
253
|
+
@deprecated(
|
|
254
|
+
"Direct access to client is deprecated and will be removed in a future version. Use specific client properties (Hatchet.admin, Hatchet.dispatcher, Hatchet.event, Hatchet.rest) instead. [0.32.0]",
|
|
255
|
+
)
|
|
256
|
+
def client(self) -> Client:
|
|
257
|
+
return self._client
|
|
258
|
+
|
|
259
|
+
@property
|
|
260
|
+
def admin(self) -> AdminClient:
|
|
261
|
+
return self._client.admin
|
|
262
|
+
|
|
263
|
+
@property
|
|
264
|
+
def dispatcher(self) -> DispatcherClient:
|
|
265
|
+
return self._client.dispatcher
|
|
266
|
+
|
|
267
|
+
@property
|
|
268
|
+
def event(self) -> EventClient:
|
|
269
|
+
return self._client.event
|
|
270
|
+
|
|
271
|
+
@property
|
|
272
|
+
def rest(self) -> RestApi:
|
|
273
|
+
return self._client.rest
|
|
274
|
+
|
|
275
|
+
@property
|
|
276
|
+
def listener(self) -> RunEventListenerClient:
|
|
277
|
+
return self._client.listener
|
|
278
|
+
|
|
279
|
+
@property
|
|
280
|
+
def config(self) -> ClientConfig:
|
|
281
|
+
return self._client.config
|
|
282
|
+
|
|
283
|
+
@property
|
|
284
|
+
def tenant_id(self) -> str:
|
|
285
|
+
return self._client.config.tenant_id
|
|
286
|
+
|
|
287
|
+
concurrency = staticmethod(concurrency)
|
|
288
|
+
|
|
289
|
+
workflow = staticmethod(workflow)
|
|
290
|
+
|
|
291
|
+
step = staticmethod(step)
|
|
292
|
+
|
|
293
|
+
on_failure_step = staticmethod(on_failure_step)
|
|
294
|
+
|
|
295
|
+
def worker(
|
|
296
|
+
self, name: str, max_runs: int | None = None, labels: dict[str, str | int] = {}
|
|
297
|
+
) -> Worker:
|
|
298
|
+
try:
|
|
299
|
+
loop = asyncio.get_running_loop()
|
|
300
|
+
except RuntimeError:
|
|
301
|
+
loop = None
|
|
302
|
+
|
|
303
|
+
return Worker(
|
|
304
|
+
name=name,
|
|
305
|
+
max_runs=max_runs,
|
|
306
|
+
labels=labels,
|
|
307
|
+
config=self._client.config,
|
|
308
|
+
debug=self._client.debug,
|
|
309
|
+
owned_loop=loop is None,
|
|
310
|
+
)
|
hatchet_sdk/v0/labels.py
ADDED
|
@@ -42,6 +42,7 @@ class ClientConfig:
|
|
|
42
42
|
worker_healthcheck_port: int | None = None,
|
|
43
43
|
worker_healthcheck_enabled: bool | None = None,
|
|
44
44
|
worker_preset_labels: dict[str, str] = {},
|
|
45
|
+
enable_force_kill_sync_threads: bool = False,
|
|
45
46
|
):
|
|
46
47
|
self.tenant_id = tenant_id
|
|
47
48
|
self.tls_config = tls_config
|
|
@@ -55,6 +56,7 @@ class ClientConfig:
|
|
|
55
56
|
self.worker_healthcheck_port = worker_healthcheck_port
|
|
56
57
|
self.worker_healthcheck_enabled = worker_healthcheck_enabled
|
|
57
58
|
self.worker_preset_labels = worker_preset_labels
|
|
59
|
+
self.enable_force_kill_sync_threads = enable_force_kill_sync_threads
|
|
58
60
|
|
|
59
61
|
if not self.logInterceptor:
|
|
60
62
|
self.logInterceptor = getLogger()
|
|
@@ -174,6 +176,14 @@ class ConfigLoader:
|
|
|
174
176
|
"The `otel_exporter_otlp_*` fields are no longer supported as of SDK version `0.46.0`. Please see the documentation on OpenTelemetry at https://docs.hatchet.run/home/features/opentelemetry for more information on how to migrate to the new `HatchetInstrumentor`."
|
|
175
177
|
)
|
|
176
178
|
|
|
179
|
+
enable_force_kill_sync_threads = bool(
|
|
180
|
+
get_config_value(
|
|
181
|
+
"enable_force_kill_sync_threads",
|
|
182
|
+
"HATCHET_CLIENT_ENABLE_FORCE_KILL_SYNC_THREADS",
|
|
183
|
+
)
|
|
184
|
+
== "True"
|
|
185
|
+
or False
|
|
186
|
+
)
|
|
177
187
|
return ClientConfig(
|
|
178
188
|
tenant_id=tenant_id,
|
|
179
189
|
tls_config=tls_config,
|
|
@@ -188,6 +198,7 @@ class ConfigLoader:
|
|
|
188
198
|
worker_healthcheck_port=worker_healthcheck_port,
|
|
189
199
|
worker_healthcheck_enabled=worker_healthcheck_enabled,
|
|
190
200
|
worker_preset_labels=worker_preset_labels,
|
|
201
|
+
enable_force_kill_sync_threads=enable_force_kill_sync_threads,
|
|
191
202
|
)
|
|
192
203
|
|
|
193
204
|
def _load_tls_config(self, tls_data: Dict, host_port) -> ClientTLSConfig:
|
hatchet_sdk/v0/logger.py
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
# Create a named logger
|
|
5
|
+
logger = logging.getLogger("hatchet")
|
|
6
|
+
logger.setLevel(logging.INFO)
|
|
7
|
+
|
|
8
|
+
handler = logging.StreamHandler(sys.stdout)
|
|
9
|
+
formatter = logging.Formatter("[%(levelname)s]\tšŖ -- %(asctime)s - %(message)s")
|
|
10
|
+
handler.setFormatter(formatter)
|
|
11
|
+
logger.addHandler(handler)
|
|
12
|
+
|
|
13
|
+
logger.propagate = False
|