hatchet-sdk 1.0.3__py3-none-any.whl → 1.1.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 (34) hide show
  1. hatchet_sdk/client.py +3 -16
  2. hatchet_sdk/clients/admin.py +7 -32
  3. hatchet_sdk/clients/dispatcher/action_listener.py +4 -10
  4. hatchet_sdk/clients/dispatcher/dispatcher.py +20 -5
  5. hatchet_sdk/clients/durable_event_listener.py +11 -12
  6. hatchet_sdk/clients/events.py +11 -15
  7. hatchet_sdk/clients/rest/models/tenant_resource.py +2 -0
  8. hatchet_sdk/clients/rest/models/workflow_runs_metrics.py +1 -5
  9. hatchet_sdk/clients/run_event_listener.py +55 -40
  10. hatchet_sdk/clients/v1/api_client.py +1 -38
  11. hatchet_sdk/clients/workflow_listener.py +9 -10
  12. hatchet_sdk/contracts/dispatcher_pb2_grpc.py +1 -1
  13. hatchet_sdk/contracts/events_pb2_grpc.py +1 -1
  14. hatchet_sdk/contracts/v1/dispatcher_pb2_grpc.py +1 -1
  15. hatchet_sdk/contracts/v1/workflows_pb2_grpc.py +1 -1
  16. hatchet_sdk/contracts/workflows_pb2_grpc.py +1 -1
  17. hatchet_sdk/features/cron.py +5 -4
  18. hatchet_sdk/features/logs.py +2 -1
  19. hatchet_sdk/features/metrics.py +4 -3
  20. hatchet_sdk/features/rate_limits.py +1 -1
  21. hatchet_sdk/features/runs.py +8 -7
  22. hatchet_sdk/features/scheduled.py +5 -4
  23. hatchet_sdk/features/workers.py +4 -3
  24. hatchet_sdk/features/workflows.py +4 -3
  25. hatchet_sdk/metadata.py +2 -2
  26. hatchet_sdk/runnables/standalone.py +3 -18
  27. hatchet_sdk/utils/aio.py +43 -0
  28. hatchet_sdk/worker/runner/run_loop_manager.py +1 -1
  29. hatchet_sdk/workflow_run.py +7 -20
  30. {hatchet_sdk-1.0.3.dist-info → hatchet_sdk-1.1.0.dist-info}/METADATA +1 -1
  31. {hatchet_sdk-1.0.3.dist-info → hatchet_sdk-1.1.0.dist-info}/RECORD +33 -33
  32. hatchet_sdk/utils/aio_utils.py +0 -18
  33. {hatchet_sdk-1.0.3.dist-info → hatchet_sdk-1.1.0.dist-info}/WHEEL +0 -0
  34. {hatchet_sdk-1.0.3.dist-info → hatchet_sdk-1.1.0.dist-info}/entry_points.txt +0 -0
@@ -33,7 +33,7 @@ if _version_not_supported:
33
33
  class EventsServiceStub(object):
34
34
  """Missing associated documentation comment in .proto file."""
35
35
 
36
- def __init__(self, channel):
36
+ def __init__(self, channel: grpc.Channel | grpc.aio.Channel) -> None:
37
37
  """Constructor.
38
38
 
39
39
  Args:
@@ -33,7 +33,7 @@ if _version_not_supported:
33
33
  class V1DispatcherStub(object):
34
34
  """Missing associated documentation comment in .proto file."""
35
35
 
36
- def __init__(self, channel):
36
+ def __init__(self, channel: grpc.Channel | grpc.aio.Channel) -> None:
37
37
  """Constructor.
38
38
 
39
39
  Args:
@@ -34,7 +34,7 @@ class AdminServiceStub(object):
34
34
  """AdminService represents a set of RPCs for admin management of tasks, workflows, etc.
35
35
  """
36
36
 
37
- def __init__(self, channel):
37
+ def __init__(self, channel: grpc.Channel | grpc.aio.Channel) -> None:
38
38
  """Constructor.
39
39
 
40
40
  Args:
@@ -34,7 +34,7 @@ class WorkflowServiceStub(object):
34
34
  """WorkflowService represents a set of RPCs for managing workflows.
35
35
  """
36
36
 
37
- def __init__(self, channel):
37
+ def __init__(self, channel: grpc.Channel | grpc.aio.Channel) -> None:
38
38
  """Constructor.
39
39
 
40
40
  Args:
@@ -18,6 +18,7 @@ from hatchet_sdk.clients.v1.api_client import (
18
18
  BaseRestClient,
19
19
  maybe_additional_metadata_to_kv,
20
20
  )
21
+ from hatchet_sdk.utils.aio import run_async_from_sync
21
22
  from hatchet_sdk.utils.typing import JSONSerializableMapping
22
23
 
23
24
 
@@ -121,7 +122,7 @@ class CronClient(BaseRestClient):
121
122
  input: JSONSerializableMapping,
122
123
  additional_metadata: JSONSerializableMapping,
123
124
  ) -> CronWorkflows:
