hatchet-sdk 1.12.3__py3-none-any.whl → 1.13.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 (48) hide show
  1. hatchet_sdk/__init__.py +46 -40
  2. hatchet_sdk/clients/admin.py +18 -23
  3. hatchet_sdk/clients/dispatcher/action_listener.py +4 -3
  4. hatchet_sdk/clients/dispatcher/dispatcher.py +1 -4
  5. hatchet_sdk/clients/event_ts.py +2 -1
  6. hatchet_sdk/clients/events.py +16 -12
  7. hatchet_sdk/clients/listeners/durable_event_listener.py +4 -2
  8. hatchet_sdk/clients/listeners/pooled_listener.py +2 -2
  9. hatchet_sdk/clients/listeners/run_event_listener.py +7 -8
  10. hatchet_sdk/clients/listeners/workflow_listener.py +14 -6
  11. hatchet_sdk/clients/rest/api_response.py +3 -2
  12. hatchet_sdk/clients/rest/tenacity_utils.py +6 -8
  13. hatchet_sdk/config.py +2 -0
  14. hatchet_sdk/connection.py +10 -4
  15. hatchet_sdk/context/context.py +170 -46
  16. hatchet_sdk/context/worker_context.py +4 -7
  17. hatchet_sdk/contracts/dispatcher_pb2.py +38 -38
  18. hatchet_sdk/contracts/dispatcher_pb2.pyi +4 -2
  19. hatchet_sdk/contracts/events_pb2.py +13 -13
  20. hatchet_sdk/contracts/events_pb2.pyi +4 -2
  21. hatchet_sdk/contracts/v1/workflows_pb2.py +1 -1
  22. hatchet_sdk/contracts/v1/workflows_pb2.pyi +2 -2
  23. hatchet_sdk/exceptions.py +99 -1
  24. hatchet_sdk/features/cron.py +2 -2
  25. hatchet_sdk/features/filters.py +3 -3
  26. hatchet_sdk/features/runs.py +4 -4
  27. hatchet_sdk/features/scheduled.py +8 -9
  28. hatchet_sdk/hatchet.py +65 -64
  29. hatchet_sdk/opentelemetry/instrumentor.py +20 -20
  30. hatchet_sdk/runnables/action.py +1 -2
  31. hatchet_sdk/runnables/contextvars.py +19 -0
  32. hatchet_sdk/runnables/task.py +37 -29
  33. hatchet_sdk/runnables/types.py +9 -8
  34. hatchet_sdk/runnables/workflow.py +57 -42
  35. hatchet_sdk/utils/proto_enums.py +4 -4
  36. hatchet_sdk/utils/timedelta_to_expression.py +2 -3
  37. hatchet_sdk/utils/typing.py +11 -17
  38. hatchet_sdk/waits.py +6 -5
  39. hatchet_sdk/worker/action_listener_process.py +33 -13
  40. hatchet_sdk/worker/runner/run_loop_manager.py +15 -11
  41. hatchet_sdk/worker/runner/runner.py +102 -92
  42. hatchet_sdk/worker/runner/utils/capture_logs.py +72 -31
  43. hatchet_sdk/worker/worker.py +29 -25
  44. hatchet_sdk/workflow_run.py +4 -2
  45. {hatchet_sdk-1.12.3.dist-info → hatchet_sdk-1.13.0.dist-info}/METADATA +1 -1
  46. {hatchet_sdk-1.12.3.dist-info → hatchet_sdk-1.13.0.dist-info}/RECORD +48 -48
  47. {hatchet_sdk-1.12.3.dist-info → hatchet_sdk-1.13.0.dist-info}/WHEEL +0 -0
  48. {hatchet_sdk-1.12.3.dist-info → hatchet_sdk-1.13.0.dist-info}/entry_points.txt +0 -0
@@ -1,73 +1,114 @@
1
+ import asyncio
1
2
  import functools
2
3
  import logging
3
- from concurrent.futures import ThreadPoolExecutor
4
- from contextvars import ContextVar
4
+ from collections.abc import Awaitable, Callable
5
5
  from io import StringIO
6
- from typing import Any, Awaitable, Callable, ItemsView, ParamSpec, TypeVar
6
+ from typing import Literal, ParamSpec, TypeVar
7
+
8
+ from pydantic import BaseModel
7
9
 
8
10
  from hatchet_sdk.clients.events import EventClient
9
11
  from hatchet_sdk.logger import logger
10
- from hatchet_sdk.runnables.contextvars import ctx_step_run_id, ctx_workflow_run_id
12
+ from hatchet_sdk.runnables.contextvars import (
13
+ ctx_action_key,
14
+ ctx_step_run_id,
15
+ ctx_worker_id,
16
+ ctx_workflow_run_id,
17
+ )
18
+ from hatchet_sdk.utils.typing import STOP_LOOP, STOP_LOOP_TYPE
11
19
 
12
20
  T = TypeVar("T")
13
21
  P = ParamSpec("P")
14
22
 
15
23
 
24
+ class ContextVarToCopy(BaseModel):
25
+ name: Literal[
26
+ "ctx_workflow_run_id", "ctx_step_run_id", "ctx_action_key", "ctx_worker_id"
27
+ ]
28
+ value: str | None
29
+
30
+
16
31
  def copy_context_vars(
17
- ctx_vars: ItemsView[ContextVar[Any], Any],
32
+ ctx_vars: list[ContextVarToCopy],
18
33
  func: Callable[P, T],
19
34
  *args: P.args,
20
35
  **kwargs: P.kwargs,
21
36
  ) -> T:
22
- for var, value in ctx_vars:
23
- var.set(value)
37
+ for var in ctx_vars:
38
+ if var.name == "ctx_workflow_run_id":
39
+ ctx_workflow_run_id.set(var.value)
40
+ elif var.name == "ctx_step_run_id":
41
+ ctx_step_run_id.set(var.value)
42
+ elif var.name == "ctx_action_key":
43
+ ctx_action_key.set(var.value)
44
+ elif var.name == "ctx_worker_id":
45
+ ctx_worker_id.set(var.value)
46
+ else:
47
+ raise ValueError(f"Unknown context variable name: {var.name}")
48
+
24
49
  return func(*args, **kwargs)
25
50
 
26
51
 
27
- class InjectingFilter(logging.Filter):
28
- # For some reason, only the InjectingFilter has access to the contextvars method sr.get(),
29
- # otherwise we would use emit within the CustomLogHandler
30
- def filter(self, record: logging.LogRecord) -> bool:
31
- ## TODO: Change how we do this to not assign to the log record
32
- record.workflow_run_id = ctx_workflow_run_id.get()
33
- record.step_run_id = ctx_step_run_id.get()
34
- return True
52
+ class LogRecord(BaseModel):
53
+ message: str
54
+ step_run_id: str
35
55
 
36
56
 
37
- class CustomLogHandler(logging.StreamHandler): # type: ignore[type-arg]
38
- def __init__(self, event_client: EventClient, stream: StringIO | None = None):
39
- super().__init__(stream)
40
- self.logger_thread_pool = ThreadPoolExecutor(max_workers=1)
57
+ class AsyncLogSender:
58
+ def __init__(self, event_client: EventClient):
41
59
  self.event_client = event_client
60
+ self.q = asyncio.Queue[LogRecord | STOP_LOOP_TYPE](maxsize=1000)
61
+
62
+ async def consume(self) -> None:
63
+ while True:
64
+ record = await self.q.get()
65
+
66
+ if record == STOP_LOOP:
67
+ break
42
68
 
43
- def _log(self, line: str, step_run_id: str | None) -> None:
69
+ try:
70
+ self.event_client.log(
71
+ message=record.message, step_run_id=record.step_run_id
72
+ )
73
+ except Exception as e:
74
+ logger.error(f"Error logging: {e}")
75
+
76
+ def publish(self, record: LogRecord | STOP_LOOP_TYPE) -> None:
44
77
  try:
45
- if not step_run_id:
46
- return
78
+ self.q.put_nowait(record)
79
+ except asyncio.QueueFull:
80
+ logger.warning("Log queue is full, dropping log message")
81
+
47
82
 
48
- self.event_client.log(message=line, step_run_id=step_run_id)
49
- except Exception as e:
50
- logger.error(f"Error logging: {e}")
83
+ class CustomLogHandler(logging.StreamHandler): # type: ignore[type-arg]
84
+ def __init__(self, log_sender: AsyncLogSender, stream: StringIO):
85
+ super().__init__(stream)
86
+
87
+ self.log_sender = log_sender
51
88
 
52
89
  def emit(self, record: logging.LogRecord) -> None:
53
90
  super().emit(record)
54
91
 
55
92
  log_entry = self.format(record)
93
+ step_run_id = ctx_step_run_id.get()
94
+
95
+ if not step_run_id:
96
+ return
56
97
 
57
- ## TODO: Change how we do this to not assign to the log record
58
- self.logger_thread_pool.submit(self._log, log_entry, record.step_run_id) # type: ignore
98
+ self.log_sender.publish(LogRecord(message=log_entry, step_run_id=step_run_id))
59
99
 
60
100
 
61
101
  def capture_logs(
62
- logger: logging.Logger, event_client: "EventClient", func: Callable[P, Awaitable[T]]
102
+ logger: logging.Logger, log_sender: AsyncLogSender, func: Callable[P, Awaitable[T]]
63
103
  ) -> Callable[P, Awaitable[T]]:
64
104
  @functools.wraps(func)
65
105
  async def wrapper(*args: P.args, **kwargs: P.kwargs) -> T:
66
106
  log_stream = StringIO()
67
- custom_handler = CustomLogHandler(event_client, log_stream)
107
+ custom_handler = CustomLogHandler(log_sender, log_stream)
68
108
  custom_handler.setLevel(logging.INFO)
69
- custom_handler.addFilter(InjectingFilter())
70
- logger.addHandler(custom_handler)
109
+
110
+ if not any(h for h in logger.handlers if isinstance(h, CustomLogHandler)):
111
+ logger.addHandler(custom_handler)
71
112
 
72
113
  try:
73
114
  result = await func(*args, **kwargs)
@@ -5,13 +5,14 @@ import os
5
5
  import re
6
6
  import signal
7
7
  import sys
8
- from contextlib import AsyncExitStack, asynccontextmanager
8
+ from collections.abc import AsyncGenerator, Callable
9
+ from contextlib import AsyncExitStack, asynccontextmanager, suppress
9
10
  from dataclasses import dataclass, field
10
11
  from enum import Enum
11
12
  from multiprocessing import Queue
12
13
  from multiprocessing.process import BaseProcess
13
14
  from types import FrameType
14
- from typing import Any, AsyncGenerator, Callable, TypeVar, Union
15
+ from typing import Any, TypeVar
15
16
  from warnings import warn
16
17
 
17
18
  from aiohttp import web
@@ -23,26 +24,22 @@ from pydantic import BaseModel
23
24
  from hatchet_sdk.client import Client
