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.
- hatchet_sdk/__init__.py +46 -40
- hatchet_sdk/clients/admin.py +18 -23
- hatchet_sdk/clients/dispatcher/action_listener.py +4 -3
- hatchet_sdk/clients/dispatcher/dispatcher.py +1 -4
- hatchet_sdk/clients/event_ts.py +2 -1
- hatchet_sdk/clients/events.py +16 -12
- hatchet_sdk/clients/listeners/durable_event_listener.py +4 -2
- hatchet_sdk/clients/listeners/pooled_listener.py +2 -2
- hatchet_sdk/clients/listeners/run_event_listener.py +7 -8
- hatchet_sdk/clients/listeners/workflow_listener.py +14 -6
- hatchet_sdk/clients/rest/api_response.py +3 -2
- hatchet_sdk/clients/rest/tenacity_utils.py +6 -8
- hatchet_sdk/config.py +2 -0
- hatchet_sdk/connection.py +10 -4
- hatchet_sdk/context/context.py +170 -46
- hatchet_sdk/context/worker_context.py +4 -7
- hatchet_sdk/contracts/dispatcher_pb2.py +38 -38
- hatchet_sdk/contracts/dispatcher_pb2.pyi +4 -2
- hatchet_sdk/contracts/events_pb2.py +13 -13
- hatchet_sdk/contracts/events_pb2.pyi +4 -2
- hatchet_sdk/contracts/v1/workflows_pb2.py +1 -1
- hatchet_sdk/contracts/v1/workflows_pb2.pyi +2 -2
- hatchet_sdk/exceptions.py +99 -1
- hatchet_sdk/features/cron.py +2 -2
- hatchet_sdk/features/filters.py +3 -3
- hatchet_sdk/features/runs.py +4 -4
- hatchet_sdk/features/scheduled.py +8 -9
- hatchet_sdk/hatchet.py +65 -64
- hatchet_sdk/opentelemetry/instrumentor.py +20 -20
- hatchet_sdk/runnables/action.py +1 -2
- hatchet_sdk/runnables/contextvars.py +19 -0
- hatchet_sdk/runnables/task.py +37 -29
- hatchet_sdk/runnables/types.py +9 -8
- hatchet_sdk/runnables/workflow.py +57 -42
- hatchet_sdk/utils/proto_enums.py +4 -4
- hatchet_sdk/utils/timedelta_to_expression.py +2 -3
- hatchet_sdk/utils/typing.py +11 -17
- hatchet_sdk/waits.py +6 -5
- hatchet_sdk/worker/action_listener_process.py +33 -13
- hatchet_sdk/worker/runner/run_loop_manager.py +15 -11
- hatchet_sdk/worker/runner/runner.py +102 -92
- hatchet_sdk/worker/runner/utils/capture_logs.py +72 -31
- hatchet_sdk/worker/worker.py +29 -25
- hatchet_sdk/workflow_run.py +4 -2
- {hatchet_sdk-1.12.3.dist-info → hatchet_sdk-1.13.0.dist-info}/METADATA +1 -1
- {hatchet_sdk-1.12.3.dist-info → hatchet_sdk-1.13.0.dist-info}/RECORD +48 -48
- {hatchet_sdk-1.12.3.dist-info → hatchet_sdk-1.13.0.dist-info}/WHEEL +0 -0
- {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
|
|
4
|
-
from contextvars import ContextVar
|
|
4
|
+
from collections.abc import Awaitable, Callable
|
|
5
5
|
from io import StringIO
|
|
6
|
-
from typing import
|
|
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
|
|
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:
|
|
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
|
|
23
|
-
var.
|
|
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
|
|
28
|
-
|
|
29
|
-
|
|
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
|
|
38
|
-
def __init__(self, event_client: EventClient
|
|
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
|
-
|
|
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
|
-
|
|
46
|
-
|
|
78
|
+
self.q.put_nowait(record)
|
|
79
|
+
except asyncio.QueueFull:
|
|
80
|
+
logger.warning("Log queue is full, dropping log message")
|
|
81
|
+
|
|
47
82
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
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
|
-
|
|
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,
|
|
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(
|
|
107
|
+
custom_handler = CustomLogHandler(log_sender, log_stream)
|
|
68
108
|
custom_handler.setLevel(logging.INFO)
|
|
69
|
-
|
|
70
|
-
logger.
|
|
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)
|
hatchet_sdk/worker/worker.py
CHANGED
|
@@ -5,13 +5,14 @@ import os
|
|
|
5
5
|
import re
|
|
6
6
|
import signal
|
|
7
7
|
import sys
|
|
8
|
-
from
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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:
|
|
124
|
-
self.event_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:
|
|
127
|
-
self.durable_event_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
|
|
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
|
-
|
|
401
|
-
|
|
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}")
|
hatchet_sdk/workflow_run.py
CHANGED
|
@@ -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(
|
|
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,14 +1,14 @@
|
|
|
1
|
-
hatchet_sdk/__init__.py,sha256=
|
|
1
|
+
hatchet_sdk/__init__.py,sha256=vqSRe7MdTXrFeV2x5LDrxiyu0LoEaQ9quvxK5OwHjV0,10387
|
|
2
2
|
hatchet_sdk/client.py,sha256=OXb2hOJ5p7pY5QMlM4cydb4aGyf6bDdbyWQjPMVCe64,2413
|
|
3
|
-
hatchet_sdk/clients/admin.py,sha256=
|
|
4
|
-
hatchet_sdk/clients/dispatcher/action_listener.py,sha256=
|
|
5
|
-
hatchet_sdk/clients/dispatcher/dispatcher.py,sha256=
|
|
6
|
-
hatchet_sdk/clients/event_ts.py,sha256=
|
|
7
|
-
hatchet_sdk/clients/events.py,sha256=
|
|
8
|
-
hatchet_sdk/clients/listeners/durable_event_listener.py,sha256=
|
|
9
|
-
hatchet_sdk/clients/listeners/pooled_listener.py,sha256=
|
|
10
|
-
hatchet_sdk/clients/listeners/run_event_listener.py,sha256=
|
|
11
|
-
hatchet_sdk/clients/listeners/workflow_listener.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
234
|
-
hatchet_sdk/connection.py,sha256=
|
|
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=
|
|
237
|
-
hatchet_sdk/context/worker_context.py,sha256=
|
|
238
|
-
hatchet_sdk/contracts/dispatcher_pb2.py,sha256=
|
|
239
|
-
hatchet_sdk/contracts/dispatcher_pb2.pyi,sha256=
|
|
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=
|
|
242
|
-
hatchet_sdk/contracts/events_pb2.pyi,sha256=
|
|
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=
|
|
251
|
-
hatchet_sdk/contracts/v1/workflows_pb2.pyi,sha256=
|
|
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=
|
|
257
|
-
hatchet_sdk/features/cron.py,sha256=
|
|
258
|
-
hatchet_sdk/features/filters.py,sha256=
|
|
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=
|
|
263
|
-
hatchet_sdk/features/scheduled.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
275
|
-
hatchet_sdk/runnables/contextvars.py,sha256=
|
|
276
|
-
hatchet_sdk/runnables/task.py,sha256=
|
|
277
|
-
hatchet_sdk/runnables/types.py,sha256=
|
|
278
|
-
hatchet_sdk/runnables/workflow.py,sha256=
|
|
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=
|
|
283
|
-
hatchet_sdk/utils/timedelta_to_expression.py,sha256=
|
|
284
|
-
hatchet_sdk/utils/typing.py,sha256=
|
|
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=
|
|
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=
|
|
519
|
-
hatchet_sdk/worker/runner/run_loop_manager.py,sha256=
|
|
520
|
-
hatchet_sdk/worker/runner/runner.py,sha256=
|
|
521
|
-
hatchet_sdk/worker/runner/utils/capture_logs.py,sha256=
|
|
522
|
-
hatchet_sdk/worker/worker.py,sha256=
|
|
523
|
-
hatchet_sdk/workflow_run.py,sha256=
|
|
524
|
-
hatchet_sdk-1.
|
|
525
|
-
hatchet_sdk-1.
|
|
526
|
-
hatchet_sdk-1.
|
|
527
|
-
hatchet_sdk-1.
|
|
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,,
|
|
File without changes
|
|
File without changes
|