124
- return self._run_async_from_sync(
125
+ return run_async_from_sync(
125
126
  self.aio_create,
126
127
  workflow_name,
127
128
  cron_name,
@@ -143,7 +144,7 @@ class CronClient(BaseRestClient):
143
144
  )
144
145
 
145
146
  def delete(self, cron_id: str) -> None:
146
- return self._run_async_from_sync(self.aio_delete, cron_id)
147
+ return run_async_from_sync(self.aio_delete, cron_id)
147
148
 
148
149
  async def aio_list(
149
150
  self,
@@ -204,7 +205,7 @@ class CronClient(BaseRestClient):
204
205
  Returns:
205
206
  CronWorkflowsList: A list of cron workflows.
206
207
  """
207
- return self._run_async_from_sync(
208
+ return run_async_from_sync(
208
209
  self.aio_list,
209
210
  offset=offset,
210
211
  limit=limit,
@@ -239,4 +240,4 @@ class CronClient(BaseRestClient):
239
240
  Returns:
240
241
  CronWorkflows: The requested cron workflow instance.
241
242
  """
242
- return self._run_async_from_sync(self.aio_get, cron_id)
243
+ return run_async_from_sync(self.aio_get, cron_id)
@@ -2,6 +2,7 @@ from hatchet_sdk.clients.rest.api.log_api import LogApi
2
2
  from hatchet_sdk.clients.rest.api_client import ApiClient
3
3
  from hatchet_sdk.clients.rest.models.v1_log_line_list import V1LogLineList
4
4
  from hatchet_sdk.clients.v1.api_client import BaseRestClient
5
+ from hatchet_sdk.utils.aio import run_async_from_sync
5
6
 
6
7
 
7
8
  class LogsClient(BaseRestClient):
@@ -13,4 +14,4 @@ class LogsClient(BaseRestClient):
13
14
  return await self._la(client).v1_log_line_list(task=task_run_id)
14
15
 
15
16
  def list(self, task_run_id: str) -> V1LogLineList:
16
- return self._run_async_from_sync(self.aio_list, task_run_id)
17
+ return run_async_from_sync(self.aio_list, task_run_id)
@@ -11,6 +11,7 @@ from hatchet_sdk.clients.v1.api_client import (
11
11
  BaseRestClient,
12
12
  maybe_additional_metadata_to_kv,
13
13
  )
14
+ from hatchet_sdk.utils.aio import run_async_from_sync
14
15
  from hatchet_sdk.utils.typing import JSONSerializableMapping
15
16
 
16
17
 
@@ -38,7 +39,7 @@ class MetricsClient(BaseRestClient):
38
39
  status: WorkflowRunStatus | None = None,
39
40
  group_key: str | None = None,
40
41
  ) -> WorkflowMetrics:
41
- return self._run_async_from_sync(
42
+ return run_async_from_sync(
42
43
  self.aio_get_workflow_metrics, workflow_id, status, group_key
43
44
  )
44
45
 
@@ -61,7 +62,7 @@ class MetricsClient(BaseRestClient):
61
62
  workflow_ids: list[str] | None = None,
62
63
  additional_metadata: JSONSerializableMapping | None = None,
63
64
  ) -> TenantQueueMetrics:
64
- return self._run_async_from_sync(
65
+ return run_async_from_sync(
65
66
  self.aio_get_queue_metrics, workflow_ids, additional_metadata
66
67
  )
67
68
 
@@ -72,4 +73,4 @@ class MetricsClient(BaseRestClient):
72
73
  )
73
74
 
74
75
  def get_task_metrics(self) -> TenantStepRunQueueMetrics:
75
- return self._run_async_from_sync(self.aio_get_task_metrics)
76
+ return run_async_from_sync(self.aio_get_task_metrics)
@@ -24,7 +24,7 @@ class RateLimitsClient(BaseRestClient):
24
24
  )
25
25
 
26
26
  conn = new_conn(self.client_config, False)
27
- client = WorkflowServiceStub(conn) # type: ignore[no-untyped-call]
27
+ client = WorkflowServiceStub(conn)
28
28
 