24
25
  from hatchet_sdk.config import ClientConfig
25
26
  from hatchet_sdk.contracts.v1.workflows_pb2 import CreateWorkflowVersionRequest
27
+ from hatchet_sdk.exceptions import LoopAlreadyRunningError
26
28
  from hatchet_sdk.logger import logger
27
29
  from hatchet_sdk.runnables.action import Action
30
+ from hatchet_sdk.runnables.contextvars import task_count
28
31
  from hatchet_sdk.runnables.task import Task
29
32
  from hatchet_sdk.runnables.workflow import BaseWorkflow
33
+ from hatchet_sdk.utils.typing import STOP_LOOP_TYPE
30
34
  from hatchet_sdk.worker.action_listener_process import (
31
35
  ActionEvent,
32
36
  worker_action_listener_process,
33
37
  )
34
- from hatchet_sdk.worker.runner.run_loop_manager import (
35
- STOP_LOOP_TYPE,
36
- WorkerActionRunLoopManager,
37
- )
38
+ from hatchet_sdk.worker.runner.run_loop_manager import WorkerActionRunLoopManager
38
39
 
39
40
  T = TypeVar("T")
40
41
 
41
42
 
42
- class LoopAlreadyRunningException(Exception):
43
- pass
44
-
45
-
46
43
  class WorkerStatus(Enum):
47
44
  INITIALIZED = 1
48
45
  STARTING = 2
@@ -60,7 +57,7 @@ class HealthCheckResponse(BaseModel):
60
57
  name: str
61
58
  slots: int
62
59
  actions: list[str]
63
- labels: dict[str, Union[str, int]]
60
+ labels: dict[str, str | int]
64
61
  python_version: str
65
62
 
66
63
 
@@ -75,10 +72,8 @@ async def _create_async_context_manager(
75
72
  try:
76
73
  yield
77
74
  finally:
78
- try:
75
+ with suppress(StopAsyncIteration):
79
76
  await anext(gen)
80
- except StopAsyncIteration:
81
- pass
82
77
 
83
78
 
84
79
  class Worker:
@@ -88,11 +83,11 @@ class Worker:
88
83
  config: ClientConfig,
89
84
  slots: int,
90
85
  durable_slots: int,
91
- labels: dict[str, Union[str, int]] = {},
86
+ labels: dict[str, str | int] | None = None,
92
87
  debug: bool = False,
93
88
  owned_loop: bool = True,
94
89
  handle_kill: bool = True,
95
- workflows: list[BaseWorkflow[Any]] = [],
90
+ workflows: list[BaseWorkflow[Any]] | None = None,
96
91
  lifespan: LifespanFn | None = None,
97
92
  ) -> None:
98
93
  self.config = config
@@ -100,7 +95,7 @@ class Worker:
100
95
  self.slots = slots
101
96
  self.durable_slots = durable_slots
102
97
  self.debug = debug
103
- self.labels = labels
98
+ self.labels = labels or {}
104
99
  self.handle_kill = handle_kill
105
100
  self.owned_loop = owned_loop
106
101
 
@@ -120,11 +115,11 @@ class Worker:
120
115
 
121
116
  self.ctx = multiprocessing.get_context("spawn")
122
117
 
123
- self.action_queue: "Queue[Action | STOP_LOOP_TYPE]" = self.ctx.Queue()
124
- self.event_queue: "Queue[ActionEvent]" = self.ctx.Queue()
118
+ self.action_queue: Queue[Action | STOP_LOOP_TYPE] = self.ctx.Queue()
119
+ self.event_queue: Queue[ActionEvent] = self.ctx.Queue()
125
120
 
126
- self.durable_action_queue: "Queue[Action | STOP_LOOP_TYPE]" = self.ctx.Queue()
127
- self.durable_event_queue: "Queue[ActionEvent]" = self.ctx.Queue()
121
+ self.durable_action_queue: Queue[Action | STOP_LOOP_TYPE] = self.ctx.Queue()
122
+ self.durable_event_queue: Queue[ActionEvent] = self.ctx.Queue()
128
123
 
129
124
  self.loop: asyncio.AbstractEventLoop | None
130
125
 
@@ -143,7 +138,7 @@ class Worker:
143
138
  self.lifespan = lifespan
144
139
  self.lifespan_stack: AsyncExitStack | None = None
145
140
 
146
- self.register_workflows(workflows)
141
+ self.register_workflows(workflows or [])
147
142
 
148
143
  def register_workflow_from_opts(self, opts: CreateWorkflowVersionRequest) -> None:
149
144
  try:
@@ -187,7 +182,7 @@ class Worker:
187
182
  def _setup_loop(self) -> None:
188
183
  try:
189
184
  asyncio.get_running_loop()
