hatchet-sdk 1.2.6__py3-none-any.whl → 1.3.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.

Files changed (60) hide show
  1. hatchet_sdk/__init__.py +7 -5
  2. hatchet_sdk/client.py +14 -6
  3. hatchet_sdk/clients/admin.py +57 -15
  4. hatchet_sdk/clients/dispatcher/action_listener.py +2 -2
  5. hatchet_sdk/clients/dispatcher/dispatcher.py +20 -7
  6. hatchet_sdk/clients/event_ts.py +25 -5
  7. hatchet_sdk/clients/listeners/durable_event_listener.py +125 -0
  8. hatchet_sdk/clients/listeners/pooled_listener.py +255 -0
  9. hatchet_sdk/clients/listeners/workflow_listener.py +62 -0
  10. hatchet_sdk/clients/rest/api/api_token_api.py +24 -24
  11. hatchet_sdk/clients/rest/api/default_api.py +64 -64
  12. hatchet_sdk/clients/rest/api/event_api.py +64 -64
  13. hatchet_sdk/clients/rest/api/github_api.py +8 -8
  14. hatchet_sdk/clients/rest/api/healthcheck_api.py +16 -16
  15. hatchet_sdk/clients/rest/api/log_api.py +16 -16
  16. hatchet_sdk/clients/rest/api/metadata_api.py +24 -24
  17. hatchet_sdk/clients/rest/api/rate_limits_api.py +8 -8
  18. hatchet_sdk/clients/rest/api/slack_api.py +16 -16
  19. hatchet_sdk/clients/rest/api/sns_api.py +24 -24
  20. hatchet_sdk/clients/rest/api/step_run_api.py +56 -56
  21. hatchet_sdk/clients/rest/api/task_api.py +56 -56
  22. hatchet_sdk/clients/rest/api/tenant_api.py +128 -128
  23. hatchet_sdk/clients/rest/api/user_api.py +96 -96
  24. hatchet_sdk/clients/rest/api/worker_api.py +24 -24
  25. hatchet_sdk/clients/rest/api/workflow_api.py +144 -144
  26. hatchet_sdk/clients/rest/api/workflow_run_api.py +48 -48
  27. hatchet_sdk/clients/rest/api/workflow_runs_api.py +40 -40
  28. hatchet_sdk/clients/rest/api_client.py +5 -8
  29. hatchet_sdk/clients/rest/configuration.py +7 -3
  30. hatchet_sdk/clients/rest/models/tenant_step_run_queue_metrics.py +2 -2
  31. hatchet_sdk/clients/rest/models/v1_task_summary.py +5 -0
  32. hatchet_sdk/clients/rest/models/workflow_runs_metrics.py +5 -1
  33. hatchet_sdk/clients/rest/rest.py +160 -111
  34. hatchet_sdk/clients/v1/api_client.py +2 -2
  35. hatchet_sdk/context/context.py +22 -21
  36. hatchet_sdk/features/cron.py +41 -40
  37. hatchet_sdk/features/logs.py +7 -6
  38. hatchet_sdk/features/metrics.py +19 -18
  39. hatchet_sdk/features/runs.py +88 -68
  40. hatchet_sdk/features/scheduled.py +42 -42
  41. hatchet_sdk/features/workers.py +17 -16
  42. hatchet_sdk/features/workflows.py +15 -14
  43. hatchet_sdk/hatchet.py +1 -1
  44. hatchet_sdk/runnables/standalone.py +12 -9
  45. hatchet_sdk/runnables/task.py +66 -2
  46. hatchet_sdk/runnables/types.py +8 -0
  47. hatchet_sdk/runnables/workflow.py +26 -125
  48. hatchet_sdk/waits.py +8 -8
  49. hatchet_sdk/worker/runner/run_loop_manager.py +4 -4
  50. hatchet_sdk/worker/runner/runner.py +22 -11
  51. hatchet_sdk/worker/worker.py +29 -25
  52. hatchet_sdk/workflow_run.py +55 -9
  53. {hatchet_sdk-1.2.6.dist-info → hatchet_sdk-1.3.0.dist-info}/METADATA +1 -1
  54. {hatchet_sdk-1.2.6.dist-info → hatchet_sdk-1.3.0.dist-info}/RECORD +57 -57
  55. hatchet_sdk/clients/durable_event_listener.py +0 -329
  56. hatchet_sdk/clients/workflow_listener.py +0 -288
  57. hatchet_sdk/utils/aio.py +0 -43
  58. /hatchet_sdk/clients/{run_event_listener.py → listeners/run_event_listener.py} +0 -0
  59. {hatchet_sdk-1.2.6.dist-info → hatchet_sdk-1.3.0.dist-info}/WHEEL +0 -0
  60. {hatchet_sdk-1.2.6.dist-info → hatchet_sdk-1.3.0.dist-info}/entry_points.txt +0 -0