29
29
  client.PutRateLimit(
30
30
  v0_workflow_protos.PutRateLimitRequest(
@@ -19,6 +19,7 @@ from hatchet_sdk.clients.v1.api_client import (
19
19
  BaseRestClient,
20
20
  maybe_additional_metadata_to_kv,
21
21
  )
22
+ from hatchet_sdk.utils.aio import run_async_from_sync
22
23
  from hatchet_sdk.utils.typing import JSONSerializableMapping
23
24
 
24
25
 
@@ -93,7 +94,7 @@ class RunsClient(BaseRestClient):
93
94
  return await self._wra(client).v1_workflow_run_get(str(workflow_run_id))
94
95
 
95
96
  def get(self, workflow_run_id: str) -> V1WorkflowRunDetails:
96
- return self._run_async_from_sync(self.aio_get, workflow_run_id)
97
+ return run_async_from_sync(self.aio_get, workflow_run_id)
97
98
 
98
99
  async def aio_list(
99
100
  self,
@@ -138,7 +139,7 @@ class RunsClient(BaseRestClient):
138
139
  worker_id: str | None = None,
139
140
  parent_task_external_id: str | None = None,
140
141
  ) -> V1TaskSummaryList:
141
- return self._run_async_from_sync(
142
+ return run_async_from_sync(
142
143
  self.aio_list,
143
144
  since=since,
144
145
  only_tasks=only_tasks,
@@ -174,7 +175,7 @@ class RunsClient(BaseRestClient):
174
175
  input: JSONSerializableMapping,
175
176
  additional_metadata: JSONSerializableMapping = {},
176
177
  ) -> V1WorkflowRunDetails:
177
- return self._run_async_from_sync(
178
+ return run_async_from_sync(
178
179
  self.aio_create, workflow_name, input, additional_metadata
179
180
  )
180
181
 
@@ -182,7 +183,7 @@ class RunsClient(BaseRestClient):
182
183
  await self.aio_bulk_replay(opts=BulkCancelReplayOpts(ids=[run_id]))
183
184
 
184
185
  def replay(self, run_id: str) -> None:
185
- return self._run_async_from_sync(self.aio_replay, run_id)
186
+ return run_async_from_sync(self.aio_replay, run_id)
186
187
 
187
188
  async def aio_bulk_replay(self, opts: BulkCancelReplayOpts) -> None:
188
189
  async with self.client() as client:
@@ -192,13 +193,13 @@ class RunsClient(BaseRestClient):
192
193
  )
193
194
 
194
195
  def bulk_replay(self, opts: BulkCancelReplayOpts) -> None:
195
- return self._run_async_from_sync(self.aio_bulk_replay, opts)
196
+ return run_async_from_sync(self.aio_bulk_replay, opts)
196
197
 
197
198
  async def aio_cancel(self, run_id: str) -> None:
198
199
  await self.aio_bulk_cancel(opts=BulkCancelReplayOpts(ids=[run_id]))
199
200
 
200
201
  def cancel(self, run_id: str) -> None:
201
- return self._run_async_from_sync(self.aio_cancel, run_id)
202
+ return run_async_from_sync(self.aio_cancel, run_id)
202
203
 
203
204
  async def aio_bulk_cancel(self, opts: BulkCancelReplayOpts) -> None:
204
205
  async with self.client() as client:
@@ -208,7 +209,7 @@ class RunsClient(BaseRestClient):
208
209
  )
209
210
 
210
211
  def bulk_cancel(self, opts: BulkCancelReplayOpts) -> None:
211
- return self._run_async_from_sync(self.aio_bulk_cancel, opts)
212
+ return run_async_from_sync(self.aio_bulk_cancel, opts)
212
213
 
213
214
  async def aio_get_result(self, run_id: str) -> JSONSerializableMapping:
214
215
  details = await self.aio_get(run_id)
@@ -22,6 +22,7 @@ from hatchet_sdk.clients.v1.api_client import (
22
22
  BaseRestClient,
23
23
  maybe_additional_metadata_to_kv,
24
24
  )
25
+ from hatchet_sdk.utils.aio import run_async_from_sync
25
26
  from hatchet_sdk.utils.typing import JSONSerializableMapping
26
27
 
27
28
 
@@ -82,7 +83,7 @@ class ScheduledClient(BaseRestClient):
82
83
  ScheduledWorkflows: The created scheduled workflow instance.
83
84
  """
84
85
 
85
- return self._run_async_from_sync(
86
+ return run_async_from_sync(
86
87
  self.aio_create,
87
88
  workflow_name,
88
89
  trigger_at,
@@ -104,7 +105,7 @@ class ScheduledClient(BaseRestClient):
104
105
  )
105
106
 
106
107
  def delete(self, scheduled_id: str) -> None:
107
- self._run_async_from_sync(self.aio_delete, scheduled_id)
108
+ run_async_from_sync(self.aio_delete, scheduled_id)
108
109
 
109
110
  async def aio_list(
110
111
  self,
@@ -175,7 +176,7 @@ class ScheduledClient(BaseRestClient):
175
176
  Returns:
176
177
  List[ScheduledWorkflows]: A list of scheduled workflows matching the criteria.
177
178
  """
178
- return self._run_async_from_sync(
179
+ return run_async_from_sync(
179
180
  self.aio_list,
180
181
  offset=offset,
181
182
  limit=limit,
@@ -214,4 +215,4 @@ class ScheduledClient(BaseRestClient):
214
215
  Returns:
215
216
  ScheduledWorkflows: The requested scheduled workflow instance.
216
217
  """
217
- return self._run_async_from_sync(self.aio_get, scheduled_id)
218
+ return run_async_from_sync(self.aio_get, scheduled_id)
@@ -4,6 +4,7 @@ from hatchet_sdk.clients.rest.models.update_worker_request import UpdateWorkerRe
4
4
  from hatchet_sdk.clients.rest.models.worker import Worker
5
5
  from hatchet_sdk.clients.rest.models.worker_list import WorkerList
6
6
  from hatchet_sdk.clients.v1.api_client import BaseRestClient
7
+ from hatchet_sdk.utils.aio import run_async_from_sync
7
8
 
8
9
 
9
10
  class WorkersClient(BaseRestClient):
@@ -15,7 +16,7 @@ class WorkersClient(BaseRestClient):
15
16
  return await self._wa(client).worker_get(worker_id)
16
17
 
17
18
  def get(self, worker_id: str) -> Worker:
18
- return self._run_async_from_sync(self.aio_get, worker_id)
19
+ return run_async_from_sync(self.aio_get, worker_id)
19
20
 
20
21
  async def aio_list(
21
22
  self,
@@ -28,7 +29,7 @@ class WorkersClient(BaseRestClient):
28
29
  def list(
29
30
  self,
30
31
  ) -> WorkerList:
31
- return self._run_async_from_sync(self.aio_list)
32
+ return run_async_from_sync(self.aio_list)
32
33
 
33
34
  async def aio_update(self, worker_id: str, opts: UpdateWorkerRequest) -> Worker:
34
35
  async with self.client() as client:
@@ -38,4 +39,4 @@ class WorkersClient(BaseRestClient):
38
39
  )
39
40
 
40
41
  def update(self, worker_id: str, opts: UpdateWorkerRequest) -> Worker:
41
- return self._run_async_from_sync(self.aio_update, worker_id, opts)
42
+ return run_async_from_sync(self.aio_update, worker_id, opts)
@@ -5,6 +5,7 @@ from hatchet_sdk.clients.rest.models.workflow import Workflow
5
5
  from hatchet_sdk.clients.rest.models.workflow_list import WorkflowList
6
6
  from hatchet_sdk.clients.rest.models.workflow_version import WorkflowVersion
7
7
  from hatchet_sdk.clients.v1.api_client import BaseRestClient
8
+ from hatchet_sdk.utils.aio import run_async_from_sync
8
9
 
9
10
 
10
11
  class WorkflowsClient(BaseRestClient):
@@ -19,7 +20,7 @@ class WorkflowsClient(BaseRestClient):
19
20
  return await self._wa(client).workflow_get(workflow_id)
20
21
 
21
22
  def get(self, workflow_id: str) -> Workflow:
22
- return self._run_async_from_sync(self.aio_get, workflow_id)
23
+ return run_async_from_sync(self.aio_get, workflow_id)
23
24
 
24
25
  async def aio_list(
25
26
  self,
@@ -41,7 +42,7 @@ class WorkflowsClient(BaseRestClient):
41
42
  limit: int | None = None,
42
43
  offset: int | None = None,
43
44
  ) -> WorkflowList:
44
- return self._run_async_from_sync(self.aio_list, workflow_name, limit, offset)
45
+ return run_async_from_sync(self.aio_list, workflow_name, limit, offset)
45
46
 
46
47
  async def aio_get_version(
47
48
  self, workflow_id: str, version: str | None = None
@@ -52,4 +53,4 @@ class WorkflowsClient(BaseRestClient):
52
53
  def get_version(
53
54
  self, workflow_id: str, version: str | None = None
54
55
  ) -> WorkflowVersion:
55
- return self._run_async_from_sync(self.aio_get_version, workflow_id, version)
56
+ return run_async_from_sync(self.aio_get_version, workflow_id, version)
hatchet_sdk/metadata.py CHANGED
@@ -1,2 +1,2 @@
1
- def get_metadata(token: str) -> list[tuple[str, str]]:
2
- return [("authorization", "bearer " + token)]
1
+ def get_metadata(token: str) -> tuple[tuple[str, str]]:
2
+ return (("authorization", "bearer " + token),)
@@ -1,4 +1,3 @@
1
- import asyncio
2
1
  from datetime import datetime
3
2
  from typing import Any, Generic, cast, get_type_hints
4
3
 
@@ -12,7 +11,7 @@ from hatchet_sdk.contracts.workflows_pb2 import WorkflowVersion
12
11
  from hatchet_sdk.runnables.task import Task
13
12
  from hatchet_sdk.runnables.types import EmptyModel, R, TWorkflowInput
14
13
  from hatchet_sdk.runnables.workflow import BaseWorkflow, Workflow
15
- from hatchet_sdk.utils.aio_utils import get_active_event_loop
14
+ from hatchet_sdk.utils.aio import run_async_from_sync
16
15
  from hatchet_sdk.utils.typing import JSONSerializableMapping, is_basemodel_subclass
17
16
  from hatchet_sdk.workflow_run import WorkflowRunRef
18
17
 
@@ -27,25 +26,11 @@ class TaskRunRef(Generic[TWorkflowInput, R]):
27
26
  self._wrr = workflow_run_ref
28
27
 
29
28
  async def aio_result(self) -> R:
30
- result = await self._wrr.workflow_listener.result(self._wrr.workflow_run_id)
29
+ result = await self._wrr.workflow_listener.aio_result(self._wrr.workflow_run_id)
31
30
  return self._s._extract_result(result)
32
31
 
33
32
  def result(self) -> R:
34
- coro = self._wrr.workflow_listener.result(self._wrr.workflow_run_id)
35
-
36
- loop = get_active_event_loop()
37
-
38
- if loop is None:
39
- loop = asyncio.new_event_loop()
40
- asyncio.set_event_loop(loop)
41
- try:
42
- result = loop.run_until_complete(coro)
43
- finally:
44
- asyncio.set_event_loop(None)
45
- else:
46
- result = loop.run_until_complete(coro)
47
-
48
- return self._s._extract_result(result)
33
+ return run_async_from_sync(self.aio_result)
49
34
 
50
35
 
51
36
  class Standalone(BaseWorkflow[TWorkflowInput], Generic[TWorkflowInput, R]):
@@ -0,0 +1,43 @@
1
+ import asyncio
2
+ from concurrent.futures import ThreadPoolExecutor
3
+ from typing import Callable, Coroutine, ParamSpec, TypeVar
4
+
5
+ P = ParamSpec("P")
6
+ R = TypeVar("R")
7
+ Y = TypeVar("Y")
8
+ S = TypeVar("S")
9
+
10
+
11
+ def _run_async_function_do_not_use_directly(
12
+ async_func: Callable[P, Coroutine[Y, S, R]],
13
+ *args: P.args,
14
+ **kwargs: P.kwargs,
15
+ ) -> R:
16
+ loop = asyncio.new_event_loop()
17
+ asyncio.set_event_loop(loop)
18
+ try:
19
+ return loop.run_until_complete(async_func(*args, **kwargs))
20
+ finally:
21
+ loop.close()
22
+
23
+
24
+ def run_async_from_sync(
25
+ async_func: Callable[P, Coroutine[Y, S, R]],
26
+ *args: P.args,
27
+ **kwargs: P.kwargs,
28
+ ) -> R:
29
+ try:
30
+ loop = asyncio.get_event_loop()
31
+ except RuntimeError:
32
+ loop = None
33
+
34
+ if loop and loop.is_running():
35
+ return loop.run_until_complete(async_func(*args, **kwargs))
36
+ else:
37
+ with ThreadPoolExecutor() as executor:
38
+ future = executor.submit(
39
+ lambda: _run_async_function_do_not_use_directly(
40
+ async_func, *args, **kwargs
41
+ )
42
+ )
43
+ return future.result()
@@ -60,7 +60,7 @@ class WorkerActionRunLoopManager:
60
60
 
61
61
  async def aio_start(self, retry_count: int = 1) -> None:
62
62
  await capture_logs(
63
- self.client.logInterceptor,
63
+ self.client.log_interceptor,
64
64
  self.client.event,
65
65
  self._async_start,
66
66
  )(retry_count=retry_count)
@@ -1,4 +1,3 @@
1
- import asyncio
2
1
  from typing import Any
3
2
 
4
3
  from hatchet_sdk.clients.run_event_listener import (
@@ -6,19 +5,19 @@ from hatchet_sdk.clients.run_event_listener import (
6
5
  RunEventListenerClient,
7
6
  )
8
7
  from hatchet_sdk.clients.workflow_listener import PooledWorkflowRunListener
9
- from hatchet_sdk.utils.aio_utils import get_active_event_loop
8
+ from hatchet_sdk.config import ClientConfig
9
+ from hatchet_sdk.utils.aio import run_async_from_sync
10
10
 
11
11
 
12
12
  class WorkflowRunRef:
13
13
  def __init__(
14
14
  self,
15
15
  workflow_run_id: str,
16
- workflow_listener: PooledWorkflowRunListener,
17
- workflow_run_event_listener: RunEventListenerClient,
16
+ config: ClientConfig,
18
17
  ):
19
18
  self.workflow_run_id = workflow_run_id
20
- self.workflow_listener = workflow_listener
21
- self.workflow_run_event_listener = workflow_run_event_listener
19
+ self.workflow_listener = PooledWorkflowRunListener(config)
20
+ self.workflow_run_event_listener = RunEventListenerClient(config=config)
22
21
 
23
22
  def __str__(self) -> str:
24
23
  return self.workflow_run_id
@@ -27,19 +26,7 @@ class WorkflowRunRef:
27
26
  return self.workflow_run_event_listener.stream(self.workflow_run_id)
28
27
 
29
28
  async def aio_result(self) -> dict[str, Any]:
30
- return await self.workflow_listener.result(self.workflow_run_id)
29
+ return await self.workflow_listener.aio_result(self.workflow_run_id)
31
30
 
32
31
  def result(self) -> dict[str, Any]:
33
- coro = self.workflow_listener.result(self.workflow_run_id)
34
-
35
- loop = get_active_event_loop()
36
-
37
- if loop is None:
38
- loop = asyncio.new_event_loop()
39
- asyncio.set_event_loop(loop)
40
- try:
41
- return loop.run_until_complete(coro)
42
- finally:
43
- asyncio.set_event_loop(None)
44
- else:
45
- return loop.run_until_complete(coro)
32
+ return run_async_from_sync(self.aio_result)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hatchet-sdk
3
- Version: 1.0.3
3
+ Version: 1.1.0
4
4
  Summary:
5
5
  Author: Alexander Belanger
6
6
  Author-email: alexander@hatchet.run
@@ -1,11 +1,11 @@
1
1
  hatchet_sdk/__init__.py,sha256=o_06wLLKCKRq4uQuCF62yDRb8hTQYYcqPC3FIDNHxuQ,10002
2
- hatchet_sdk/client.py,sha256=nfLv2jzv7XlL9VzQSnfyCdtK4ew0zanUgsoXC0KEtY0,2255
3
- hatchet_sdk/clients/admin.py,sha256=C-a1kkF2OCR4LOj489uIg_vHAEPiiG3LjyKxU7Y085w,16638
4
- hatchet_sdk/clients/dispatcher/action_listener.py,sha256=8enip982Fkb_8blco1ixahmuaKwxsahx06wDWte_4MU,16595
5
- hatchet_sdk/clients/dispatcher/dispatcher.py,sha256=GMb4ljE-gSTf5RkpmRboPXCMncJKAJ6KKERGcf1nz48,6993
6
- hatchet_sdk/clients/durable_event_listener.py,sha256=XzXECjulUWSsu6wiWYKogqKPGa1gwcrKFtr2SJ4xSok,11850
2
+ hatchet_sdk/client.py,sha256=lApcV1-qlvIdiHyGrQJAIlT9qzP96I0mQ2STZ1ZV_2g,1940
3
+ hatchet_sdk/clients/admin.py,sha256=cc-TyZL6uLz3MGpdVKYziiZlmi29twP8MUJ66CboLtU,15160
4
+ hatchet_sdk/clients/dispatcher/action_listener.py,sha256=FogjHd6vhj4HeQs--Z-99kPwCfaETo1-EcotjdIkrig,16266
5
+ hatchet_sdk/clients/dispatcher/dispatcher.py,sha256=XOoUPShsVoEb7iKP9f_HC_H4128dRjclTtLQB7EvGKQ,7544
6
+ hatchet_sdk/clients/durable_event_listener.py,sha256=J5Tg8niikms-tEfB8wps_wgsPF7Fx-pYhYExd0lJo7Y,11791
7
7
  hatchet_sdk/clients/event_ts.py,sha256=tbWLz3NXrwMyIoEm0Q2TfitF5cNEpo3k42jWKciOK8A,1082
8
- hatchet_sdk/clients/events.py,sha256=yw8Goyh0KUk9bSSfTXjaGhF4gtxOG1T0wZOmYBbqPpI,5565
8
+ hatchet_sdk/clients/events.py,sha256=sKqzGwkrW_AKWW0Q_rxfwo9jXV5EUpLx7fTQvCNHaVo,5443
9
9
  hatchet_sdk/clients/rest/__init__.py,sha256=Bee4HPFiMGDHx5xbHkxxVbLBz_mDgSZUqh-nIhvsD1k,16511
10
10
  hatchet_sdk/clients/rest/api/__init__.py,sha256=XWlkH9iwpQvJHDqKe7kWl3MUzcTOaH-JiFZbki_fg_U,1200
11
11
  hatchet_sdk/clients/rest/api/api_token_api.py,sha256=C10FEIHHGBpwq-bIKkrBhvPlg6az4aHlREWEUlJHWl0,33577
@@ -130,7 +130,7 @@ hatchet_sdk/clients/rest/models/tenant_member.py,sha256=DL5J-osK7A6K7DNQXIg3F4s-
130
130
  hatchet_sdk/clients/rest/models/tenant_member_list.py,sha256=b-8pU27TUqkcEHHrRygQ-fLXaHzR5HGRsh_CQVt2N4g,3487
131
131
  hatchet_sdk/clients/rest/models/tenant_member_role.py,sha256=NGzfU-h6TBOgCh9gRpFBONJ3C9Dovxj_8ozYM3QnCVM,692
132
132
  hatchet_sdk/clients/rest/models/tenant_queue_metrics.py,sha256=cTZ_ccGXM9XDwksD-RSJt5Ia5h9z1F0A-GqxYjCc2eA,3738
133
- hatchet_sdk/clients/rest/models/tenant_resource.py,sha256=s6xOzDdWSbXGemKvpx1h6njOZ4DPwWjA2BaliIxH5NI,744
133
+ hatchet_sdk/clients/rest/models/tenant_resource.py,sha256=oQX7-Ekg_NAOHWgs59kmxfD8kIzTk5v7-jYtSquEnPg,802
134
134
  hatchet_sdk/clients/rest/models/tenant_resource_limit.py,sha256=iVkEliSDbLcdi1EYdh9jfA66Ft1bhCcrIQ2ZC9JgGe8,4236
135
135
  hatchet_sdk/clients/rest/models/tenant_resource_policy.py,sha256=laL2UxMLkn3CPULnK3og2tLxoLaCvdcqDYi4er9cAQo,3092
136
136
  hatchet_sdk/clients/rest/models/tenant_step_run_queue_metrics.py,sha256=Qtn8XWyOQCR8ZwBuaZp7LXg8D_RLxxZ6ZFyjnFtai5g,2417
@@ -200,7 +200,7 @@ hatchet_sdk/clients/rest/models/workflow_run_shape_item_for_workflow_run_details
200
200
  hatchet_sdk/clients/rest/models/workflow_run_status.py,sha256=X_jDDvq3GhjTNvdGy_NXUVNlUiIFrwbsQTw9kG_7YPs,805
201
201
  hatchet_sdk/clients/rest/models/workflow_run_triggered_by.py,sha256=j6Ob3ICDL2wqZuFE2Bu1wuusH75HPwH0S53xpjQaRHY,3545
202
202
  hatchet_sdk/clients/rest/models/workflow_runs_cancel_request.py,sha256=57o2jz6LN3PB2gi2SH_PBmyyhg5_94uNx2Shv_EpiSE,2537
203
- hatchet_sdk/clients/rest/models/workflow_runs_metrics.py,sha256=7CfcXlvHNny8Q496CR6iW_DBjyefgN4NZ3QhH8IhX3k,2865
203
+ hatchet_sdk/clients/rest/models/workflow_runs_metrics.py,sha256=VokrmzO64TRSpPhLDIbsoBRfX9c7-9tKWvzY0wO7p-4,2745
204
204
  hatchet_sdk/clients/rest/models/workflow_runs_metrics_counts.py,sha256=8pe_pI8UXe0YeMaOTRwrog3_Gq1z0LR2kLtq9hwS28g,3217
205
205
  hatchet_sdk/clients/rest/models/workflow_tag.py,sha256=9aPXHeUYW6FV-6dB-I5Ex0P5g82YNePEuy8-VG5Ecrs,2494
206
206
  hatchet_sdk/clients/rest/models/workflow_trigger_cron_ref.py,sha256=_6r0laWazB6r_eC1Sc7RZOYACWzhnItasKkMtkqu4Eg,2498
@@ -214,9 +214,9 @@ hatchet_sdk/clients/rest/models/workflow_version_meta.py,sha256=TW4R7bAuYAg_LraN
214
214
  hatchet_sdk/clients/rest/models/workflow_workers_count.py,sha256=qhzqfvjjIDyARkiiLGluMIqEmqO-diHTsjlu0Doi0yg,2875
215
215
  hatchet_sdk/clients/rest/rest.py,sha256=NbmK_NvoL3-g6Oul6dsZgJO3XvCWtw2V0qAbr8pGfQE,6967
216
216
  hatchet_sdk/clients/rest/tenacity_utils.py,sha256=n6QvwuGwinLQpiWNU5GxrDNhFBE8_wZdg3WNur21rJ0,1055
217
- hatchet_sdk/clients/run_event_listener.py,sha256=12o2P8bi3NUGhzPi7UM9d9D-FX94cr5qyNIEWIweFD0,9960
218
- hatchet_sdk/clients/v1/api_client.py,sha256=0FmhJIjN5Y4CWEsIWt0XzoOmIFUjPwFOAG0TI-fVqHI,2412
219
- hatchet_sdk/clients/workflow_listener.py,sha256=sdeCN3z1kMurG_5rLoT3-rVUJKrd3XJerVPnMfR6U4U,10470
217
+ hatchet_sdk/clients/run_event_listener.py,sha256=rIjBLRF7d7FBoEq7RKbmbOA84lX_hHSU26trwnthqV8,10230
218
+ hatchet_sdk/clients/v1/api_client.py,sha256=L5dbAvIJMnoe9oiUuwLJx8Atn_NTpCctGJ_cXxE-KFs,1247
219
+ hatchet_sdk/clients/workflow_listener.py,sha256=x6FQ8d786MiubARPG0B92L3Jbs4Ve0CQJFx_udJIB3s,10522
220
220
  hatchet_sdk/config.py,sha256=piNrTA4EuYNNl0FpsFWceOuIOps-6R95PWZomQWOMBA,3426
221
221
  hatchet_sdk/connection.py,sha256=B5gT5NL9BBB5-l9U_cN6pMlraQk880rEYMnqaK_dgL0,2590
222
222
  hatchet_sdk/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -224,44 +224,44 @@ hatchet_sdk/context/context.py,sha256=ViVd-aiKy-dIcCmjVegNFb_vEJhqQ-Q3Zh9llU7nlX
224
224
  hatchet_sdk/context/worker_context.py,sha256=OVcEWvdT_Kpd0nlg61VAPUgIPSFzSLs0aSrXWj-1GX4,974
225
225
  hatchet_sdk/contracts/dispatcher_pb2.py,sha256=B35F3XQQkk05UA84nuZOIFtiydgPbB8gA5FhvNvSqb0,14414
226
226
  hatchet_sdk/contracts/dispatcher_pb2.pyi,sha256=JLtc615N9vNDRtQoUVynclPBbgIsRhbikcrT8b7Z-TM,18336
227
- hatchet_sdk/contracts/dispatcher_pb2_grpc.py,sha256=nO6Vvy-WVcF5TCYzi936Yl9tE06UtbSc1c8rgDv2-mM,24715
227
+ hatchet_sdk/contracts/dispatcher_pb2_grpc.py,sha256=zJ4c0Z0-iJngrVEw51vmwQgP1c8aZhAkjcUJUpH6JQ0,24756
228
228
  hatchet_sdk/contracts/events_pb2.py,sha256=sda_dHK2N7g8kmaZSNqfvUSvHaa-ro9IBw0Diu1PCE4,4074
229
229
  hatchet_sdk/contracts/events_pb2.pyi,sha256=eoHvNI5gY98ZfFleiynbtIz3SiW_X49ggMBOlOgAP74,4014
230
- hatchet_sdk/contracts/events_pb2_grpc.py,sha256=2NXI6Ym1S04lls9hlVjpqMP_MUih0sY1WywP10eMXVA,10236
230
+ hatchet_sdk/contracts/events_pb2_grpc.py,sha256=XXEaAwVzGbqqPHIk0E2hTlZXmcGE-E5W3AaYWW8NBHA,10277
231
231
  hatchet_sdk/contracts/v1/dispatcher_pb2.py,sha256=PpMvh5ilrgNIR6DQSC-LS17xuXMknbT5Va2G7beqEfk,2546
232
232
  hatchet_sdk/contracts/v1/dispatcher_pb2.pyi,sha256=hjfQWs1jxBdF04IpJzS8sGpyuLbOjAims_PP_3sFVjk,1679
233
- hatchet_sdk/contracts/v1/dispatcher_pb2_grpc.py,sha256=AkGO18Wma0eEDEJSAh32DOBi8fXF5TK5KJA79Twv4QA,5758
233
+ hatchet_sdk/contracts/v1/dispatcher_pb2_grpc.py,sha256=alnJTOJmf9AWr5qvqX0ivqEm1IlFfEKxJJqzPQmxd3A,5799
234
234
  hatchet_sdk/contracts/v1/shared/condition_pb2.py,sha256=dLBp9p48xEgDIOUU3lWn9wb5HWlQShaMp-1-_OAbKZY,3194
235
235
  hatchet_sdk/contracts/v1/shared/condition_pb2.pyi,sha256=OZrUydy3wmHIoZjUQ5wrVTEaayTQlIZhfwJ8KyS26t8,3873
236
236
  hatchet_sdk/contracts/v1/shared/condition_pb2_grpc.py,sha256=-LQAfCTGRcj81g8ij2CUeuBDNKHTO3JojkByh3ay0QY,1136
237
237
  hatchet_sdk/contracts/v1/workflows_pb2.py,sha256=auxcW4LHwdMYvCDb6mknJ5P9TcXTsNznO2aIney3u7M,8905
238
238
  hatchet_sdk/contracts/v1/workflows_pb2.pyi,sha256=2widA1ESas3uIFsvQgQYVCdqO_rwpbtH7gxcCQTNgfo,11581
239
- hatchet_sdk/contracts/v1/workflows_pb2_grpc.py,sha256=KaRIG3-jC4DCaBLXbsoiF3zq4Y6Cb2VSpYO_BH98qpc,9258
239
+ hatchet_sdk/contracts/v1/workflows_pb2_grpc.py,sha256=XytYpV2kJQZT8iAs14z4SWsv-90ApfoFUEc8bRb5WHk,9299
240
240
  hatchet_sdk/contracts/workflows_pb2.py,sha256=9j6-YMrtgp2yxX-BePwyaqxuFhrI6OftoZSR53JPDWw,11739
241
241
  hatchet_sdk/contracts/workflows_pb2.pyi,sha256=2r5d4DWaR0kwY8jKSzcffTAMMlWrusRXCziE_03SFYc,15434
242
- hatchet_sdk/contracts/workflows_pb2_grpc.py,sha256=ekBhwoDD6Hrad58WUGCUeNES41qxOobBR4rDI_M7ET8,10778
243
- hatchet_sdk/features/cron.py,sha256=DsgRXgjM3p0CgeZiaVvVXIJpIVEabKm_QbC-a43ADHE,9188
244
- hatchet_sdk/features/logs.py,sha256=JzVohdtzZC7P5DHsK90XVQwnrrwfyIYB9IdDRw1JgEE,676
245
- hatchet_sdk/features/metrics.py,sha256=phAhQSRqqaoPusbX5Odg13bFNQbnJIZeU9nHtJCql68,2861
246
- hatchet_sdk/features/rate_limits.py,sha256=4VqbPzLY5pZMrZBPH4n2-mNbHxJMPbhn0rODsGwnuhA,1554
247
- hatchet_sdk/features/runs.py,sha256=YunX58qF_buZXC9iYki289hrqnilD2QV9PYiKDlKl4k,8133
248
- hatchet_sdk/features/scheduled.py,sha256=0Qoa9SikuJviMTtw86m6iGHa55eSqtD6OihOEntRmG0,8870
249
- hatchet_sdk/features/workers.py,sha256=-o5f8k_AqHPtDbJN47KPYc_XVQI672ZnNGEPVIfEv7o,1553
250
- hatchet_sdk/features/workflows.py,sha256=MoC5rL3sbuYgBDri2XigaeIUOGoN0frNVcL6O7243Kg,2107
242
+ hatchet_sdk/contracts/workflows_pb2_grpc.py,sha256=2V8E72DlJx5qlH2yiQpVCu5cQbKUba5X7T1yNrQDF_s,10819
243
+ hatchet_sdk/features/cron.py,sha256=VRq5w15QpVYMkvkyIUgBO77IQpASbTxyplbgGukdmE8,9218
244
+ hatchet_sdk/features/logs.py,sha256=Fm3l0f2VUlQ_YqYrKqHYviK5g_j9_wUEW6J_Ax9cYzc,724
245
+ hatchet_sdk/features/metrics.py,sha256=Lmmu-3TITHyGGx5moA_emuzy-ZrbJhXLBDzR7Fm73pk,2897
246
+ hatchet_sdk/features/rate_limits.py,sha256=Df-DBFRpT1MHRf7qcvD4YJseNuFJUp5X9aO72yLkW6Q,1521
247
+ hatchet_sdk/features/runs.py,sha256=th2czurM9uawOlcm48MBalvQTqSmfVhOMcAbHjPH_hk,8145
248
+ hatchet_sdk/features/scheduled.py,sha256=MfUrUOYNWewoX6GJ4YV2UWmKrxVJrgj4fX8wCxkkgv0,8900
249
+ hatchet_sdk/features/workers.py,sha256=HpUX8LyvFfseNn677tTvQukNqyD90-uWPhdf10znUkA,1589
250
+ hatchet_sdk/features/workflows.py,sha256=4hZgk7vhRhMK8wb2K3b9617TolnxRkeYL35aeLWHY2c,2143
251
251
  hatchet_sdk/hatchet.py,sha256=tmTGNRKcpLZlVquqMPmvS14OCgcMsYEsGTeFpKay5NE,22933
252
252
  hatchet_sdk/labels.py,sha256=nATgxWE3lFxRTnfISEpoIRLGbMfAZsHF4lZTuG4Mfic,182
253
253
  hatchet_sdk/logger.py,sha256=5uOr52T4mImSQm1QvWT8HvZFK5WfPNh3Y1cBQZRFgUQ,333
254
- hatchet_sdk/metadata.py,sha256=QzIcTlOGhFd-O3BF2f8sPYESPFFN9387Zi8-OdKDntA,105
254
+ hatchet_sdk/metadata.py,sha256=XkRbhnghJJGCdVvF-uzyGBcNaTqpeQ3uiQvNNP1wyBc,107
255
255
  hatchet_sdk/opentelemetry/instrumentor.py,sha256=KYZG1koVv4704kgr7YJ-M3QqRcTrZI2T1fHh0NCygoo,14038
256
256
  hatchet_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
257
257
  hatchet_sdk/rate_limit.py,sha256=TwbCuggiZaWpYuo4mjVLlE-z1OfQ2mRBiVvCSaG3lv4,3919
258
258
  hatchet_sdk/runnables/contextvars.py,sha256=6MDocAMmlyiRW37oQ1jyx10tAlJs-xgDjR3xPoPz05g,426
259
- hatchet_sdk/runnables/standalone.py,sha256=DIj-E7RlZmVcUIAyd7ck9YcOt5MgladWWelKatLbpM4,6442
259
+ hatchet_sdk/runnables/standalone.py,sha256=2jgUgILYIyHSYy3S6M6n2QAQ7UyvxfSQk0DDRar5RpI,5996
260
260
  hatchet_sdk/runnables/task.py,sha256=jQiRPeE9EbIzNOxv6hkmJ8RqyVR7hMLXX4cnGRl_GF8,4832
261
261
  hatchet_sdk/runnables/types.py,sha256=JWo4hkYb2XYoktIFVvnqud6Ywmo7AHMK_upYpdNmij0,4235
262
262
  hatchet_sdk/runnables/workflow.py,sha256=lRkzDTYIsQl_3RPpWGKFKzsanEtUr6DYCfXp3hTwExA,29133
263
263
  hatchet_sdk/token.py,sha256=KjIiInwG5Kqd_FO4BSW1x_5Uc7PFbnzIVJqr50-ZldE,779
264
- hatchet_sdk/utils/aio_utils.py,sha256=PSspZGyUKJsdluB_a8jjfmAVXCmPJYlSQ4mUMa21PTk,484
264
+ hatchet_sdk/utils/aio.py,sha256=A9pKNn8eAKUeinY2uBkJn4jdrYI5vAw_A-gzz04xdvQ,1122
265
265
  hatchet_sdk/utils/backoff.py,sha256=6B5Rb5nLKw_TqqgpJMYjIBV1PTTtbOMRZCveisVhg_I,353
266
266
  hatchet_sdk/utils/proto_enums.py,sha256=0UybwE3s7TcqmzoQSO8YnhgAKOS8WZXsyPchB8-eksw,1247
267
267
  hatchet_sdk/utils/timedelta_to_expression.py,sha256=n5jIxlcswN9GwFPjktuMceedekzWWT6X7U6gbsZciIQ,455
@@ -500,12 +500,12 @@ hatchet_sdk/v0/workflow_run.py,sha256=jsEZprXshrSV7i_TtL5uoCL03D18zQ3NeJCq7mp97D
500
500
  hatchet_sdk/waits.py,sha256=mBJVOjvTJfhXCngyIfNccYFtg7eiFM2B2n7lcg90S3A,3327
501
501
  hatchet_sdk/worker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
502
502
  hatchet_sdk/worker/action_listener_process.py,sha256=OslEFdj0VZvC65yPB8vNqrLQXQYeRxrfjz7XPzZ8AcA,11455
503
- hatchet_sdk/worker/runner/run_loop_manager.py,sha256=uLzNCKy0yHEX8IosDCQvA8TqkIOd14BaAFFArOaPxzA,3970
503
+ hatchet_sdk/worker/runner/run_loop_manager.py,sha256=GKIH2ncGdM7nwtPn--8f6dAxQqBQv6O82mZYCEM5qnk,3971
504
504
  hatchet_sdk/worker/runner/runner.py,sha256=IIvjrE1sJlF1oEdMTk7s15-CjTyCu8om6yEFia2XcdE,16434
505
505
  hatchet_sdk/worker/runner/utils/capture_logs.py,sha256=nHRPSiDBqzhObM7i2X7t03OupVFnE7kQBdR2Ckgg-2w,2709
506
506
  hatchet_sdk/worker/worker.py,sha256=qyHs64H-grF9HR1CgH7MlnoDmTQ8mm4d8basx-ZDyWc,14490
507
- hatchet_sdk/workflow_run.py,sha256=JTLOuGyEat4OvMM3h55WrX0aFFpqs5YtK7YJxTMC92I,1428
508
- hatchet_sdk-1.0.3.dist-info/METADATA,sha256=Ltt_FG3crdnhRIB2CZLjTSKSpM6ca06QiylFWgBHQfM,1876
509
- hatchet_sdk-1.0.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
510
- hatchet_sdk-1.0.3.dist-info/entry_points.txt,sha256=5mTp_AsCWK5raiVxP_MU9eBCgkRGl4OsN6chpHcvm7o,1235
511
- hatchet_sdk-1.0.3.dist-info/RECORD,,
507
+ hatchet_sdk/workflow_run.py,sha256=Q1nTpnWNsFfjWWpx49xXYUHsVbqTnHL6JWnSKoFM3_I,1029
508
+ hatchet_sdk-1.1.0.dist-info/METADATA,sha256=qinZMG7N131GxT2frqdocoLNgs4371AgmF8H7Pm-_Uk,1876
509
+ hatchet_sdk-1.1.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
510
+ hatchet_sdk-1.1.0.dist-info/entry_points.txt,sha256=5mTp_AsCWK5raiVxP_MU9eBCgkRGl4OsN6chpHcvm7o,1235
511
+ hatchet_sdk-1.1.0.dist-info/RECORD,,
@@ -1,18 +0,0 @@
1
- import asyncio
2
-
3
-
4
- def get_active_event_loop() -> asyncio.AbstractEventLoop | None:
5
- """
6
- Get the active event loop.
7
-
8
- Returns:
9
- asyncio.AbstractEventLoop: The active event loop, or None if there is no active
10
- event loop in the current thread.
11
- """
12
- try:
13
- return asyncio.get_event_loop()
14
- except RuntimeError as e:
15
- if str(e).startswith("There is no current event loop in thread"):
16
- return None
17
- else:
18
- raise e