190
- raise LoopAlreadyRunningException(
185
+ raise LoopAlreadyRunningError(
191
186
  "An event loop is already running. This worker requires its own dedicated event loop. "
192
187
  "Make sure you're not using asyncio.run() or other loop-creating functions in the main thread."
193
188
  )
@@ -248,6 +243,7 @@ class Worker:
248
243
  warn(
249
244
  "Passing a custom event loop is deprecated and will be removed in the future. This option no longer has any effect",
250
245
  DeprecationWarning,
246
+ stacklevel=1,
251
247
  )
252
248
 
253
249
  self._setup_loop()
@@ -397,8 +393,16 @@ class Worker:
397
393
  if self.loop:
398
394
  self.loop.create_task(self.exit_gracefully())
399
395
  break
400
- else:
401
- self._status = WorkerStatus.HEALTHY
396
+
397
+ if (
398
+ self.config.terminate_worker_after_num_tasks
399
+ and task_count.value >= self.config.terminate_worker_after_num_tasks
400
+ ):
401
+ if self.loop:
402
+ self.loop.create_task(self.exit_gracefully())
403
+ break
404
+
405
+ self._status = WorkerStatus.HEALTHY
402
406
  await asyncio.sleep(1)
403
407
  except Exception as e:
404
408
  logger.error(f"error checking listener health: {e}")
@@ -47,11 +47,13 @@ class WorkflowRunRef:
47
47
  while True:
48
48
  try:
49
49
  details = self.runs_client.get(self.workflow_run_id)
50
- except Exception:
50
+ except Exception as e:
51
51
  retries += 1
52
52
 
53
53
  if retries > 10:
54
- raise ValueError(f"Workflow run {self.workflow_run_id} not found")
54
+ raise ValueError(
55
+ f"Workflow run {self.workflow_run_id} not found"
56
+ ) from e
55
57
 
56
58
  time.sleep(1)
57
59
  continue
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hatchet-sdk
3
- Version: 1.12.3
3
+ Version: 1.13.0
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: Alexander Belanger
@@ -1,14 +1,14 @@
1
- hatchet_sdk/__init__.py,sha256=si6xDsRLQ6UgaOD1_1fLpUcPhVIGZMKK-AmDJwnI6Hg,10238
1
+ hatchet_sdk/__init__.py,sha256=vqSRe7MdTXrFeV2x5LDrxiyu0LoEaQ9quvxK5OwHjV0,10387
2
2
  hatchet_sdk/client.py,sha256=OXb2hOJ5p7pY5QMlM4cydb4aGyf6bDdbyWQjPMVCe64,2413
3
- hatchet_sdk/clients/admin.py,sha256=B4fav9EYdsMbMqaH3GUEwL8sza1tQ3RORlwGXUb7qp0,17019
4
- hatchet_sdk/clients/dispatcher/action_listener.py,sha256=XUDXye-HW4V30DBgjd_dmq7e03AS9eBxUJi1VsvfSqE,13837
5
- hatchet_sdk/clients/dispatcher/dispatcher.py,sha256=LoxQEX5FS6v-qKRtOXoqsx3VlBUgFgTkbK58LU1eU3I,8176
6
- hatchet_sdk/clients/event_ts.py,sha256=MudFszIb9IcPKQYvBTzcatPkcWEy3nxbAtEQ0_NYxMg,2094
7
- hatchet_sdk/clients/events.py,sha256=gqxNZphGFkIzMKyvmLWaaWmFglXR95ZiQxkS_F1rXTY,8740
8
- hatchet_sdk/clients/listeners/durable_event_listener.py,sha256=jpqnbZsuouWk3XaOIYL9apaGtVk65eKKq66eBP9klBs,4085
9
- hatchet_sdk/clients/listeners/pooled_listener.py,sha256=1rodfIeqmHRF-u-PB6cBJbOU8NrvToLTyGigJMydpGo,8496
10
- hatchet_sdk/clients/listeners/run_event_listener.py,sha256=rIjBLRF7d7FBoEq7RKbmbOA84lX_hHSU26trwnthqV8,10230
11
- hatchet_sdk/clients/listeners/workflow_listener.py,sha256=EhBZZnHiidDLvAc4r54Re_LJXVypinbgTE9qKBybxj8,2054
3
+ hatchet_sdk/clients/admin.py,sha256=t8GXhjMiFp9iL0ofISNxSOKlfwaOTX2iQbZfz1G0pHU,16936
4
+ hatchet_sdk/clients/dispatcher/action_listener.py,sha256=tFknXH9iSP0OFYYVcKeDZVrcDNIz00ZQVTxSbHpbKhI,13863
5
+ hatchet_sdk/clients/dispatcher/dispatcher.py,sha256=5qyvLqiCJeW0n9rzqGUNasW95ATywcq5dJrT_ePKmUw,8114
6
+ hatchet_sdk/clients/event_ts.py,sha256=d9NTfjWVk84QMB5XTWkDZ2UfsIIn5ytAEn6S5fhpxss,2121
7
+ hatchet_sdk/clients/events.py,sha256=wE36_Wyb8BLywpuc8epRj7ZZDN9UCmztn6g3wdgRivM,8849
8
+ hatchet_sdk/clients/listeners/durable_event_listener.py,sha256=0sc9DaGBS_cH2mvXLz13EEKO6I0Fq0lhRsTM4E6qKgs,4176
9
+ hatchet_sdk/clients/listeners/pooled_listener.py,sha256=m0OwZhMVRyGCmw7XYvh_5R5Mpeg-TrJyPnQ3-d5NnJg,8514
10
+ hatchet_sdk/clients/listeners/run_event_listener.py,sha256=CNXG5a_MUoYnNVmfrXkW1w3v6UnImyeUFXHQ96n4ULM,10222
11
+ hatchet_sdk/clients/listeners/workflow_listener.py,sha256=u7qkr_uqnk3Pq_dARM3ah0nd1KtL3D_UQwbZ5IdcnjE,2283
12
12
  hatchet_sdk/clients/rest/__init__.py,sha256=0bOD0KcR1mN8ZxEQuVBLJacaFehKKWGMinLeiVCi8dU,17466
13
13
  hatchet_sdk/clients/rest/api/__init__.py,sha256=Hha-Kw2hqeGf7j96pNzl3YlkHaD7HnEWGZCqvr18Vbk,1262
14
14
  hatchet_sdk/clients/rest/api/api_token_api.py,sha256=xzqMH_-wajBA0qLLs5Ta7tYg4FOLq0NjATyhZ1SV9jo,33433
@@ -31,7 +31,7 @@ hatchet_sdk/clients/rest/api/workflow_api.py,sha256=rpPXy5xZDZWo1GXQGLapTC3A5M_s
31
31
  hatchet_sdk/clients/rest/api/workflow_run_api.py,sha256=Jvge80z6DhlqL9OuLzUC49OtojeiCuagrMbNBThMYI4,78120
32
32
  hatchet_sdk/clients/rest/api/workflow_runs_api.py,sha256=PwUCdfseQvB6amGYW1XmowmrQaZaQODZaDebBXjAkPQ,96418
33
33
  hatchet_sdk/clients/rest/api_client.py,sha256=25vNKzpKVhvrGrU8T2YBLbz0Y7K0pKZwiLXF3Oc7tt0,27435
34
- hatchet_sdk/clients/rest/api_response.py,sha256=rSuCVGY-HE8X_WwteQP5wyANIuS-L5AmtZEUOwTicak,641
34
+ hatchet_sdk/clients/rest/api_response.py,sha256=jPXKGanAyue6QAb6r56f-_d7KXGpFERBT-AYq9XdktQ,655
35
35
  hatchet_sdk/clients/rest/configuration.py,sha256=ijGxGorVe8OEikJruwJ0hPk1Rc0OAKOqeUrfcoEiYH8,19333
36
36
  hatchet_sdk/clients/rest/exceptions.py,sha256=5PTEjyGxLeGP8U_qqc79QzR-sN7SOhzBwknSUC-BU4c,6365
37
37
  hatchet_sdk/clients/rest/models/__init__.py,sha256=rKvfyD9B8tVISjMUxX-P2_wYOXGDdBdid5Af3-4x7h0,15824
@@ -228,18 +228,18 @@ hatchet_sdk/clients/rest/models/workflow_version_definition.py,sha256=e18BUh1XO0
228
228
  hatchet_sdk/clients/rest/models/workflow_version_meta.py,sha256=TW4R7bAuYAg_LraN-8psdZqp2E8wH9hYyL5Sji86aLk,3791
229
229
  hatchet_sdk/clients/rest/models/workflow_workers_count.py,sha256=qhzqfvjjIDyARkiiLGluMIqEmqO-diHTsjlu0Doi0yg,2875
230
230
  hatchet_sdk/clients/rest/rest.py,sha256=zZHTzgl-NBdcK6XhG23m_s9RKRONGPPItzGe407s7GA,9262
231
- hatchet_sdk/clients/rest/tenacity_utils.py,sha256=n6QvwuGwinLQpiWNU5GxrDNhFBE8_wZdg3WNur21rJ0,1055
231
+ hatchet_sdk/clients/rest/tenacity_utils.py,sha256=SQuy4x9scgBpqygRrGdjP7dJz4u4VVAEbjnieid4KcU,1029
232
232
  hatchet_sdk/clients/v1/api_client.py,sha256=mJQUZ3cOxlFJiwWKK5F8jBxcpNZ7A2292HucrBqurbg,1205
233
- hatchet_sdk/config.py,sha256=iQFnT8teWiov0c2l1BzByBuzn2fgKOxvMt5Yt33oLsE,5128
234
- hatchet_sdk/connection.py,sha256=B5gT5NL9BBB5-l9U_cN6pMlraQk880rEYMnqaK_dgL0,2590
233
+ hatchet_sdk/config.py,sha256=DKOSCyOhFMx9d3Rvu5z9aImbOgZgwdNSg3XVzyVHn3g,5185
234
+ hatchet_sdk/connection.py,sha256=oRxLs_lBRgHfE4jGLZJimr25ymlEJnK1ZXlh-CasjPo,2696
235
235
  hatchet_sdk/context/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
236
- hatchet_sdk/context/context.py,sha256=ue6ewQZ_y2k2DQ5fVvCrArV7sI-Q7fpehCkadZvi1vg,9334
237
- hatchet_sdk/context/worker_context.py,sha256=OVcEWvdT_Kpd0nlg61VAPUgIPSFzSLs0aSrXWj-1GX4,974
238
- hatchet_sdk/contracts/dispatcher_pb2.py,sha256=RGjX3aO_4x4jm0KPgGl20KmJpORqe_v9I4sQQsEpmfk,14711
239
- hatchet_sdk/contracts/dispatcher_pb2.pyi,sha256=DROQIwGTmekIIE1ltYzZvSpRznu9dzB8tvfPA3b1QLQ,18811
236
+ hatchet_sdk/context/context.py,sha256=gGQ_H_eUEPWGn6ac62sAFUnsS0pRtm9UibxPy8PJUT8,14309
237
+ hatchet_sdk/context/worker_context.py,sha256=3lGkOYmDixeuSmqxXbsYav2gErcjP8cDa2m0t0iomjI,884
238
+ hatchet_sdk/contracts/dispatcher_pb2.py,sha256=W9aGh-wctZhLjUXUdeQTxH4qArsw6D0kIAWM9SVCX5o,14786
239
+ hatchet_sdk/contracts/dispatcher_pb2.pyi,sha256=9Qoz88G-btdlTuxvk4knqfnYdcIXy3oR9DTh6MwIdP4,18923
240
240
  hatchet_sdk/contracts/dispatcher_pb2_grpc.py,sha256=zJ4c0Z0-iJngrVEw51vmwQgP1c8aZhAkjcUJUpH6JQ0,24756
241
- hatchet_sdk/contracts/events_pb2.py,sha256=4h7g2MMvUruEl1Leq_BR2c_lq-xzS_DkApzFQonfOU0,4379
242
- hatchet_sdk/contracts/events_pb2.pyi,sha256=QJu6OiVUf2v-xNixpwmxI9Tky4-vZP0Y9hosF6CyCQg,4430
241
+ hatchet_sdk/contracts/events_pb2.py,sha256=qk01mhOAmh2SSCwzG_qyWddsjz3jh0jpWpS4Zx2DMqU,4468
242
+ hatchet_sdk/contracts/events_pb2.pyi,sha256=Kcwz1PCBGy0TmPW6ZdexS_GcR4K662xo1fCft-8a-h0,4542
243
243
  hatchet_sdk/contracts/events_pb2_grpc.py,sha256=XXEaAwVzGbqqPHIk0E2hTlZXmcGE-E5W3AaYWW8NBHA,10277
244
244
  hatchet_sdk/contracts/v1/dispatcher_pb2.py,sha256=PpMvh5ilrgNIR6DQSC-LS17xuXMknbT5Va2G7beqEfk,2546
245
245
  hatchet_sdk/contracts/v1/dispatcher_pb2.pyi,sha256=hjfQWs1jxBdF04IpJzS8sGpyuLbOjAims_PP_3sFVjk,1679
@@ -247,41 +247,41 @@ hatchet_sdk/contracts/v1/dispatcher_pb2_grpc.py,sha256=alnJTOJmf9AWr5qvqX0ivqEm1
247
247
  hatchet_sdk/contracts/v1/shared/condition_pb2.py,sha256=dLBp9p48xEgDIOUU3lWn9wb5HWlQShaMp-1-_OAbKZY,3194
248
248
  hatchet_sdk/contracts/v1/shared/condition_pb2.pyi,sha256=OZrUydy3wmHIoZjUQ5wrVTEaayTQlIZhfwJ8KyS26t8,3873
249
249
  hatchet_sdk/contracts/v1/shared/condition_pb2_grpc.py,sha256=-LQAfCTGRcj81g8ij2CUeuBDNKHTO3JojkByh3ay0QY,1136
250
- hatchet_sdk/contracts/v1/workflows_pb2.py,sha256=Ro3UdgZETnM7vhnK5gbwjeW-pEKHjTXWu3m1455SY0E,9508
251
- hatchet_sdk/contracts/v1/workflows_pb2.pyi,sha256=BBGTXhzcYg2cuzuqhk2Aps7k-L_CIQ2oGNkyVURh-nE,12666
250
+ hatchet_sdk/contracts/v1/workflows_pb2.py,sha256=u5hZfdd5A4VDyB-Buwx6eN6beazv5uR_CtLKDsXi7cY,9510
251
+ hatchet_sdk/contracts/v1/workflows_pb2.pyi,sha256=O8YV79Als8GnvCpVLpbrOy_Xn-Oo-1xFgKFG0u1o__o,12670
252
252
  hatchet_sdk/contracts/v1/workflows_pb2_grpc.py,sha256=XytYpV2kJQZT8iAs14z4SWsv-90ApfoFUEc8bRb5WHk,9299
253
253
  hatchet_sdk/contracts/workflows_pb2.py,sha256=daEsUwZnlDQ5GGLJ8WHgLdI1Tgr3lBXxGV1mJ6go0nE,11812
254
254
  hatchet_sdk/contracts/workflows_pb2.pyi,sha256=WJ3b45pWvoNmmWTWjBJt61IiAoVn61F62AG5OrRsnd8,15538
255
255
  hatchet_sdk/contracts/workflows_pb2_grpc.py,sha256=2V8E72DlJx5qlH2yiQpVCu5cQbKUba5X7T1yNrQDF_s,10819
256
- hatchet_sdk/exceptions.py,sha256=HGmYSZy3bCY2rBDEOQfhYGRa7_j9GvYT9Pc0B8Ic5Ug,49
257
- hatchet_sdk/features/cron.py,sha256=A2PJts0sGwCgb8ioIOq07qVLt4ASU9s6d2h3RjwVqys,9702
258
- hatchet_sdk/features/filters.py,sha256=xTQf-1arYwTwcEgG-hq0sz60IX1Jn0EGxNtXzT3rAzQ,6770
256
+ hatchet_sdk/exceptions.py,sha256=VTcgPXA9LoHtgTyKf3GlOhSImDn-s0CnxRfazmsj1cU,2594
257
+ hatchet_sdk/features/cron.py,sha256=42QJiSOXI9xAJw_d3nKhg0f_LLnwGQaLxBZ5JPhoT_w,9690
258
+ hatchet_sdk/features/filters.py,sha256=5bnSx5TkgrTcbo2DCsaHGogqdEprIQ9n7G_MW0AgisI,6782
259
259
  hatchet_sdk/features/logs.py,sha256=OcmgtmNyqFJI03_5ncuSy6M-Ho7AVTa8hnO0CDE3wi4,1172
260
260
  hatchet_sdk/features/metrics.py,sha256=TzAEB4Ogmgcq-EB7lEWQ9V8y-15d23ZuhAgPH6It92Y,4519
261
261
  hatchet_sdk/features/rate_limits.py,sha256=eh55Z3w75cYUthqTyoWmNxj_6tN3rjebMKm3of-vxv0,2155
262
- hatchet_sdk/features/runs.py,sha256=2CN1yKoT_ABGeKSN4Yut1FrcDK_LXr1uGgjSN35IMV0,16114
263
- hatchet_sdk/features/scheduled.py,sha256=Uzmex-taGWVIgnUw8QWOy1GX9fb9SWvAaaPMhU6R40c,8964
262
+ hatchet_sdk/features/runs.py,sha256=mmarF1kXFVWz6ayoYBAzZTkXBQVNb2Xq60d_atnkj-U,16120
263
+ hatchet_sdk/features/scheduled.py,sha256=bp5h6QP8B9keOsCTG1laB2GWIaXQ7ylBSNdsRFD3VU8,8906
264
264
  hatchet_sdk/features/tenant.py,sha256=vU6buEKVPCydpgrHFsQ_gbKgO5lRmlZG2ypsT7-O4S8,868
265
265
  hatchet_sdk/features/workers.py,sha256=vD6j7GCttu0fm23_XmBMdE0IuX4mUbL0adgMoC8Sk_E,2571
266
266
  hatchet_sdk/features/workflows.py,sha256=15MSYNIjlN1Ilk8sHq_DjLS7XuqlvcAMFuAdFLdjPGY,4012
267
- hatchet_sdk/hatchet.py,sha256=rqjL_Jfmd5n1niT1ZlwovTRA2jmF3PFb2JiLdA8D-c4,25304
267
+ hatchet_sdk/hatchet.py,sha256=rOuE7YPqu4setE_zGbmgvb2WN-q8HNXTDFYcp9N0Wj8,25759
268
268
  hatchet_sdk/labels.py,sha256=nATgxWE3lFxRTnfISEpoIRLGbMfAZsHF4lZTuG4Mfic,182
269
269
  hatchet_sdk/logger.py,sha256=5uOr52T4mImSQm1QvWT8HvZFK5WfPNh3Y1cBQZRFgUQ,333
270
270
  hatchet_sdk/metadata.py,sha256=XkRbhnghJJGCdVvF-uzyGBcNaTqpeQ3uiQvNNP1wyBc,107
271
- hatchet_sdk/opentelemetry/instrumentor.py,sha256=1hbZsvbK_GiuzkL88P97G6lg0BRPCvyeR7ltfQT32DM,27099
271
+ hatchet_sdk/opentelemetry/instrumentor.py,sha256=8h_G-h7U7ciNK4YCrWf8ZP2D63SlJCrlATk-9Oxreik,27028
272
272
  hatchet_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
273
273
  hatchet_sdk/rate_limit.py,sha256=TwbCuggiZaWpYuo4mjVLlE-z1OfQ2mRBiVvCSaG3lv4,3919
274
- hatchet_sdk/runnables/action.py,sha256=3B4VpiWIExiWE6kZBKP8EXXpRbkHrHt-L6hC6w8FZRo,4402
275
- hatchet_sdk/runnables/contextvars.py,sha256=3hXlW03FNg2sEq8_A7wMPf_c7FTNuZqg5U9n2S2_hgg,580
276
- hatchet_sdk/runnables/task.py,sha256=CuPcwmYwVHE-gMh_-qvi4ZV04cYPzUtoP8b3qEtD1Iw,7048
277
- hatchet_sdk/runnables/types.py,sha256=90JLuwEgRnPlaxS84DCpxjtPzIsN2KLtYQvFvoV_ZIU,4344
278
- hatchet_sdk/runnables/workflow.py,sha256=d317CSzTN0pHxqNHeu47EsTdEUDWuc2p4iLzbY4IRZc,48625
274
+ hatchet_sdk/runnables/action.py,sha256=zrVHpyzIQ9XZgWwY69b_6uhZd53An4trRoLd9b3os5E,4384
275
+ hatchet_sdk/runnables/contextvars.py,sha256=T2LWiXhcSyQYJY_-pfqMjDNjf6PdtDwyXyCZ6zIyWK0,929
276
+ hatchet_sdk/runnables/task.py,sha256=YjAKjL5stGd0JLwsg-rTMQOZ0ZXI0TQg8pIPZ_PgMls,7212
277
+ hatchet_sdk/runnables/types.py,sha256=QFayOJ_Oi8tOYI6Sjl9bwjftM96QZh9XIlfFnSNgEXI,4359
278
+ hatchet_sdk/runnables/workflow.py,sha256=cGRbNMvlxZeuySXVgQ3eitTYY-78W7tGPOwFSFIfTFE,49322
279
279
  hatchet_sdk/token.py,sha256=KjIiInwG5Kqd_FO4BSW1x_5Uc7PFbnzIVJqr50-ZldE,779
280
280
  hatchet_sdk/utils/backoff.py,sha256=6B5Rb5nLKw_TqqgpJMYjIBV1PTTtbOMRZCveisVhg_I,353
281
281
  hatchet_sdk/utils/opentelemetry.py,sha256=64TVwCLrUzEmcL2BUNPV_QubfiR5jajOZtVeGYLnEEA,1226
282
- hatchet_sdk/utils/proto_enums.py,sha256=0UybwE3s7TcqmzoQSO8YnhgAKOS8WZXsyPchB8-eksw,1247
283
- hatchet_sdk/utils/timedelta_to_expression.py,sha256=kwuYZ51JdDdc3h9Sw4vgBFmJBMPkgbGJA4v9uO4_NGk,660
284
- hatchet_sdk/utils/typing.py,sha256=P6-Nd5K_Hk-VhEkGj6LYki_9ddw05rJtzRA56qGXHag,914
282
+ hatchet_sdk/utils/proto_enums.py,sha256=v2gp_ZmIhPxURVXwz5lscllXwZXDl5XGXeL6gezw3o0,1241
283
+ hatchet_sdk/utils/timedelta_to_expression.py,sha256=YujnBnGn7lxtkUdKIeqmOiN_ZCGBpRPjCCSzcD3jxzA,644
284
+ hatchet_sdk/utils/typing.py,sha256=FgYnZyJSoRjNVFodxlI9gn0X8ST1KFed7xfUynIxa2U,978
285
285
  hatchet_sdk/v0/__init__.py,sha256=YNh-0rPHS0rcphmykJ1N2NMfgvERF4oJpBtx3IH_E_M,9657
286
286
  hatchet_sdk/v0/client.py,sha256=G1RDZln9Og7tRQulogXkZw8TsVlx7f0VvmtFI_VAe6E,3495
287
287
  hatchet_sdk/v0/clients/admin.py,sha256=l6fW21p_3pROz8mVB2QOXX0Pg5poeLXcBNEm6Uids30,18071
@@ -513,15 +513,15 @@ hatchet_sdk/v0/worker/runner/utils/error_with_traceback.py,sha256=Iih_s8JNqrinXE
513
513
  hatchet_sdk/v0/worker/worker.py,sha256=0yU0z-0si7NzG0U9et9J0tiwfVBSHl4QSiOW-WNmTQM,13027
514
514
  hatchet_sdk/v0/workflow.py,sha256=d4o425efk7J3JgLIge34MW_A3pzwnwSRtwEOgIqM2pc,9387
515
515
  hatchet_sdk/v0/workflow_run.py,sha256=jsEZprXshrSV7i_TtL5uoCL03D18zQ3NeJCq7mp97Dg,1752
516
- hatchet_sdk/waits.py,sha256=Jh7ogb3U7a8ZKAR1dxpNX9MX4FreKAIg9P-8bl8LZHM,3918
516
+ hatchet_sdk/waits.py,sha256=yJm5U2VfiVHfLLj0SwG6RDnpLH3F4VL3rZ2iiY_IwMY,4073
517
517
  hatchet_sdk/worker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
518
- hatchet_sdk/worker/action_listener_process.py,sha256=vGtiCqsHf82nU1_2NqgXPY2ZIwFqWcuZeeTkYG3rRTs,11977
519
- hatchet_sdk/worker/runner/run_loop_manager.py,sha256=E3KD1r0-BBKUWlZJMDo9e2HHl4uAyvL8gX42-JCRLLc,3794
520
- hatchet_sdk/worker/runner/runner.py,sha256=9Z3Ac6hRh5rjet7-BRtpcFARlhWvy6TNrdsdj61k_yk,18822
521
- hatchet_sdk/worker/runner/utils/capture_logs.py,sha256=nHRPSiDBqzhObM7i2X7t03OupVFnE7kQBdR2Ckgg-2w,2709
522
- hatchet_sdk/worker/worker.py,sha256=SAucu3dg8lkKLbzb3noNWvClZ09lC5tuRcBkYZtIJ-0,16088
523
- hatchet_sdk/workflow_run.py,sha256=ZwH0HLFGFVXz6jbiqSv4w0Om2XuR52Tzzw6LH4y65jQ,2765
524
- hatchet_sdk-1.12.3.dist-info/METADATA,sha256=JifcvdoIfrmwJvUOI2FeQfGiKmovJrM1aTVWOU2Nd6o,3636
525
- hatchet_sdk-1.12.3.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
526
- hatchet_sdk-1.12.3.dist-info/entry_points.txt,sha256=Un_76pcLse-ZGBlwebhQpnTPyQrripeHW8J7qmEpGOk,1400
527
- hatchet_sdk-1.12.3.dist-info/RECORD,,
518
+ hatchet_sdk/worker/action_listener_process.py,sha256=Xzzn1dDFJrqnC9HBsh3fYI8lfpOD4Ecze47qmm_XUWE,12923
519
+ hatchet_sdk/worker/runner/run_loop_manager.py,sha256=GeILClNXaDbsjXCQb0bBdgeyAwZGem2JdaH0t6wz__I,4053
520
+ hatchet_sdk/worker/runner/runner.py,sha256=LkCuqHBRbWkF7K8wC_oN5oVBbYkmk-Mkm1lGm8Iga-M,19026
521
+ hatchet_sdk/worker/runner/utils/capture_logs.py,sha256=DKw6boqVsSCM1XvBWYuc833MZxCdSpMxg3l4aAqKPyw,3465
522
+ hatchet_sdk/worker/worker.py,sha256=i94lHkDhtES5KEnTSoVGLGo_9L6NwoD3I_H03GC2Zfc,16514
523
+ hatchet_sdk/workflow_run.py,sha256=KcylcqRwKADtnzOTjoiVr1vdr7qTZFtDeD5aRS6A4Y8,2823
524
+ hatchet_sdk-1.13.0.dist-info/METADATA,sha256=Z26XfbDbFipXP4Jw72MoQCrYRIS0-gK2Kvrl3JoOsLk,3636
525
+ hatchet_sdk-1.13.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
526
+ hatchet_sdk-1.13.0.dist-info/entry_points.txt,sha256=Un_76pcLse-ZGBlwebhQpnTPyQrripeHW8J7qmEpGOk,1400
527
+ hatchet_sdk-1.13.0.dist-info/RECORD,,