@@ -1,17 +1,18 @@
1
+ import asyncio
2
+
1
3
  from hatchet_sdk.clients.rest.api.log_api import LogApi
2
4
  from hatchet_sdk.clients.rest.api_client import ApiClient
3
5
  from hatchet_sdk.clients.rest.models.v1_log_line_list import V1LogLineList
4
6
  from hatchet_sdk.clients.v1.api_client import BaseRestClient
5
- from hatchet_sdk.utils.aio import run_async_from_sync
6
7
 
7
8
 
8
9
  class LogsClient(BaseRestClient):
9
10
  def _la(self, client: ApiClient) -> LogApi:
10
11
  return LogApi(client)
11
12
 
12
- async def aio_list(self, task_run_id: str) -> V1LogLineList:
13
- async with self.client() as client:
14
- return await self._la(client).v1_log_line_list(task=task_run_id)
15
-
16
13
  def list(self, task_run_id: str) -> V1LogLineList:
17
- return run_async_from_sync(self.aio_list, task_run_id)
14
+ with self.client() as client:
15
+ return self._la(client).v1_log_line_list(task=task_run_id)
16
+
17
+ async def aio_list(self, task_run_id: str) -> V1LogLineList:
18
+ return await asyncio.to_thread(self.list, task_run_id)
@@ -1,3 +1,5 @@
1
+ import asyncio
2
+
1
3
  from hatchet_sdk.clients.rest.api.tenant_api import TenantApi
2
4
  from hatchet_sdk.clients.rest.api.workflow_api import WorkflowApi
3
5
  from hatchet_sdk.clients.rest.api_client import ApiClient
@@ -11,7 +13,6 @@ from hatchet_sdk.clients.v1.api_client import (
11
13
  BaseRestClient,
12
14
  maybe_additional_metadata_to_kv,
13
15
  )
14
- from hatchet_sdk.utils.aio import run_async_from_sync
15
16
  from hatchet_sdk.utils.typing import JSONSerializableMapping
16
17
 
17
18
 
@@ -22,34 +23,34 @@ class MetricsClient(BaseRestClient):
22
23
  def _ta(self, client: ApiClient) -> TenantApi:
23
24
  return TenantApi(client)
24
25
 
