hatchet-sdk 1.18.1__py3-none-any.whl → 1.19.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.
Potentially problematic release.
This version of hatchet-sdk might be problematic. Click here for more details.
- {hatchet_sdk-1.18.1.dist-info → hatchet_sdk-1.19.0.dist-info}/METADATA +2 -3
- {hatchet_sdk-1.18.1.dist-info → hatchet_sdk-1.19.0.dist-info}/RECORD +4 -225
- hatchet_sdk/v0/__init__.py +0 -251
- hatchet_sdk/v0/client.py +0 -119
- hatchet_sdk/v0/clients/admin.py +0 -541
- hatchet_sdk/v0/clients/dispatcher/action_listener.py +0 -422
- hatchet_sdk/v0/clients/dispatcher/dispatcher.py +0 -204
- hatchet_sdk/v0/clients/event_ts.py +0 -28
- hatchet_sdk/v0/clients/events.py +0 -182
- hatchet_sdk/v0/clients/rest/__init__.py +0 -307
- hatchet_sdk/v0/clients/rest/api/__init__.py +0 -19
- hatchet_sdk/v0/clients/rest/api/api_token_api.py +0 -858
- hatchet_sdk/v0/clients/rest/api/default_api.py +0 -2259
- hatchet_sdk/v0/clients/rest/api/event_api.py +0 -2548
- hatchet_sdk/v0/clients/rest/api/github_api.py +0 -331
- hatchet_sdk/v0/clients/rest/api/healthcheck_api.py +0 -483
- hatchet_sdk/v0/clients/rest/api/log_api.py +0 -449
- hatchet_sdk/v0/clients/rest/api/metadata_api.py +0 -728
- hatchet_sdk/v0/clients/rest/api/rate_limits_api.py +0 -423
- hatchet_sdk/v0/clients/rest/api/slack_api.py +0 -577
- hatchet_sdk/v0/clients/rest/api/sns_api.py +0 -872
- hatchet_sdk/v0/clients/rest/api/step_run_api.py +0 -2202
- hatchet_sdk/v0/clients/rest/api/tenant_api.py +0 -4430
- hatchet_sdk/v0/clients/rest/api/user_api.py +0 -2888
- hatchet_sdk/v0/clients/rest/api/worker_api.py +0 -858
- hatchet_sdk/v0/clients/rest/api/workflow_api.py +0 -6312
- hatchet_sdk/v0/clients/rest/api/workflow_run_api.py +0 -1932
- hatchet_sdk/v0/clients/rest/api/workflow_runs_api.py +0 -610
- hatchet_sdk/v0/clients/rest/api_client.py +0 -759
- hatchet_sdk/v0/clients/rest/api_response.py +0 -22
- hatchet_sdk/v0/clients/rest/configuration.py +0 -611
- hatchet_sdk/v0/clients/rest/exceptions.py +0 -200
- hatchet_sdk/v0/clients/rest/models/__init__.py +0 -274
- hatchet_sdk/v0/clients/rest/models/accept_invite_request.py +0 -83
- hatchet_sdk/v0/clients/rest/models/api_error.py +0 -102
- hatchet_sdk/v0/clients/rest/models/api_errors.py +0 -100
- hatchet_sdk/v0/clients/rest/models/api_meta.py +0 -144
- hatchet_sdk/v0/clients/rest/models/api_meta_auth.py +0 -85
- hatchet_sdk/v0/clients/rest/models/api_meta_integration.py +0 -88
- hatchet_sdk/v0/clients/rest/models/api_meta_posthog.py +0 -90
- hatchet_sdk/v0/clients/rest/models/api_resource_meta.py +0 -98
- hatchet_sdk/v0/clients/rest/models/api_token.py +0 -105
- hatchet_sdk/v0/clients/rest/models/bulk_create_event_request.py +0 -100
- hatchet_sdk/v0/clients/rest/models/bulk_create_event_response.py +0 -110
- hatchet_sdk/v0/clients/rest/models/cancel_event_request.py +0 -85
- hatchet_sdk/v0/clients/rest/models/cancel_step_run_request.py +0 -83
- hatchet_sdk/v0/clients/rest/models/concurrency_limit_strategy.py +0 -39
- hatchet_sdk/v0/clients/rest/models/create_api_token_request.py +0 -92
- hatchet_sdk/v0/clients/rest/models/create_api_token_response.py +0 -83
- hatchet_sdk/v0/clients/rest/models/create_cron_workflow_trigger_request.py +0 -98
- hatchet_sdk/v0/clients/rest/models/create_event_request.py +0 -95
- hatchet_sdk/v0/clients/rest/models/create_pull_request_from_step_run.py +0 -83
- hatchet_sdk/v0/clients/rest/models/create_sns_integration_request.py +0 -85
- hatchet_sdk/v0/clients/rest/models/create_tenant_alert_email_group_request.py +0 -83
- hatchet_sdk/v0/clients/rest/models/create_tenant_invite_request.py +0 -86
- hatchet_sdk/v0/clients/rest/models/create_tenant_request.py +0 -84
- hatchet_sdk/v0/clients/rest/models/cron_workflows.py +0 -131
- hatchet_sdk/v0/clients/rest/models/cron_workflows_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/cron_workflows_method.py +0 -37
- hatchet_sdk/v0/clients/rest/models/cron_workflows_order_by_field.py +0 -37
- hatchet_sdk/v0/clients/rest/models/event.py +0 -143
- hatchet_sdk/v0/clients/rest/models/event_data.py +0 -83
- hatchet_sdk/v0/clients/rest/models/event_key_list.py +0 -98
- hatchet_sdk/v0/clients/rest/models/event_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/event_order_by_direction.py +0 -37
- hatchet_sdk/v0/clients/rest/models/event_order_by_field.py +0 -36
- hatchet_sdk/v0/clients/rest/models/event_update_cancel200_response.py +0 -85
- hatchet_sdk/v0/clients/rest/models/event_workflow_run_summary.py +0 -116
- hatchet_sdk/v0/clients/rest/models/events.py +0 -110
- hatchet_sdk/v0/clients/rest/models/get_step_run_diff_response.py +0 -100
- hatchet_sdk/v0/clients/rest/models/github_app_installation.py +0 -107
- hatchet_sdk/v0/clients/rest/models/github_branch.py +0 -86
- hatchet_sdk/v0/clients/rest/models/github_repo.py +0 -86
- hatchet_sdk/v0/clients/rest/models/info_get_version200_response.py +0 -83
- hatchet_sdk/v0/clients/rest/models/job.py +0 -132
- hatchet_sdk/v0/clients/rest/models/job_run.py +0 -176
- hatchet_sdk/v0/clients/rest/models/job_run_status.py +0 -41
- hatchet_sdk/v0/clients/rest/models/link_github_repository_request.py +0 -106
- hatchet_sdk/v0/clients/rest/models/list_api_tokens_response.py +0 -110
- hatchet_sdk/v0/clients/rest/models/list_github_app_installations_response.py +0 -112
- hatchet_sdk/v0/clients/rest/models/list_pull_requests_response.py +0 -100
- hatchet_sdk/v0/clients/rest/models/list_slack_webhooks.py +0 -110
- hatchet_sdk/v0/clients/rest/models/list_sns_integrations.py +0 -110
- hatchet_sdk/v0/clients/rest/models/log_line.py +0 -94
- hatchet_sdk/v0/clients/rest/models/log_line_level.py +0 -39
- hatchet_sdk/v0/clients/rest/models/log_line_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/log_line_order_by_direction.py +0 -37
- hatchet_sdk/v0/clients/rest/models/log_line_order_by_field.py +0 -36
- hatchet_sdk/v0/clients/rest/models/pagination_response.py +0 -95
- hatchet_sdk/v0/clients/rest/models/pull_request.py +0 -112
- hatchet_sdk/v0/clients/rest/models/pull_request_state.py +0 -37
- hatchet_sdk/v0/clients/rest/models/queue_metrics.py +0 -97
- hatchet_sdk/v0/clients/rest/models/rate_limit.py +0 -117
- hatchet_sdk/v0/clients/rest/models/rate_limit_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/rate_limit_order_by_direction.py +0 -37
- hatchet_sdk/v0/clients/rest/models/rate_limit_order_by_field.py +0 -38
- hatchet_sdk/v0/clients/rest/models/recent_step_runs.py +0 -118
- hatchet_sdk/v0/clients/rest/models/reject_invite_request.py +0 -83
- hatchet_sdk/v0/clients/rest/models/replay_event_request.py +0 -85
- hatchet_sdk/v0/clients/rest/models/replay_workflow_runs_request.py +0 -85
- hatchet_sdk/v0/clients/rest/models/replay_workflow_runs_response.py +0 -100
- hatchet_sdk/v0/clients/rest/models/rerun_step_run_request.py +0 -83
- hatchet_sdk/v0/clients/rest/models/schedule_workflow_run_request.py +0 -92
- hatchet_sdk/v0/clients/rest/models/scheduled_run_status.py +0 -42
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows.py +0 -149
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows_method.py +0 -37
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows_order_by_field.py +0 -37
- hatchet_sdk/v0/clients/rest/models/semaphore_slots.py +0 -113
- hatchet_sdk/v0/clients/rest/models/slack_webhook.py +0 -127
- hatchet_sdk/v0/clients/rest/models/sns_integration.py +0 -114
- hatchet_sdk/v0/clients/rest/models/step.py +0 -123
- hatchet_sdk/v0/clients/rest/models/step_run.py +0 -202
- hatchet_sdk/v0/clients/rest/models/step_run_archive.py +0 -142
- hatchet_sdk/v0/clients/rest/models/step_run_archive_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/step_run_diff.py +0 -91
- hatchet_sdk/v0/clients/rest/models/step_run_event.py +0 -122
- hatchet_sdk/v0/clients/rest/models/step_run_event_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/step_run_event_reason.py +0 -52
- hatchet_sdk/v0/clients/rest/models/step_run_event_severity.py +0 -38
- hatchet_sdk/v0/clients/rest/models/step_run_status.py +0 -44
- hatchet_sdk/v0/clients/rest/models/tenant.py +0 -118
- hatchet_sdk/v0/clients/rest/models/tenant_alert_email_group.py +0 -98
- hatchet_sdk/v0/clients/rest/models/tenant_alert_email_group_list.py +0 -112
- hatchet_sdk/v0/clients/rest/models/tenant_alerting_settings.py +0 -143
- hatchet_sdk/v0/clients/rest/models/tenant_invite.py +0 -120
- hatchet_sdk/v0/clients/rest/models/tenant_invite_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/tenant_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/tenant_member.py +0 -123
- hatchet_sdk/v0/clients/rest/models/tenant_member_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/tenant_member_role.py +0 -38
- hatchet_sdk/v0/clients/rest/models/tenant_queue_metrics.py +0 -116
- hatchet_sdk/v0/clients/rest/models/tenant_resource.py +0 -40
- hatchet_sdk/v0/clients/rest/models/tenant_resource_limit.py +0 -135
- hatchet_sdk/v0/clients/rest/models/tenant_resource_policy.py +0 -102
- hatchet_sdk/v0/clients/rest/models/tenant_step_run_queue_metrics.py +0 -83
- hatchet_sdk/v0/clients/rest/models/trigger_workflow_run_request.py +0 -91
- hatchet_sdk/v0/clients/rest/models/update_tenant_alert_email_group_request.py +0 -83
- hatchet_sdk/v0/clients/rest/models/update_tenant_invite_request.py +0 -85
- hatchet_sdk/v0/clients/rest/models/update_tenant_request.py +0 -137
- hatchet_sdk/v0/clients/rest/models/update_worker_request.py +0 -87
- hatchet_sdk/v0/clients/rest/models/user.py +0 -126
- hatchet_sdk/v0/clients/rest/models/user_change_password_request.py +0 -88
- hatchet_sdk/v0/clients/rest/models/user_login_request.py +0 -86
- hatchet_sdk/v0/clients/rest/models/user_register_request.py +0 -91
- hatchet_sdk/v0/clients/rest/models/user_tenant_memberships_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/user_tenant_public.py +0 -86
- hatchet_sdk/v0/clients/rest/models/webhook_worker.py +0 -100
- hatchet_sdk/v0/clients/rest/models/webhook_worker_create_request.py +0 -94
- hatchet_sdk/v0/clients/rest/models/webhook_worker_create_response.py +0 -98
- hatchet_sdk/v0/clients/rest/models/webhook_worker_created.py +0 -102
- hatchet_sdk/v0/clients/rest/models/webhook_worker_list_response.py +0 -110
- hatchet_sdk/v0/clients/rest/models/webhook_worker_request.py +0 -102
- hatchet_sdk/v0/clients/rest/models/webhook_worker_request_list_response.py +0 -104
- hatchet_sdk/v0/clients/rest/models/webhook_worker_request_method.py +0 -38
- hatchet_sdk/v0/clients/rest/models/worker.py +0 -239
- hatchet_sdk/v0/clients/rest/models/worker_label.py +0 -102
- hatchet_sdk/v0/clients/rest/models/worker_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/worker_runtime_info.py +0 -103
- hatchet_sdk/v0/clients/rest/models/worker_runtime_sdks.py +0 -38
- hatchet_sdk/v0/clients/rest/models/worker_type.py +0 -38
- hatchet_sdk/v0/clients/rest/models/workflow.py +0 -165
- hatchet_sdk/v0/clients/rest/models/workflow_concurrency.py +0 -107
- hatchet_sdk/v0/clients/rest/models/workflow_deployment_config.py +0 -136
- hatchet_sdk/v0/clients/rest/models/workflow_kind.py +0 -38
- hatchet_sdk/v0/clients/rest/models/workflow_list.py +0 -120
- hatchet_sdk/v0/clients/rest/models/workflow_metrics.py +0 -97
- hatchet_sdk/v0/clients/rest/models/workflow_run.py +0 -188
- hatchet_sdk/v0/clients/rest/models/workflow_run_cancel200_response.py +0 -85
- hatchet_sdk/v0/clients/rest/models/workflow_run_list.py +0 -110
- hatchet_sdk/v0/clients/rest/models/workflow_run_order_by_direction.py +0 -37
- hatchet_sdk/v0/clients/rest/models/workflow_run_order_by_field.py +0 -39
- hatchet_sdk/v0/clients/rest/models/workflow_run_shape.py +0 -186
- hatchet_sdk/v0/clients/rest/models/workflow_run_status.py +0 -42
- hatchet_sdk/v0/clients/rest/models/workflow_run_triggered_by.py +0 -112
- hatchet_sdk/v0/clients/rest/models/workflow_runs_cancel_request.py +0 -85
- hatchet_sdk/v0/clients/rest/models/workflow_runs_metrics.py +0 -94
- hatchet_sdk/v0/clients/rest/models/workflow_runs_metrics_counts.py +0 -104
- hatchet_sdk/v0/clients/rest/models/workflow_tag.py +0 -84
- hatchet_sdk/v0/clients/rest/models/workflow_trigger_cron_ref.py +0 -86
- hatchet_sdk/v0/clients/rest/models/workflow_trigger_event_ref.py +0 -86
- hatchet_sdk/v0/clients/rest/models/workflow_triggers.py +0 -141
- hatchet_sdk/v0/clients/rest/models/workflow_update_request.py +0 -85
- hatchet_sdk/v0/clients/rest/models/workflow_version.py +0 -170
- hatchet_sdk/v0/clients/rest/models/workflow_version_concurrency.py +0 -114
- hatchet_sdk/v0/clients/rest/models/workflow_version_definition.py +0 -85
- hatchet_sdk/v0/clients/rest/models/workflow_version_meta.py +0 -123
- hatchet_sdk/v0/clients/rest/models/workflow_workers_count.py +0 -95
- hatchet_sdk/v0/clients/rest/rest.py +0 -187
- hatchet_sdk/v0/clients/rest/tenacity_utils.py +0 -39
- hatchet_sdk/v0/clients/rest_client.py +0 -622
- hatchet_sdk/v0/clients/run_event_listener.py +0 -260
- hatchet_sdk/v0/clients/workflow_listener.py +0 -277
- hatchet_sdk/v0/connection.py +0 -63
- hatchet_sdk/v0/context/__init__.py +0 -1
- hatchet_sdk/v0/context/context.py +0 -446
- hatchet_sdk/v0/context/worker_context.py +0 -28
- hatchet_sdk/v0/features/cron.py +0 -286
- hatchet_sdk/v0/features/scheduled.py +0 -248
- hatchet_sdk/v0/hatchet.py +0 -310
- hatchet_sdk/v0/labels.py +0 -10
- hatchet_sdk/v0/loader.py +0 -244
- hatchet_sdk/v0/metadata.py +0 -2
- hatchet_sdk/v0/opentelemetry/instrumentor.py +0 -393
- hatchet_sdk/v0/rate_limit.py +0 -126
- hatchet_sdk/v0/semver.py +0 -30
- hatchet_sdk/v0/token.py +0 -27
- hatchet_sdk/v0/utils/aio_utils.py +0 -137
- hatchet_sdk/v0/utils/backoff.py +0 -9
- hatchet_sdk/v0/utils/types.py +0 -8
- hatchet_sdk/v0/utils/typing.py +0 -12
- hatchet_sdk/v0/v2/callable.py +0 -202
- hatchet_sdk/v0/v2/concurrency.py +0 -47
- hatchet_sdk/v0/v2/hatchet.py +0 -224
- hatchet_sdk/v0/worker/__init__.py +0 -1
- hatchet_sdk/v0/worker/action_listener_process.py +0 -294
- hatchet_sdk/v0/worker/runner/run_loop_manager.py +0 -112
- hatchet_sdk/v0/worker/runner/runner.py +0 -460
- hatchet_sdk/v0/worker/runner/utils/capture_logs.py +0 -81
- hatchet_sdk/v0/worker/runner/utils/error_with_traceback.py +0 -6
- hatchet_sdk/v0/worker/worker.py +0 -391
- hatchet_sdk/v0/workflow.py +0 -261
- hatchet_sdk/v0/workflow_run.py +0 -59
- {hatchet_sdk-1.18.1.dist-info → hatchet_sdk-1.19.0.dist-info}/WHEEL +0 -0
- {hatchet_sdk-1.18.1.dist-info → hatchet_sdk-1.19.0.dist-info}/entry_points.txt +0 -0
hatchet_sdk/v0/clients/admin.py
DELETED
|
@@ -1,541 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
from datetime import datetime
|
|
3
|
-
from typing import Any, Callable, Dict, List, Optional, TypedDict, TypeVar, Union
|
|
4
|
-
|
|
5
|
-
import grpc
|
|
6
|
-
from google.protobuf import timestamp_pb2
|
|
7
|
-
|
|
8
|
-
from hatchet_sdk.contracts.workflows_pb2 import (
|
|
9
|
-
BulkTriggerWorkflowRequest,
|
|
10
|
-
BulkTriggerWorkflowResponse,
|
|
11
|
-
CreateWorkflowVersionOpts,
|
|
12
|
-
PutRateLimitRequest,
|
|
13
|
-
PutWorkflowRequest,
|
|
14
|
-
RateLimitDuration,
|
|
15
|
-
ScheduleWorkflowRequest,
|
|
16
|
-
TriggerWorkflowRequest,
|
|
17
|
-
TriggerWorkflowResponse,
|
|
18
|
-
WorkflowVersion,
|
|
19
|
-
)
|
|
20
|
-
from hatchet_sdk.contracts.workflows_pb2_grpc import WorkflowServiceStub
|
|
21
|
-
from hatchet_sdk.v0.clients.rest.models.workflow_run import WorkflowRun
|
|
22
|
-
from hatchet_sdk.v0.clients.rest.tenacity_utils import tenacity_retry
|
|
23
|
-
from hatchet_sdk.v0.clients.run_event_listener import new_listener
|
|
24
|
-
from hatchet_sdk.v0.clients.workflow_listener import PooledWorkflowRunListener
|
|
25
|
-
from hatchet_sdk.v0.connection import new_conn
|
|
26
|
-
from hatchet_sdk.v0.workflow_run import RunRef, WorkflowRunRef
|
|
27
|
-
|
|
28
|
-
from ..loader import ClientConfig
|
|
29
|
-
from ..metadata import get_metadata
|
|
30
|
-
from ..workflow import WorkflowMeta
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
def new_admin(config: ClientConfig):
|
|
34
|
-
return AdminClient(config)
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
class ScheduleTriggerWorkflowOptions(TypedDict, total=False):
|
|
38
|
-
parent_id: Optional[str]
|
|
39
|
-
parent_step_run_id: Optional[str]
|
|
40
|
-
child_index: Optional[int]
|
|
41
|
-
child_key: Optional[str]
|
|
42
|
-
namespace: Optional[str]
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
class ChildTriggerWorkflowOptions(TypedDict, total=False):
|
|
46
|
-
additional_metadata: Dict[str, str] | None = None
|
|
47
|
-
sticky: bool | None = None
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
class ChildWorkflowRunDict(TypedDict, total=False):
|
|
51
|
-
workflow_name: str
|
|
52
|
-
input: Any
|
|
53
|
-
options: ChildTriggerWorkflowOptions
|
|
54
|
-
key: str | None = None
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
class TriggerWorkflowOptions(ScheduleTriggerWorkflowOptions, total=False):
|
|
58
|
-
additional_metadata: Dict[str, str] | None = None
|
|
59
|
-
desired_worker_id: str | None = None
|
|
60
|
-
namespace: str | None = None
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
class WorkflowRunDict(TypedDict, total=False):
|
|
64
|
-
workflow_name: str
|
|
65
|
-
input: Any
|
|
66
|
-
options: TriggerWorkflowOptions | None
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
class DedupeViolationErr(Exception):
|
|
70
|
-
"""Raised by the Hatchet library to indicate that a workflow has already been run with this deduplication value."""
|
|
71
|
-
|
|
72
|
-
pass
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
class AdminClientBase:
|
|
76
|
-
pooled_workflow_listener: PooledWorkflowRunListener | None = None
|
|
77
|
-
|
|
78
|
-
def _prepare_workflow_request(
|
|
79
|
-
self, workflow_name: str, input: any, options: TriggerWorkflowOptions = None
|
|
80
|
-
):
|
|
81
|
-
try:
|
|
82
|
-
payload_data = json.dumps(input)
|
|
83
|
-
|
|
84
|
-
try:
|
|
85
|
-
meta = (
|
|
86
|
-
None
|
|
87
|
-
if options is None or "additional_metadata" not in options
|
|
88
|
-
else options["additional_metadata"]
|
|
89
|
-
)
|
|
90
|
-
if meta is not None:
|
|
91
|
-
options = {
|
|
92
|
-
**options,
|
|
93
|
-
"additional_metadata": json.dumps(meta).encode("utf-8"),
|
|
94
|
-
}
|
|
95
|
-
except json.JSONDecodeError as e:
|
|
96
|
-
raise ValueError(f"Error encoding payload: {e}")
|
|
97
|
-
|
|
98
|
-
return TriggerWorkflowRequest(
|
|
99
|
-
name=workflow_name, input=payload_data, **(options or {})
|
|
100
|
-
)
|
|
101
|
-
except json.JSONDecodeError as e:
|
|
102
|
-
raise ValueError(f"Error encoding payload: {e}")
|
|
103
|
-
|
|
104
|
-
def _prepare_put_workflow_request(
|
|
105
|
-
self,
|
|
106
|
-
name: str,
|
|
107
|
-
workflow: CreateWorkflowVersionOpts | WorkflowMeta,
|
|
108
|
-
overrides: CreateWorkflowVersionOpts | None = None,
|
|
109
|
-
):
|
|
110
|
-
try:
|
|
111
|
-
opts: CreateWorkflowVersionOpts
|
|
112
|
-
|
|
113
|
-
if isinstance(workflow, CreateWorkflowVersionOpts):
|
|
114
|
-
opts = workflow
|
|
115
|
-
else:
|
|
116
|
-
opts = workflow.get_create_opts(self.client.config.namespace)
|
|
117
|
-
|
|
118
|
-
if overrides is not None:
|
|
119
|
-
opts.MergeFrom(overrides)
|
|
120
|
-
|
|
121
|
-
opts.name = name
|
|
122
|
-
|
|
123
|
-
return PutWorkflowRequest(
|
|
124
|
-
opts=opts,
|
|
125
|
-
)
|
|
126
|
-
except grpc.RpcError as e:
|
|
127
|
-
raise ValueError(f"Could not put workflow: {e}")
|
|
128
|
-
|
|
129
|
-
def _prepare_schedule_workflow_request(
|
|
130
|
-
self,
|
|
131
|
-
name: str,
|
|
132
|
-
schedules: List[Union[datetime, timestamp_pb2.Timestamp]],
|
|
133
|
-
input={},
|
|
134
|
-
options: ScheduleTriggerWorkflowOptions = None,
|
|
135
|
-
):
|
|
136
|
-
timestamp_schedules = []
|
|
137
|
-
for schedule in schedules:
|
|
138
|
-
if isinstance(schedule, datetime):
|
|
139
|
-
t = schedule.timestamp()
|
|
140
|
-
seconds = int(t)
|
|
141
|
-
nanos = int(t % 1 * 1e9)
|
|
142
|
-
timestamp = timestamp_pb2.Timestamp(seconds=seconds, nanos=nanos)
|
|
143
|
-
timestamp_schedules.append(timestamp)
|
|
144
|
-
elif isinstance(schedule, timestamp_pb2.Timestamp):
|
|
145
|
-
timestamp_schedules.append(schedule)
|
|
146
|
-
else:
|
|
147
|
-
raise ValueError(
|
|
148
|
-
"Invalid schedule type. Must be datetime or timestamp_pb2.Timestamp."
|
|
149
|
-
)
|
|
150
|
-
|
|
151
|
-
return ScheduleWorkflowRequest(
|
|
152
|
-
name=name,
|
|
153
|
-
schedules=timestamp_schedules,
|
|
154
|
-
input=json.dumps(input),
|
|
155
|
-
**(options or {}),
|
|
156
|
-
)
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
T = TypeVar("T")
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
class AdminClientAioImpl(AdminClientBase):
|
|
163
|
-
def __init__(self, config: ClientConfig):
|
|
164
|
-
aio_conn = new_conn(config, True)
|
|
165
|
-
self.config = config
|
|
166
|
-
self.aio_client = WorkflowServiceStub(aio_conn)
|
|
167
|
-
self.token = config.token
|
|
168
|
-
self.listener_client = new_listener(config)
|
|
169
|
-
self.namespace = config.namespace
|
|
170
|
-
|
|
171
|
-
async def run(
|
|
172
|
-
self,
|
|
173
|
-
function: Union[str, Callable[[Any], T]],
|
|
174
|
-
input: any,
|
|
175
|
-
options: TriggerWorkflowOptions = None,
|
|
176
|
-
) -> "RunRef[T]":
|
|
177
|
-
workflow_name = function
|
|
178
|
-
|
|
179
|
-
if not isinstance(function, str):
|
|
180
|
-
workflow_name = function.function_name
|
|
181
|
-
|
|
182
|
-
wrr = await self.run_workflow(workflow_name, input, options)
|
|
183
|
-
|
|
184
|
-
return RunRef[T](
|
|
185
|
-
wrr.workflow_run_id, wrr.workflow_listener, wrr.workflow_run_event_listener
|
|
186
|
-
)
|
|
187
|
-
|
|
188
|
-
## IMPORTANT: Keep this method's signature in sync with the wrapper in the OTel instrumentor
|
|
189
|
-
@tenacity_retry
|
|
190
|
-
async def run_workflow(
|
|
191
|
-
self, workflow_name: str, input: any, options: TriggerWorkflowOptions = None
|
|
192
|
-
) -> WorkflowRunRef:
|
|
193
|
-
try:
|
|
194
|
-
if not self.pooled_workflow_listener:
|
|
195
|
-
self.pooled_workflow_listener = PooledWorkflowRunListener(self.config)
|
|
196
|
-
|
|
197
|
-
namespace = self.namespace
|
|
198
|
-
|
|
199
|
-
if (
|
|
200
|
-
options is not None
|
|
201
|
-
and "namespace" in options
|
|
202
|
-
and options["namespace"] is not None
|
|
203
|
-
):
|
|
204
|
-
namespace = options.pop("namespace")
|
|
205
|
-
|
|
206
|
-
if namespace != "" and not workflow_name.startswith(self.namespace):
|
|
207
|
-
workflow_name = f"{namespace}{workflow_name}"
|
|
208
|
-
|
|
209
|
-
request = self._prepare_workflow_request(workflow_name, input, options)
|
|
210
|
-
|
|
211
|
-
resp: TriggerWorkflowResponse = await self.aio_client.TriggerWorkflow(
|
|
212
|
-
request,
|
|
213
|
-
metadata=get_metadata(self.token),
|
|
214
|
-
)
|
|
215
|
-
|
|
216
|
-
return WorkflowRunRef(
|
|
217
|
-
workflow_run_id=resp.workflow_run_id,
|
|
218
|
-
workflow_listener=self.pooled_workflow_listener,
|
|
219
|
-
workflow_run_event_listener=self.listener_client,
|
|
220
|
-
)
|
|
221
|
-
except (grpc.RpcError, grpc.aio.AioRpcError) as e:
|
|
222
|
-
if e.code() == grpc.StatusCode.ALREADY_EXISTS:
|
|
223
|
-
raise DedupeViolationErr(e.details())
|
|
224
|
-
|
|
225
|
-
raise e
|
|
226
|
-
|
|
227
|
-
## IMPORTANT: Keep this method's signature in sync with the wrapper in the OTel instrumentor
|
|
228
|
-
@tenacity_retry
|
|
229
|
-
async def run_workflows(
|
|
230
|
-
self,
|
|
231
|
-
workflows: list[WorkflowRunDict],
|
|
232
|
-
options: TriggerWorkflowOptions | None = None,
|
|
233
|
-
) -> List[WorkflowRunRef]:
|
|
234
|
-
if len(workflows) == 0:
|
|
235
|
-
raise ValueError("No workflows to run")
|
|
236
|
-
|
|
237
|
-
if not self.pooled_workflow_listener:
|
|
238
|
-
self.pooled_workflow_listener = PooledWorkflowRunListener(self.config)
|
|
239
|
-
|
|
240
|
-
namespace = self.namespace
|
|
241
|
-
|
|
242
|
-
if (
|
|
243
|
-
options is not None
|
|
244
|
-
and "namespace" in options
|
|
245
|
-
and options["namespace"] is not None
|
|
246
|
-
):
|
|
247
|
-
namespace = options["namespace"]
|
|
248
|
-
del options["namespace"]
|
|
249
|
-
|
|
250
|
-
workflow_run_requests: TriggerWorkflowRequest = []
|
|
251
|
-
|
|
252
|
-
for workflow in workflows:
|
|
253
|
-
workflow_name = workflow["workflow_name"]
|
|
254
|
-
input_data = workflow["input"]
|
|
255
|
-
options = workflow["options"]
|
|
256
|
-
|
|
257
|
-
if namespace != "" and not workflow_name.startswith(self.namespace):
|
|
258
|
-
workflow_name = f"{namespace}{workflow_name}"
|
|
259
|
-
|
|
260
|
-
# Prepare and trigger workflow for each workflow name and input
|
|
261
|
-
request = self._prepare_workflow_request(workflow_name, input_data, options)
|
|
262
|
-
workflow_run_requests.append(request)
|
|
263
|
-
|
|
264
|
-
request = BulkTriggerWorkflowRequest(workflows=workflow_run_requests)
|
|
265
|
-
|
|
266
|
-
resp: BulkTriggerWorkflowResponse = await self.aio_client.BulkTriggerWorkflow(
|
|
267
|
-
request,
|
|
268
|
-
metadata=get_metadata(self.token),
|
|
269
|
-
)
|
|
270
|
-
|
|
271
|
-
return [
|
|
272
|
-
WorkflowRunRef(
|
|
273
|
-
workflow_run_id=workflow_run_id,
|
|
274
|
-
workflow_listener=self.pooled_workflow_listener,
|
|
275
|
-
workflow_run_event_listener=self.listener_client,
|
|
276
|
-
)
|
|
277
|
-
for workflow_run_id in resp.workflow_run_ids
|
|
278
|
-
]
|
|
279
|
-
|
|
280
|
-
@tenacity_retry
|
|
281
|
-
async def put_workflow(
|
|
282
|
-
self,
|
|
283
|
-
name: str,
|
|
284
|
-
workflow: CreateWorkflowVersionOpts | WorkflowMeta,
|
|
285
|
-
overrides: CreateWorkflowVersionOpts | None = None,
|
|
286
|
-
) -> WorkflowVersion:
|
|
287
|
-
opts = self._prepare_put_workflow_request(name, workflow, overrides)
|
|
288
|
-
|
|
289
|
-
return await self.aio_client.PutWorkflow(
|
|
290
|
-
opts,
|
|
291
|
-
metadata=get_metadata(self.token),
|
|
292
|
-
)
|
|
293
|
-
|
|
294
|
-
@tenacity_retry
|
|
295
|
-
async def put_rate_limit(
|
|
296
|
-
self,
|
|
297
|
-
key: str,
|
|
298
|
-
limit: int,
|
|
299
|
-
duration: RateLimitDuration = RateLimitDuration.SECOND,
|
|
300
|
-
):
|
|
301
|
-
await self.aio_client.PutRateLimit(
|
|
302
|
-
PutRateLimitRequest(
|
|
303
|
-
key=key,
|
|
304
|
-
limit=limit,
|
|
305
|
-
duration=duration,
|
|
306
|
-
),
|
|
307
|
-
metadata=get_metadata(self.token),
|
|
308
|
-
)
|
|
309
|
-
|
|
310
|
-
@tenacity_retry
|
|
311
|
-
async def schedule_workflow(
|
|
312
|
-
self,
|
|
313
|
-
name: str,
|
|
314
|
-
schedules: List[Union[datetime, timestamp_pb2.Timestamp]],
|
|
315
|
-
input={},
|
|
316
|
-
options: ScheduleTriggerWorkflowOptions = None,
|
|
317
|
-
) -> WorkflowVersion:
|
|
318
|
-
try:
|
|
319
|
-
namespace = self.namespace
|
|
320
|
-
|
|
321
|
-
if (
|
|
322
|
-
options is not None
|
|
323
|
-
and "namespace" in options
|
|
324
|
-
and options["namespace"] is not None
|
|
325
|
-
):
|
|
326
|
-
namespace = options["namespace"]
|
|
327
|
-
del options["namespace"]
|
|
328
|
-
|
|
329
|
-
if namespace != "" and not name.startswith(self.namespace):
|
|
330
|
-
name = f"{namespace}{name}"
|
|
331
|
-
|
|
332
|
-
request = self._prepare_schedule_workflow_request(
|
|
333
|
-
name, schedules, input, options
|
|
334
|
-
)
|
|
335
|
-
|
|
336
|
-
return await self.aio_client.ScheduleWorkflow(
|
|
337
|
-
request,
|
|
338
|
-
metadata=get_metadata(self.token),
|
|
339
|
-
)
|
|
340
|
-
except (grpc.aio.AioRpcError, grpc.RpcError) as e:
|
|
341
|
-
if e.code() == grpc.StatusCode.ALREADY_EXISTS:
|
|
342
|
-
raise DedupeViolationErr(e.details())
|
|
343
|
-
|
|
344
|
-
raise e
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
class AdminClient(AdminClientBase):
|
|
348
|
-
def __init__(self, config: ClientConfig):
|
|
349
|
-
conn = new_conn(config)
|
|
350
|
-
self.config = config
|
|
351
|
-
self.client = WorkflowServiceStub(conn)
|
|
352
|
-
self.aio = AdminClientAioImpl(config)
|
|
353
|
-
self.token = config.token
|
|
354
|
-
self.listener_client = new_listener(config)
|
|
355
|
-
self.namespace = config.namespace
|
|
356
|
-
|
|
357
|
-
@tenacity_retry
|
|
358
|
-
def put_workflow(
|
|
359
|
-
self,
|
|
360
|
-
name: str,
|
|
361
|
-
workflow: CreateWorkflowVersionOpts | WorkflowMeta,
|
|
362
|
-
overrides: CreateWorkflowVersionOpts | None = None,
|
|
363
|
-
) -> WorkflowVersion:
|
|
364
|
-
opts = self._prepare_put_workflow_request(name, workflow, overrides)
|
|
365
|
-
|
|
366
|
-
resp: WorkflowVersion = self.client.PutWorkflow(
|
|
367
|
-
opts,
|
|
368
|
-
metadata=get_metadata(self.token),
|
|
369
|
-
)
|
|
370
|
-
|
|
371
|
-
return resp
|
|
372
|
-
|
|
373
|
-
@tenacity_retry
|
|
374
|
-
def put_rate_limit(
|
|
375
|
-
self,
|
|
376
|
-
key: str,
|
|
377
|
-
limit: int,
|
|
378
|
-
duration: Union[RateLimitDuration.Value, str] = RateLimitDuration.SECOND,
|
|
379
|
-
):
|
|
380
|
-
self.client.PutRateLimit(
|
|
381
|
-
PutRateLimitRequest(
|
|
382
|
-
key=key,
|
|
383
|
-
limit=limit,
|
|
384
|
-
duration=duration,
|
|
385
|
-
),
|
|
386
|
-
metadata=get_metadata(self.token),
|
|
387
|
-
)
|
|
388
|
-
|
|
389
|
-
@tenacity_retry
|
|
390
|
-
def schedule_workflow(
|
|
391
|
-
self,
|
|
392
|
-
name: str,
|
|
393
|
-
schedules: List[Union[datetime, timestamp_pb2.Timestamp]],
|
|
394
|
-
input={},
|
|
395
|
-
options: ScheduleTriggerWorkflowOptions = None,
|
|
396
|
-
) -> WorkflowVersion:
|
|
397
|
-
try:
|
|
398
|
-
namespace = self.namespace
|
|
399
|
-
|
|
400
|
-
if (
|
|
401
|
-
options is not None
|
|
402
|
-
and "namespace" in options
|
|
403
|
-
and options["namespace"] is not None
|
|
404
|
-
):
|
|
405
|
-
namespace = options["namespace"]
|
|
406
|
-
del options["namespace"]
|
|
407
|
-
|
|
408
|
-
if namespace != "" and not name.startswith(self.namespace):
|
|
409
|
-
name = f"{namespace}{name}"
|
|
410
|
-
|
|
411
|
-
request = self._prepare_schedule_workflow_request(
|
|
412
|
-
name, schedules, input, options
|
|
413
|
-
)
|
|
414
|
-
|
|
415
|
-
return self.client.ScheduleWorkflow(
|
|
416
|
-
request,
|
|
417
|
-
metadata=get_metadata(self.token),
|
|
418
|
-
)
|
|
419
|
-
except (grpc.RpcError, grpc.aio.AioRpcError) as e:
|
|
420
|
-
if e.code() == grpc.StatusCode.ALREADY_EXISTS:
|
|
421
|
-
raise DedupeViolationErr(e.details())
|
|
422
|
-
|
|
423
|
-
raise e
|
|
424
|
-
|
|
425
|
-
## IMPORTANT: Keep this method's signature in sync with the wrapper in the OTel instrumentor
|
|
426
|
-
@tenacity_retry
|
|
427
|
-
def run_workflow(
|
|
428
|
-
self, workflow_name: str, input: any, options: TriggerWorkflowOptions = None
|
|
429
|
-
) -> WorkflowRunRef:
|
|
430
|
-
try:
|
|
431
|
-
if not self.pooled_workflow_listener:
|
|
432
|
-
self.pooled_workflow_listener = PooledWorkflowRunListener(self.config)
|
|
433
|
-
|
|
434
|
-
namespace = self.namespace
|
|
435
|
-
|
|
436
|
-
## TODO: Factor this out - it's repeated a lot of places
|
|
437
|
-
if (
|
|
438
|
-
options is not None
|
|
439
|
-
and "namespace" in options
|
|
440
|
-
and options["namespace"] is not None
|
|
441
|
-
):
|
|
442
|
-
namespace = options.pop("namespace")
|
|
443
|
-
|
|
444
|
-
if namespace != "" and not workflow_name.startswith(self.namespace):
|
|
445
|
-
workflow_name = f"{namespace}{workflow_name}"
|
|
446
|
-
|
|
447
|
-
request = self._prepare_workflow_request(workflow_name, input, options)
|
|
448
|
-
|
|
449
|
-
resp: TriggerWorkflowResponse = self.client.TriggerWorkflow(
|
|
450
|
-
request,
|
|
451
|
-
metadata=get_metadata(self.token),
|
|
452
|
-
)
|
|
453
|
-
|
|
454
|
-
return WorkflowRunRef(
|
|
455
|
-
workflow_run_id=resp.workflow_run_id,
|
|
456
|
-
workflow_listener=self.pooled_workflow_listener,
|
|
457
|
-
workflow_run_event_listener=self.listener_client,
|
|
458
|
-
)
|
|
459
|
-
except (grpc.RpcError, grpc.aio.AioRpcError) as e:
|
|
460
|
-
if e.code() == grpc.StatusCode.ALREADY_EXISTS:
|
|
461
|
-
raise DedupeViolationErr(e.details())
|
|
462
|
-
|
|
463
|
-
raise e
|
|
464
|
-
|
|
465
|
-
## IMPORTANT: Keep this method's signature in sync with the wrapper in the OTel instrumentor
|
|
466
|
-
@tenacity_retry
|
|
467
|
-
def run_workflows(
|
|
468
|
-
self, workflows: List[WorkflowRunDict], options: TriggerWorkflowOptions = None
|
|
469
|
-
) -> list[WorkflowRunRef]:
|
|
470
|
-
workflow_run_requests: TriggerWorkflowRequest = []
|
|
471
|
-
if not self.pooled_workflow_listener:
|
|
472
|
-
self.pooled_workflow_listener = PooledWorkflowRunListener(self.config)
|
|
473
|
-
|
|
474
|
-
for workflow in workflows:
|
|
475
|
-
workflow_name = workflow["workflow_name"]
|
|
476
|
-
input_data = workflow["input"]
|
|
477
|
-
options = workflow["options"]
|
|
478
|
-
|
|
479
|
-
namespace = self.namespace
|
|
480
|
-
|
|
481
|
-
if (
|
|
482
|
-
options is not None
|
|
483
|
-
and "namespace" in options
|
|
484
|
-
and options["namespace"] is not None
|
|
485
|
-
):
|
|
486
|
-
namespace = options["namespace"]
|
|
487
|
-
del options["namespace"]
|
|
488
|
-
|
|
489
|
-
if namespace != "" and not workflow_name.startswith(self.namespace):
|
|
490
|
-
workflow_name = f"{namespace}{workflow_name}"
|
|
491
|
-
|
|
492
|
-
# Prepare and trigger workflow for each workflow name and input
|
|
493
|
-
request = self._prepare_workflow_request(workflow_name, input_data, options)
|
|
494
|
-
|
|
495
|
-
workflow_run_requests.append(request)
|
|
496
|
-
|
|
497
|
-
request = BulkTriggerWorkflowRequest(workflows=workflow_run_requests)
|
|
498
|
-
|
|
499
|
-
resp: BulkTriggerWorkflowResponse = self.client.BulkTriggerWorkflow(
|
|
500
|
-
request,
|
|
501
|
-
metadata=get_metadata(self.token),
|
|
502
|
-
)
|
|
503
|
-
|
|
504
|
-
return [
|
|
505
|
-
WorkflowRunRef(
|
|
506
|
-
workflow_run_id=workflow_run_id,
|
|
507
|
-
workflow_listener=self.pooled_workflow_listener,
|
|
508
|
-
workflow_run_event_listener=self.listener_client,
|
|
509
|
-
)
|
|
510
|
-
for workflow_run_id in resp.workflow_run_ids
|
|
511
|
-
]
|
|
512
|
-
|
|
513
|
-
def run(
|
|
514
|
-
self,
|
|
515
|
-
function: Union[str, Callable[[Any], T]],
|
|
516
|
-
input: any,
|
|
517
|
-
options: TriggerWorkflowOptions = None,
|
|
518
|
-
) -> "RunRef[T]":
|
|
519
|
-
workflow_name = function
|
|
520
|
-
|
|
521
|
-
if not isinstance(function, str):
|
|
522
|
-
workflow_name = function.function_name
|
|
523
|
-
|
|
524
|
-
wrr = self.run_workflow(workflow_name, input, options)
|
|
525
|
-
|
|
526
|
-
return RunRef[T](
|
|
527
|
-
wrr.workflow_run_id, wrr.workflow_listener, wrr.workflow_run_event_listener
|
|
528
|
-
)
|
|
529
|
-
|
|
530
|
-
def get_workflow_run(self, workflow_run_id: str) -> WorkflowRunRef:
|
|
531
|
-
try:
|
|
532
|
-
if not self.pooled_workflow_listener:
|
|
533
|
-
self.pooled_workflow_listener = PooledWorkflowRunListener(self.config)
|
|
534
|
-
|
|
535
|
-
return WorkflowRunRef(
|
|
536
|
-
workflow_run_id=workflow_run_id,
|
|
537
|
-
workflow_listener=self.pooled_workflow_listener,
|
|
538
|
-
workflow_run_event_listener=self.listener_client,
|
|
539
|
-
)
|
|
540
|
-
except grpc.RpcError as e:
|
|
541
|
-
raise ValueError(f"Could not get workflow run: {e}")
|