25
- async def aio_get_workflow_metrics(
26
+ def get_workflow_metrics(
26
27
  self,
27
28
  workflow_id: str,
28
29
  status: WorkflowRunStatus | None = None,
29
30
  group_key: str | None = None,
30
31
  ) -> WorkflowMetrics:
31
- async with self.client() as client:
32
- return await self._wa(client).workflow_get_metrics(
32
+ with self.client() as client:
33
+ return self._wa(client).workflow_get_metrics(
33
34
  workflow=workflow_id, status=status, group_key=group_key
34
35
  )
35
36
 
36
- def get_workflow_metrics(
37
+ async def aio_get_workflow_metrics(
37
38
  self,
38
39
  workflow_id: str,
39
40
  status: WorkflowRunStatus | None = None,
40
41
  group_key: str | None = None,
41
42
  ) -> WorkflowMetrics:
42
- return run_async_from_sync(
43
- self.aio_get_workflow_metrics, workflow_id, status, group_key
43
+ return await asyncio.to_thread(
44
+ self.get_workflow_metrics, workflow_id, status, group_key
44
45
  )
45
46
 
46
- async def aio_get_queue_metrics(
47
+ def get_queue_metrics(
47
48
  self,
48
49
  workflow_ids: list[str] | None = None,
49
50
  additional_metadata: JSONSerializableMapping | None = None,
50
51
  ) -> TenantQueueMetrics:
51
- async with self.client() as client:
52
- return await self._wa(client).tenant_get_queue_metrics(
52
+ with self.client() as client:
53
+ return self._wa(client).tenant_get_queue_metrics(
53
54
  tenant=self.client_config.tenant_id,
54
55
  workflows=workflow_ids,
55
56
  additional_metadata=maybe_additional_metadata_to_kv(
@@ -57,20 +58,20 @@ class MetricsClient(BaseRestClient):
57
58
  ),
58
59
  )
59
60
 
60
- def get_queue_metrics(
61
+ async def aio_get_queue_metrics(
61
62
  self,
62
63
  workflow_ids: list[str] | None = None,
63
64
  additional_metadata: JSONSerializableMapping | None = None,
64
65
  ) -> TenantQueueMetrics:
65
- return run_async_from_sync(
66
- self.aio_get_queue_metrics, workflow_ids, additional_metadata
66
+ return await asyncio.to_thread(
67
+ self.get_queue_metrics, workflow_ids, additional_metadata
67
68
  )
68
69
 
69
- async def aio_get_task_metrics(self) -> TenantStepRunQueueMetrics:
70
- async with self.client() as client:
71
- return await self._ta(client).tenant_get_step_run_queue_metrics(
70
+ def get_task_metrics(self) -> TenantStepRunQueueMetrics:
71
+ with self.client() as client:
72
+ return self._ta(client).tenant_get_step_run_queue_metrics(
72
73
  tenant=self.client_config.tenant_id
73
74
  )
74
75
 
75
- def get_task_metrics(self) -> TenantStepRunQueueMetrics:
76
- return run_async_from_sync(self.aio_get_task_metrics)
76
+ async def aio_get_task_metrics(self) -> TenantStepRunQueueMetrics:
77
+ return await asyncio.to_thread(self.get_task_metrics)
@@ -1,8 +1,11 @@
1
+ import asyncio
1
2
  from datetime import datetime, timedelta
2
- from typing import Literal, overload
3
+ from typing import TYPE_CHECKING, Literal, overload
3
4
 
4
5
  from pydantic import BaseModel, model_validator
5
6
 
7
+ from hatchet_sdk.clients.listeners.run_event_listener import RunEventListenerClient
8
+ from hatchet_sdk.clients.listeners.workflow_listener import PooledWorkflowRunListener
6
9
  from hatchet_sdk.clients.rest.api.task_api import TaskApi
7
10
  from hatchet_sdk.clients.rest.api.workflow_runs_api import WorkflowRunsApi
8
11
  from hatchet_sdk.clients.rest.api_client import ApiClient
@@ -19,9 +22,11 @@ from hatchet_sdk.clients.v1.api_client import (
19
22
  BaseRestClient,
20
23
  maybe_additional_metadata_to_kv,
21
24
  )
22
- from hatchet_sdk.utils.aio import run_async_from_sync
25
+ from hatchet_sdk.config import ClientConfig
23
26
  from hatchet_sdk.utils.typing import JSONSerializableMapping
24
- from hatchet_sdk.workflow_run import WorkflowRunRef
27
+
28
+ if TYPE_CHECKING:
29
+ from hatchet_sdk.workflow_run import WorkflowRunRef
25
30
 
26
31
 
27
32
  class RunFilter(BaseModel):
@@ -84,18 +89,29 @@ class BulkCancelReplayOpts(BaseModel):
84
89
 
85
90
 
86
91
  class RunsClient(BaseRestClient):
92
+ def __init__(
93
+ self,
94
+ config: ClientConfig,
95
+ workflow_run_listener: PooledWorkflowRunListener,
96
+ workflow_run_event_listener: RunEventListenerClient,
97
+ ) -> None:
98
+ super().__init__(config)
99
+
100
+ self.workflow_run_listener = workflow_run_listener
101
+ self.workflow_run_event_listener = workflow_run_event_listener
102
+
87
103
  def _wra(self, client: ApiClient) -> WorkflowRunsApi:
88
104
  return WorkflowRunsApi(client)
89
105
 
90
106
  def _ta(self, client: ApiClient) -> TaskApi:
91
107
  return TaskApi(client)
92
108
 
93
- async def aio_get(self, workflow_run_id: str) -> V1WorkflowRunDetails:
94
- async with self.client() as client:
95
- return await self._wra(client).v1_workflow_run_get(str(workflow_run_id))
96
-
97
109
  def get(self, workflow_run_id: str) -> V1WorkflowRunDetails:
98
- return run_async_from_sync(self.aio_get, workflow_run_id)
110
+ with self.client() as client:
111
+ return self._wra(client).v1_workflow_run_get(str(workflow_run_id))
112
+
113
+ async def aio_get(self, workflow_run_id: str) -> V1WorkflowRunDetails:
114
+ return await asyncio.to_thread(self.get, workflow_run_id)
99
115
 
100
116
  async def aio_list(
101
117
  self,
@@ -110,22 +126,19 @@ class RunsClient(BaseRestClient):
110
126
  worker_id: str | None = None,
111
127
  parent_task_external_id: str | None = None,
112
128
  ) -> V1TaskSummaryList:
113
- async with self.client() as client:
114
- return await self._wra(client).v1_workflow_run_list(
115
- tenant=self.client_config.tenant_id,
116
- since=since,
117
- only_tasks=only_tasks,
118
- offset=offset,
119
- limit=limit,
120
- statuses=statuses,
121
- until=until,
122
- additional_metadata=maybe_additional_metadata_to_kv(
123
- additional_metadata
124
- ),
125
- workflow_ids=workflow_ids,
126
- worker_id=worker_id,
127
- parent_task_external_id=parent_task_external_id,
128
- )
129
+ return await asyncio.to_thread(
130
+ self.list,
131
+ since=since,
132
+ only_tasks=only_tasks,
133
+ offset=offset,
134
+ limit=limit,
135
+ statuses=statuses,
136
+ until=until,
137
+ additional_metadata=additional_metadata,
138
+ workflow_ids=workflow_ids,
139
+ worker_id=worker_id,
140
+ parent_task_external_id=parent_task_external_id,
141
+ )
129
142
 
130
143
  def list(
131
144
  self,
@@ -140,28 +153,31 @@ class RunsClient(BaseRestClient):
140
153
  worker_id: str | None = None,
141
154
  parent_task_external_id: str | None = None,
142
155
  ) -> V1TaskSummaryList:
143
- return run_async_from_sync(
144
- self.aio_list,
145
- since=since,
146
- only_tasks=only_tasks,
147
- offset=offset,
148
- limit=limit,
149
- statuses=statuses,
150
- until=until,
151
- additional_metadata=additional_metadata,
152
- workflow_ids=workflow_ids,
153
- worker_id=worker_id,
154
- parent_task_external_id=parent_task_external_id,
155
- )
156
+ with self.client() as client:
157
+ return self._wra(client).v1_workflow_run_list(
158
+ tenant=self.client_config.tenant_id,
159
+ since=since,
160
+ only_tasks=only_tasks,
161
+ offset=offset,
162
+ limit=limit,
163
+ statuses=statuses,
164
+ until=until,
165
+ additional_metadata=maybe_additional_metadata_to_kv(
166
+ additional_metadata
167
+ ),
168
+ workflow_ids=workflow_ids,
169
+ worker_id=worker_id,
170
+ parent_task_external_id=parent_task_external_id,
171
+ )
156
172
 
157
- async def aio_create(
173
+ def create(
158
174
  self,
159
175
  workflow_name: str,
160
176
  input: JSONSerializableMapping,
161
177
  additional_metadata: JSONSerializableMapping = {},
162
178
  ) -> V1WorkflowRunDetails:
163
- async with self.client() as client:
164
- return await self._wra(client).v1_workflow_run_create(
179
+ with self.client() as client:
180
+ return self._wra(client).v1_workflow_run_create(
165
181
  tenant=self.client_config.tenant_id,
166
182
  v1_trigger_workflow_run_request=V1TriggerWorkflowRunRequest(
167
183
  workflowName=workflow_name,
@@ -170,60 +186,64 @@ class RunsClient(BaseRestClient):
170
186
  ),
171
187
  )
172
188
 
173
- def create(
189
+ async def aio_create(
174
190
  self,
175
191
  workflow_name: str,
176
192
  input: JSONSerializableMapping,
177
193
  additional_metadata: JSONSerializableMapping = {},
178
194
  ) -> V1WorkflowRunDetails:
179
- return run_async_from_sync(
180
- self.aio_create, workflow_name, input, additional_metadata
195
+ return await asyncio.to_thread(
196
+ self.create, workflow_name, input, additional_metadata
181
197
  )
182
198
 
183
- async def aio_replay(self, run_id: str) -> None:
184
- await self.aio_bulk_replay(opts=BulkCancelReplayOpts(ids=[run_id]))
185
-
186
199
  def replay(self, run_id: str) -> None:
187
- return run_async_from_sync(self.aio_replay, run_id)
200
+ self.bulk_replay(opts=BulkCancelReplayOpts(ids=[run_id]))
188
201
 
189
- async def aio_bulk_replay(self, opts: BulkCancelReplayOpts) -> None:
190
- async with self.client() as client:
191
- await self._ta(client).v1_task_replay(
202
+ async def aio_replay(self, run_id: str) -> None:
203
+ return await asyncio.to_thread(self.replay, run_id)
204
+
205
+ def bulk_replay(self, opts: BulkCancelReplayOpts) -> None:
206
+ with self.client() as client:
207
+ self._ta(client).v1_task_replay(
192
208
  tenant=self.client_config.tenant_id,
193
209
  v1_replay_task_request=opts.to_request("replay"),
194
210
  )
195
211
 
196
- def bulk_replay(self, opts: BulkCancelReplayOpts) -> None:
197
- return run_async_from_sync(self.aio_bulk_replay, opts)
198
-
199
- async def aio_cancel(self, run_id: str) -> None:
200
- await self.aio_bulk_cancel(opts=BulkCancelReplayOpts(ids=[run_id]))
212
+ async def aio_bulk_replay(self, opts: BulkCancelReplayOpts) -> None:
213
+ return await asyncio.to_thread(self.bulk_replay, opts)
201
214
 
202
215
  def cancel(self, run_id: str) -> None:
203
- return run_async_from_sync(self.aio_cancel, run_id)
216
+ self.bulk_cancel(opts=BulkCancelReplayOpts(ids=[run_id]))
204
217
 
205
- async def aio_bulk_cancel(self, opts: BulkCancelReplayOpts) -> None:
206
- async with self.client() as client:
207
- await self._ta(client).v1_task_cancel(
218
+ async def aio_cancel(self, run_id: str) -> None:
219
+ return await asyncio.to_thread(self.cancel, run_id)
220
+
221
+ def bulk_cancel(self, opts: BulkCancelReplayOpts) -> None:
222
+ with self.client() as client:
223
+ self._ta(client).v1_task_cancel(
208
224
  tenant=self.client_config.tenant_id,
209
225
  v1_cancel_task_request=opts.to_request("cancel"),
210
226
  )
211
227
 
212
- def bulk_cancel(self, opts: BulkCancelReplayOpts) -> None:
213
- return run_async_from_sync(self.aio_bulk_cancel, opts)
214
-
215
- async def aio_get_result(self, run_id: str) -> JSONSerializableMapping:
216
- details = await self.aio_get(run_id)
217
-
218
- return details.run.output
228
+ async def aio_bulk_cancel(self, opts: BulkCancelReplayOpts) -> None:
229
+ return await asyncio.to_thread(self.bulk_cancel, opts)
219
230
 
220
231
  def get_result(self, run_id: str) -> JSONSerializableMapping:
221
232
  details = self.get(run_id)
222
233
 
223
234
  return details.run.output
224
235
 
225
- def get_run_ref(self, workflow_run_id: str) -> WorkflowRunRef:
236
+ def get_run_ref(self, workflow_run_id: str) -> "WorkflowRunRef":
237
+ from hatchet_sdk.workflow_run import WorkflowRunRef
238
+
226
239
  return WorkflowRunRef(
227
240
  workflow_run_id=workflow_run_id,
228
- config=self.client_config,
241
+ workflow_run_event_listener=self.workflow_run_event_listener,
242
+ workflow_run_listener=self.workflow_run_listener,
243
+ runs_client=self,
229
244
  )
245
+
246
+ async def aio_get_result(self, run_id: str) -> JSONSerializableMapping:
247
+ details = await asyncio.to_thread(self.get, run_id)
248
+
249
+ return details.run.output
@@ -1,3 +1,4 @@
1
+ import asyncio
1
2
  import datetime
2
3
  from typing import Optional
3
4
 
@@ -22,7 +23,6 @@ from hatchet_sdk.clients.v1.api_client import (
22
23
  BaseRestClient,
23
24
  maybe_additional_metadata_to_kv,
24
25
  )
25
- from hatchet_sdk.utils.aio import run_async_from_sync
26
26
  from hatchet_sdk.utils.typing import JSONSerializableMapping
27
27
 
28
28
 
@@ -33,7 +33,7 @@ class ScheduledClient(BaseRestClient):
33
33
  def _wa(self, client: ApiClient) -> WorkflowApi:
34
34
  return WorkflowApi(client)
35
35
 
36
- async def aio_create(
36
+ def create(
37
37
  self,
38
38
  workflow_name: str,
39
39
  trigger_at: datetime.datetime,
@@ -52,8 +52,8 @@ class ScheduledClient(BaseRestClient):
52
52
  Returns:
53
53
  ScheduledWorkflows: The created scheduled workflow instance.
54
54
  """
55
- async with self.client() as client:
56
- return await self._wra(client).scheduled_workflow_run_create(
55
+ with self.client() as client:
56
+ return self._wra(client).scheduled_workflow_run_create(
57
57
  tenant=self.client_config.tenant_id,
58
58
  workflow=workflow_name,
59
59
  schedule_workflow_run_request=ScheduleWorkflowRunRequest(
@@ -63,7 +63,7 @@ class ScheduledClient(BaseRestClient):
63
63
  ),
64
64
  )
65
65
 
66
- def create(
66
+ async def aio_create(
67
67
  self,
68
68
  workflow_name: str,
69
69
  trigger_at: datetime.datetime,
@@ -83,29 +83,29 @@ class ScheduledClient(BaseRestClient):
83
83
  ScheduledWorkflows: The created scheduled workflow instance.
84
84
  """
85
85
 
86
- return run_async_from_sync(
87
- self.aio_create,
86
+ return await asyncio.to_thread(
87
+ self.create,
88
88
  workflow_name,
89
89
  trigger_at,
90
90
  input,
91
91
  additional_metadata,
92
92
  )
93
93
 
94
- async def aio_delete(self, scheduled_id: str) -> None:
94
+ def delete(self, scheduled_id: str) -> None:
95
95
  """
96
96
  Deletes a scheduled workflow run.
97
97
 
98
98
  Args:
99
99
  scheduled_id (str): The scheduled workflow trigger ID to delete.
100
100
  """
101
- async with self.client() as client:
102
- await self._wa(client).workflow_scheduled_delete(
101
+ with self.client() as client:
102
+ self._wa(client).workflow_scheduled_delete(
103
103
  tenant=self.client_config.tenant_id,
104
104
  scheduled_workflow_run=scheduled_id,
105
105
  )
106
106
 
107
- def delete(self, scheduled_id: str) -> None:
108
- run_async_from_sync(self.aio_delete, scheduled_id)
107
+ async def aio_delete(self, scheduled_id: str) -> None:
108
+ await asyncio.to_thread(self.delete, scheduled_id)
109
109
 
110
110
  async def aio_list(
111
111
  self,
@@ -134,20 +134,17 @@ class ScheduledClient(BaseRestClient):
134
134
  Returns:
135
135
  List[ScheduledWorkflows]: A list of scheduled workflows matching the criteria.
136
136
  """
137
- async with self.client() as client:
138
- return await self._wa(client).workflow_scheduled_list(
139
- tenant=self.client_config.tenant_id,
140
- offset=offset,
141
- limit=limit,
142
- order_by_field=order_by_field,
143
- order_by_direction=order_by_direction,
144
- workflow_id=workflow_id,
145
- additional_metadata=maybe_additional_metadata_to_kv(
146
- additional_metadata
147
- ),
148
- parent_workflow_run_id=parent_workflow_run_id,
149
- statuses=statuses,
150
- )
137
+ return await asyncio.to_thread(
138
+ self.list,
139
+ offset=offset,
140
+ limit=limit,
141
+ workflow_id=workflow_id,
142
+ additional_metadata=additional_metadata,
143
+ order_by_field=order_by_field,
144
+ order_by_direction=order_by_direction,
145
+ parent_workflow_run_id=parent_workflow_run_id,
146
+ statuses=statuses,
147
+ )
151
148
 
152
149
  def list(
153
150
  self,
@@ -176,19 +173,22 @@ class ScheduledClient(BaseRestClient):
176
173
  Returns:
177
174
  List[ScheduledWorkflows]: A list of scheduled workflows matching the criteria.
178
175
  """
179
- return run_async_from_sync(
180
- self.aio_list,
181
- offset=offset,
182
- limit=limit,
183
- workflow_id=workflow_id,
184
- additional_metadata=additional_metadata,
185
- order_by_field=order_by_field,
186
- order_by_direction=order_by_direction,
187
- parent_workflow_run_id=parent_workflow_run_id,
188
- statuses=statuses,
189
- )
176
+ with self.client() as client:
177
+ return self._wa(client).workflow_scheduled_list(
178
+ tenant=self.client_config.tenant_id,
179
+ offset=offset,
180
+ limit=limit,
181
+ order_by_field=order_by_field,
182
+ order_by_direction=order_by_direction,
183
+ workflow_id=workflow_id,
184
+ additional_metadata=maybe_additional_metadata_to_kv(
185
+ additional_metadata
186
+ ),
187
+ parent_workflow_run_id=parent_workflow_run_id,
188
+ statuses=statuses,
189
+ )
190
190
 
191
- async def aio_get(self, scheduled_id: str) -> ScheduledWorkflows:
191
+ def get(self, scheduled_id: str) -> ScheduledWorkflows:
192
192
  """
193
193
  Retrieves a specific scheduled workflow by scheduled run trigger ID.
194
194
 
@@ -199,13 +199,13 @@ class ScheduledClient(BaseRestClient):
199
199
  ScheduledWorkflows: The requested scheduled workflow instance.
200
200
  """
201
201
 
202
- async with self.client() as client:
203
- return await self._wa(client).workflow_scheduled_get(
202
+ with self.client() as client:
203
+ return self._wa(client).workflow_scheduled_get(
204
204
  tenant=self.client_config.tenant_id,
205
205
  scheduled_workflow_run=scheduled_id,
206
206
  )
207
207
 
208
- def get(self, scheduled_id: str) -> ScheduledWorkflows:
208
+ async def aio_get(self, scheduled_id: str) -> ScheduledWorkflows:
209
209
  """
210
210
  Retrieves a specific scheduled workflow by scheduled run trigger ID.
211
211
 
@@ -215,4 +215,4 @@ class ScheduledClient(BaseRestClient):
215
215
  Returns:
216
216
  ScheduledWorkflows: The requested scheduled workflow instance.
217
217
  """
218
- return run_async_from_sync(self.aio_get, scheduled_id)
218
+ return await asyncio.to_thread(self.get, scheduled_id)
@@ -1,42 +1,43 @@
1
+ import asyncio
2
+
1
3
  from hatchet_sdk.clients.rest.api.worker_api import WorkerApi
2
4
  from hatchet_sdk.clients.rest.api_client import ApiClient
3
5
  from hatchet_sdk.clients.rest.models.update_worker_request import UpdateWorkerRequest
4
6
  from hatchet_sdk.clients.rest.models.worker import Worker
5
7
  from hatchet_sdk.clients.rest.models.worker_list import WorkerList
6
8
  from hatchet_sdk.clients.v1.api_client import BaseRestClient
7
- from hatchet_sdk.utils.aio import run_async_from_sync
8
9
 
9
10
 
10
11
  class WorkersClient(BaseRestClient):
11
12
  def _wa(self, client: ApiClient) -> WorkerApi:
12
13
  return WorkerApi(client)
13
14
 
14
- async def aio_get(self, worker_id: str) -> Worker:
15
- async with self.client() as client:
16
- return await self._wa(client).worker_get(worker_id)
17
-
18
15
  def get(self, worker_id: str) -> Worker:
19
- return run_async_from_sync(self.aio_get, worker_id)
16
+ with self.client() as client:
17
+ return self._wa(client).worker_get(worker_id)
20
18
 
21
- async def aio_list(
19
+ async def aio_get(self, worker_id: str) -> Worker:
20
+ return await asyncio.to_thread(self.get, worker_id)
21
+
22
+ def list(
22
23
  self,
23
24
  ) -> WorkerList:
24
- async with self.client() as client:
25
- return await self._wa(client).worker_list(
25
+ with self.client() as client:
26
+ return self._wa(client).worker_list(
26
27
  tenant=self.client_config.tenant_id,
27
28
  )
28
29
 
29
- def list(
30
+ async def aio_list(
30
31
  self,
31
32
  ) -> WorkerList:
32
- return run_async_from_sync(self.aio_list)
33
+ return await asyncio.to_thread(self.list)
33
34
 
34
- async def aio_update(self, worker_id: str, opts: UpdateWorkerRequest) -> Worker:
35
- async with self.client() as client:
36
- return await self._wa(client).worker_update(
35
+ def update(self, worker_id: str, opts: UpdateWorkerRequest) -> Worker:
36
+ with self.client() as client:
37
+ return self._wa(client).worker_update(
37
38
  worker=worker_id,
38
39
  update_worker_request=opts,
39
40
  )
40
41
 
41
- def update(self, worker_id: str, opts: UpdateWorkerRequest) -> Worker:
42
- return run_async_from_sync(self.aio_update, worker_id, opts)
42
+ async def aio_update(self, worker_id: str, opts: UpdateWorkerRequest) -> Worker:
43
+ return await asyncio.to_thread(self.update, worker_id, opts)
@@ -1,3 +1,5 @@
1
+ import asyncio
2
+
1
3
  from hatchet_sdk.clients.rest.api.workflow_api import WorkflowApi
2
4
  from hatchet_sdk.clients.rest.api.workflow_run_api import WorkflowRunApi
3
5
  from hatchet_sdk.clients.rest.api_client import ApiClient
@@ -5,7 +7,6 @@ from hatchet_sdk.clients.rest.models.workflow import Workflow
5
7
  from hatchet_sdk.clients.rest.models.workflow_list import WorkflowList
6
8
  from hatchet_sdk.clients.rest.models.workflow_version import WorkflowVersion
7
9
  from hatchet_sdk.clients.v1.api_client import BaseRestClient
8
- from hatchet_sdk.utils.aio import run_async_from_sync
9
10
 
10
11
 
11
12
  class WorkflowsClient(BaseRestClient):
@@ -16,41 +17,41 @@ class WorkflowsClient(BaseRestClient):
16
17
  return WorkflowApi(client)
17
18
 
18
19
  async def aio_get(self, workflow_id: str) -> Workflow:
19
- async with self.client() as client:
20
- return await self._wa(client).workflow_get(workflow_id)
20
+ return await asyncio.to_thread(self.get, workflow_id)
21
21
 
22
22
  def get(self, workflow_id: str) -> Workflow:
23
- return run_async_from_sync(self.aio_get, workflow_id)
23
+ with self.client() as client:
24
+ return self._wa(client).workflow_get(workflow_id)
24
25
 
25
- async def aio_list(
26
+ def list(
26
27
  self,
27
28
  workflow_name: str | None = None,
28
29
  limit: int | None = None,
29
30
  offset: int | None = None,
30
31
  ) -> WorkflowList:
31
- async with self.client() as client:
32
- return await self._wa(client).workflow_list(
32
+ with self.client() as client:
33
+ return self._wa(client).workflow_list(
33
34
  tenant=self.client_config.tenant_id,
34
35
  limit=limit,
35
36
  offset=offset,
36
37
  name=workflow_name,
37
38
  )
38
39
 
39
- def list(
40
+ async def aio_list(
40
41
  self,
41
42
  workflow_name: str | None = None,
42
43
  limit: int | None = None,
43
44
  offset: int | None = None,
44
45
  ) -> WorkflowList:
45
- return run_async_from_sync(self.aio_list, workflow_name, limit, offset)
46
+ return await asyncio.to_thread(self.list, workflow_name, limit, offset)
46
47
 
47
- async def aio_get_version(
48
+ def get_version(
48
49
  self, workflow_id: str, version: str | None = None
49
50
  ) -> WorkflowVersion:
50
- async with self.client() as client:
51
- return await self._wa(client).workflow_version_get(workflow_id, version)
51
+ with self.client() as client:
52
+ return self._wa(client).workflow_version_get(workflow_id, version)
52
53
 
53
- def get_version(
54
+ async def aio_get_version(
54
55
  self, workflow_id: str, version: str | None = None
55
56
  ) -> WorkflowVersion:
56
- return run_async_from_sync(self.aio_get_version, workflow_id, version)
57
+ return await asyncio.to_thread(self.get_version, workflow_id, version)
hatchet_sdk/hatchet.py CHANGED
@@ -6,7 +6,7 @@ from hatchet_sdk import Context, DurableContext
6
6
  from hatchet_sdk.client import Client
7
7
  from hatchet_sdk.clients.dispatcher.dispatcher import DispatcherClient
8
8
  from hatchet_sdk.clients.events import EventClient
9
- from hatchet_sdk.clients.run_event_listener import RunEventListenerClient
9
+ from hatchet_sdk.clients.listeners.run_event_listener import RunEventListenerClient
10
10
  from hatchet_sdk.config import ClientConfig
11
11
  from hatchet_sdk.features.cron import CronClient
12
12
  from hatchet_sdk.features.logs import LogsClient