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

@@ -1,9 +1,9 @@
1
1
  import asyncio
2
- from datetime import datetime
3
- from typing import TYPE_CHECKING, Any, Callable, Generic, cast
2
+ from datetime import datetime, timedelta
3
+ from typing import TYPE_CHECKING, Any, Callable, Generic, TypeVar, cast
4
4
 
5
5
  from google.protobuf import timestamp_pb2
6
- from pydantic import BaseModel
6
+ from pydantic import BaseModel, model_validator
7
7
 
8
8
  from hatchet_sdk.clients.admin import (
9
9
  ScheduleTriggerWorkflowOptions,
@@ -11,6 +11,8 @@ from hatchet_sdk.clients.admin import (
11
11
  WorkflowRunTriggerConfig,
12
12
  )
13
13
  from hatchet_sdk.clients.rest.models.cron_workflows import CronWorkflows
14
+ from hatchet_sdk.clients.rest.models.v1_task_status import V1TaskStatus
15
+ from hatchet_sdk.clients.rest.models.v1_task_summary import V1TaskSummary
14
16
  from hatchet_sdk.context.context import Context, DurableContext
15
17
  from hatchet_sdk.contracts.v1.workflows_pb2 import (
16
18
  CreateWorkflowVersionRequest,
@@ -23,12 +25,11 @@ from hatchet_sdk.logger import logger
23
25
  from hatchet_sdk.rate_limit import RateLimit
24
26
  from hatchet_sdk.runnables.task import Task
25
27
  from hatchet_sdk.runnables.types import (
26
- DEFAULT_EXECUTION_TIMEOUT,
27
- DEFAULT_SCHEDULE_TIMEOUT,
28
28
  ConcurrencyExpression,
29
29
  EmptyModel,
30
30
  R,
31
31
  StepType,
32
+ TaskDefaults,
32
33
  TWorkflowInput,
33
34
  WorkflowConfig,
34
35
  )
@@ -43,6 +44,62 @@ if TYPE_CHECKING:
43
44
  from hatchet_sdk.runnables.standalone import Standalone
44
45
 
45
46
 
47
+ T = TypeVar("T")
48
+
49
+
50
+ def fall_back_to_default(value: T, param_default: T, fallback_value: T | None) -> T:
51
+ ## If the value is not the param default, it's set
52
+ if value != param_default:
53
+ return value
54
+
55
+ ## Otherwise, it's unset, so return the fallback value if it's set
56
+ if fallback_value is not None:
57
+ return fallback_value
58
+
59
+ ## Otherwise return the param value
60
+ return value
61
+
62
+
63
+ class ComputedTaskParameters(BaseModel):
64
+ schedule_timeout: Duration
65
+ execution_timeout: Duration
66
+ retries: int
67
+ backoff_factor: float | None
68
+ backoff_max_seconds: int | None
69
+
70
+ task_defaults: TaskDefaults
71
+
72
+ @model_validator(mode="after")
73
+ def validate_params(self) -> "ComputedTaskParameters":
74
+ self.execution_timeout = fall_back_to_default(
75
+ value=self.execution_timeout,
76
+ param_default=timedelta(seconds=60),
77
+ fallback_value=self.task_defaults.execution_timeout,
78
+ )
79
+ self.schedule_timeout = fall_back_to_default(
80
+ value=self.schedule_timeout,
81
+ param_default=timedelta(minutes=5),
82
+ fallback_value=self.task_defaults.schedule_timeout,
83
+ )
84
+ self.backoff_factor = fall_back_to_default(
85
+ value=self.backoff_factor,
86
+ param_default=None,
87
+ fallback_value=self.task_defaults.backoff_factor,
88
+ )
89
+ self.backoff_max_seconds = fall_back_to_default(
90
+ value=self.backoff_max_seconds,
91
+ param_default=None,
92
+ fallback_value=self.task_defaults.backoff_max_seconds,
93
+ )
94
+ self.retries = fall_back_to_default(
95
+ value=self.retries,
96
+ param_default=0,
97
+ fallback_value=self.task_defaults.retries,
98
+ )
99
+
100
+ return self
101
+
102
+
46
103
  def transform_desired_worker_label(d: DesiredWorkerLabel) -> DesiredWorkerLabels:
47
104
  value = d.value
48
105
  return DesiredWorkerLabels(
@@ -528,8 +585,8 @@ class Workflow(BaseWorkflow[TWorkflowInput]):
528
585
  def task(
529
586
  self,
530
587
  name: str | None = None,
531
- schedule_timeout: Duration = DEFAULT_SCHEDULE_TIMEOUT,
532
- execution_timeout: Duration = DEFAULT_EXECUTION_TIMEOUT,
588
+ schedule_timeout: Duration = timedelta(minutes=5),
589
+ execution_timeout: Duration = timedelta(seconds=60),
533
590
  parents: list[Task[TWorkflowInput, Any]] = [],
534
591
  retries: int = 0,
535
592
  rate_limits: list[RateLimit] = [],
@@ -573,6 +630,15 @@ class Workflow(BaseWorkflow[TWorkflowInput]):
573
630
  :returns: A decorator which creates a `Task` object.
574
631
  """
575
632
 
633
+ computed_params = ComputedTaskParameters(
634
+ schedule_timeout=schedule_timeout,
635
+ execution_timeout=execution_timeout,
636
+ retries=retries,
637
+ backoff_factor=backoff_factor,
638
+ backoff_max_seconds=backoff_max_seconds,
639
+ task_defaults=self.config.task_defaults,
640
+ )
641
+
576
642
  def inner(
577
643
  func: Callable[[TWorkflowInput, Context], R]
578
644
  ) -> Task[TWorkflowInput, R]:
@@ -582,17 +648,17 @@ class Workflow(BaseWorkflow[TWorkflowInput]):
582
648
  workflow=self,
583
649
  type=StepType.DEFAULT,
584
650
  name=self._parse_task_name(name, func),
585
- execution_timeout=execution_timeout,
586
- schedule_timeout=schedule_timeout,
651
+ execution_timeout=computed_params.execution_timeout,
652
+ schedule_timeout=computed_params.schedule_timeout,
587
653
  parents=parents,
588
- retries=retries,
654
+ retries=computed_params.retries,
589
655
  rate_limits=[r.to_proto() for r in rate_limits],
590
656
  desired_worker_labels={
591
657
  key: transform_desired_worker_label(d)
592
658
  for key, d in desired_worker_labels.items()
593
659
  },
594
- backoff_factor=backoff_factor,
595
- backoff_max_seconds=backoff_max_seconds,
660
+ backoff_factor=computed_params.backoff_factor,
661
+ backoff_max_seconds=computed_params.backoff_max_seconds,
596
662
  concurrency=concurrency,
597
663
  wait_for=wait_for,
598
664
  skip_if=skip_if,
@@ -608,8 +674,8 @@ class Workflow(BaseWorkflow[TWorkflowInput]):
608
674
  def durable_task(
609
675
  self,
610
676
  name: str | None = None,
611
- schedule_timeout: Duration = DEFAULT_SCHEDULE_TIMEOUT,
612
- execution_timeout: Duration = DEFAULT_EXECUTION_TIMEOUT,
677
+ schedule_timeout: Duration = timedelta(minutes=5),
678
+ execution_timeout: Duration = timedelta(seconds=60),
613
679
  parents: list[Task[TWorkflowInput, Any]] = [],
614
680
  retries: int = 0,
615
681
  rate_limits: list[RateLimit] = [],
@@ -624,7 +690,7 @@ class Workflow(BaseWorkflow[TWorkflowInput]):
624
690
  [Callable[[TWorkflowInput, DurableContext], R]], Task[TWorkflowInput, R]
625
691
  ]:
626
692
  """
627
- A decorator to transform a function into a durable Hatchet task that run as part of a workflow.
693
+ A decorator to transform a function into a durable Hatchet task that runs as part of a workflow.
628
694
 
629
695
  **IMPORTANT:** This decorator creates a _durable_ task, which works using Hatchet's durable execution capabilities. This is an advanced feature of Hatchet.
630
696
 
@@ -659,6 +725,15 @@ class Workflow(BaseWorkflow[TWorkflowInput]):
659
725
  :returns: A decorator which creates a `Task` object.
660
726
  """
661
727
 
728
+ computed_params = ComputedTaskParameters(
729
+ schedule_timeout=schedule_timeout,
730
+ execution_timeout=execution_timeout,
731
+ retries=retries,
732
+ backoff_factor=backoff_factor,
733
+ backoff_max_seconds=backoff_max_seconds,
734
+ task_defaults=self.config.task_defaults,
735
+ )
736
+
662
737
  def inner(
663
738
  func: Callable[[TWorkflowInput, DurableContext], R]
664
739
  ) -> Task[TWorkflowInput, R]:
@@ -668,17 +743,17 @@ class Workflow(BaseWorkflow[TWorkflowInput]):
668
743
  workflow=self,
669
744
  type=StepType.DEFAULT,
670
745
  name=self._parse_task_name(name, func),
671
- execution_timeout=execution_timeout,
672
- schedule_timeout=schedule_timeout,
746
+ execution_timeout=computed_params.execution_timeout,
747
+ schedule_timeout=computed_params.schedule_timeout,
673
748
  parents=parents,
674
- retries=retries,
749
+ retries=computed_params.retries,
675
750
  rate_limits=[r.to_proto() for r in rate_limits],
676
751
  desired_worker_labels={
677
752
  key: transform_desired_worker_label(d)
678
753
  for key, d in desired_worker_labels.items()
679
754
  },
680
- backoff_factor=backoff_factor,
681
- backoff_max_seconds=backoff_max_seconds,
755
+ backoff_factor=computed_params.backoff_factor,
756
+ backoff_max_seconds=computed_params.backoff_max_seconds,
682
757
  concurrency=concurrency,
683
758
  wait_for=wait_for,
684
759
  skip_if=skip_if,
@@ -694,8 +769,8 @@ class Workflow(BaseWorkflow[TWorkflowInput]):
694
769
  def on_failure_task(
695
770
  self,
696
771
  name: str | None = None,
697
- schedule_timeout: Duration = DEFAULT_SCHEDULE_TIMEOUT,
698
- execution_timeout: Duration = DEFAULT_EXECUTION_TIMEOUT,
772
+ schedule_timeout: Duration = timedelta(minutes=5),
773
+ execution_timeout: Duration = timedelta(seconds=60),
699
774
  retries: int = 0,
700
775
  rate_limits: list[RateLimit] = [],
701
776
  backoff_factor: float | None = None,
@@ -754,8 +829,8 @@ class Workflow(BaseWorkflow[TWorkflowInput]):
754
829
  def on_success_task(
755
830
  self,
756
831
  name: str | None = None,
757
- schedule_timeout: Duration = DEFAULT_SCHEDULE_TIMEOUT,
758
- execution_timeout: Duration = DEFAULT_EXECUTION_TIMEOUT,
832
+ schedule_timeout: Duration = timedelta(minutes=5),
833
+ execution_timeout: Duration = timedelta(seconds=60),
759
834
  retries: int = 0,
760
835
  rate_limits: list[RateLimit] = [],
761
836
  backoff_factor: float | None = None,
@@ -846,3 +921,93 @@ class Workflow(BaseWorkflow[TWorkflowInput]):
846
921
  self._on_success_task = _task
847
922
  case _:
848
923
  raise ValueError("Invalid task type")
924
+
925
+ def list_runs(
926
+ self,
927
+ since: datetime | None = None,
928
+ until: datetime | None = None,
929
+ limit: int = 100,
930
+ offset: int | None = None,
931
+ statuses: list[V1TaskStatus] | None = None,
932
+ additional_metadata: dict[str, str] | None = None,
933
+ worker_id: str | None = None,
934
+ parent_task_external_id: str | None = None,
935
+ only_tasks: bool = False,
936
+ ) -> list[V1TaskSummary]:
937
+ """
938
+ List runs of the workflow.
939
+
940
+ :param since: The start time for the runs to be listed.
941
+ :param until: The end time for the runs to be listed.
942
+ :param limit: The maximum number of runs to be listed.
943
+ :param offset: The offset for pagination.
944
+ :param statuses: The statuses of the runs to be listed.
945
+ :param additional_metadata: Additional metadata for filtering the runs.
946
+ :param worker_id: The ID of the worker that ran the tasks.
947
+ :param parent_task_external_id: The external ID of the parent task.
948
+ :param only_tasks: Whether to list only task runs.
949
+
950
+ :returns: A list of `V1TaskSummary` objects representing the runs of the workflow.
951
+ """
952
+ workflows = self.client.workflows.list(workflow_name=self.name)
953
+
954
+ if not workflows.rows:
955
+ logger.warning(f"No runs found for {self.name}")
956
+ return []
957
+
958
+ workflow = workflows.rows[0]
959
+
960
+ response = self.client.runs.list(
961
+ workflow_ids=[workflow.metadata.id],
962
+ since=since or datetime.now() - timedelta(days=1),
963
+ only_tasks=only_tasks,
964
+ offset=offset,
965
+ limit=limit,
966
+ statuses=statuses,
967
+ until=until,
968
+ additional_metadata=additional_metadata,
969
+ worker_id=worker_id,
970
+ parent_task_external_id=parent_task_external_id,
971
+ )
972
+
973
+ return response.rows
974
+
975
+ async def aio_list_runs(
976
+ self,
977
+ since: datetime | None = None,
978
+ until: datetime | None = None,
979
+ limit: int = 100,
980
+ offset: int | None = None,
981
+ statuses: list[V1TaskStatus] | None = None,
982
+ additional_metadata: dict[str, str] | None = None,
983
+ worker_id: str | None = None,
984
+ parent_task_external_id: str | None = None,
985
+ only_tasks: bool = False,
986
+ ) -> list[V1TaskSummary]:
987
+ """
988
+ List runs of the workflow.
989
+
990
+ :param since: The start time for the runs to be listed.
991
+ :param until: The end time for the runs to be listed.
992
+ :param limit: The maximum number of runs to be listed.
993
+ :param offset: The offset for pagination.
994
+ :param statuses: The statuses of the runs to be listed.
995
+ :param additional_metadata: Additional metadata for filtering the runs.
996
+ :param worker_id: The ID of the worker that ran the tasks.
997
+ :param parent_task_external_id: The external ID of the parent task.
998
+ :param only_tasks: Whether to list only task runs.
999
+
1000
+ :returns: A list of `V1TaskSummary` objects representing the runs of the workflow.
1001
+ """
1002
+ return await asyncio.to_thread(
1003
+ self.list_runs,
1004
+ since=since or datetime.now() - timedelta(days=1),
1005
+ only_tasks=only_tasks,
1006
+ offset=offset,
1007
+ limit=limit,
1008
+ statuses=statuses,
1009
+ until=until,
1010
+ additional_metadata=additional_metadata,
1011
+ worker_id=worker_id,
1012
+ parent_task_external_id=parent_task_external_id,
1013
+ )
@@ -147,7 +147,7 @@ class Worker:
147
147
 
148
148
  def register_workflow_from_opts(self, opts: CreateWorkflowVersionRequest) -> None:
149
149
  try:
150
- self.client.admin.put_workflow(opts.name, opts)
150
+ self.client.admin.put_workflow(opts)
151
151
  except Exception as e:
152
152
  logger.error(f"failed to register workflow: {opts.name}")
153
153
  logger.error(e)
@@ -159,11 +159,8 @@ class Worker:
159
159
  "workflow must have at least one task registered before registering"
160
160
  )
161
161
 
162
- opts = workflow.to_proto()
163
- name = workflow.name
164
-
165
162
  try:
166
- self.client.admin.put_workflow(name, opts)
163
+ self.client.admin.put_workflow(workflow.to_proto())
167
164
  except Exception as e:
168
165
  logger.error(f"failed to register workflow: {workflow.name}")
169
166
  logger.error(e)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hatchet-sdk
3
- Version: 1.6.5
3
+ Version: 1.8.0
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: Alexander Belanger
@@ -1,6 +1,6 @@
1
1
  hatchet_sdk/__init__.py,sha256=LUj6VyGVSHCYTQTaoyiVhjyJLOfv6gMCmb-s4hRyISM,10031
2
2
  hatchet_sdk/client.py,sha256=tbOeMuaJmgpyYSQg8QUz_J4AdqRNvV9E0aEZpgsiZTE,2207
3
- hatchet_sdk/clients/admin.py,sha256=zZKqjqjiq6_D2S5INuJBXdkyh5Owk65FMz6V6PC5Ta4,17692
3
+ hatchet_sdk/clients/admin.py,sha256=7odhvNiRnCCXcmoOTPzbGePxnzDKJyU0yoEbyRWH_UA,17108
4
4
  hatchet_sdk/clients/dispatcher/action_listener.py,sha256=IwI2DKXTaPjqekZW8i6LXw4GOTtI2YdqR8PLUIhxooA,16955
5
5
  hatchet_sdk/clients/dispatcher/dispatcher.py,sha256=IL-hDXG8Lzas9FieVuNr47E_3Gvpc-aL4Xu_l385Vp8,8140
6
6
  hatchet_sdk/clients/event_ts.py,sha256=MudFszIb9IcPKQYvBTzcatPkcWEy3nxbAtEQ0_NYxMg,2094
@@ -9,7 +9,7 @@ hatchet_sdk/clients/listeners/durable_event_listener.py,sha256=jpqnbZsuouWk3XaOI
9
9
  hatchet_sdk/clients/listeners/pooled_listener.py,sha256=1rodfIeqmHRF-u-PB6cBJbOU8NrvToLTyGigJMydpGo,8496
10
10
  hatchet_sdk/clients/listeners/run_event_listener.py,sha256=rIjBLRF7d7FBoEq7RKbmbOA84lX_hHSU26trwnthqV8,10230
11
11
  hatchet_sdk/clients/listeners/workflow_listener.py,sha256=EhBZZnHiidDLvAc4r54Re_LJXVypinbgTE9qKBybxj8,2054
12
- hatchet_sdk/clients/rest/__init__.py,sha256=Bee4HPFiMGDHx5xbHkxxVbLBz_mDgSZUqh-nIhvsD1k,16511
12
+ hatchet_sdk/clients/rest/__init__.py,sha256=5lTVCDrwielWr5A_dnCL4xNiVWnyS1zLXLNxINM_p4Y,16664
13
13
  hatchet_sdk/clients/rest/api/__init__.py,sha256=XWlkH9iwpQvJHDqKe7kWl3MUzcTOaH-JiFZbki_fg_U,1200
14
14
  hatchet_sdk/clients/rest/api/api_token_api.py,sha256=xzqMH_-wajBA0qLLs5Ta7tYg4FOLq0NjATyhZ1SV9jo,33433
15
15
  hatchet_sdk/clients/rest/api/default_api.py,sha256=Y0jEhatVpdIX_W2MCt_n40K6iKvVegDB70qxexkeZDI,88677
@@ -22,18 +22,18 @@ hatchet_sdk/clients/rest/api/rate_limits_api.py,sha256=e3CIX35R8SkV8LrgLMPCAy6Kz
22
22
  hatchet_sdk/clients/rest/api/slack_api.py,sha256=0xIUw3_1_3hSTn2yw7fLRO5yb38nYLu5aLM7IE2pnwk,21894
23
23
  hatchet_sdk/clients/rest/api/sns_api.py,sha256=1LfhnZEA450uHwtZCoM_wycOeH4UGwfNP1pw4RWSe08,33641
24
24
  hatchet_sdk/clients/rest/api/step_run_api.py,sha256=rqP4UIJSkw8DwbDnlEgupBDWUL0jlVH_Rm7bNGMUoG8,84505
25
- hatchet_sdk/clients/rest/api/task_api.py,sha256=x2m8VTvpYJuWZ58KWS4EnKItlxJgP0Ch8_89t2yKlF8,86367
25
+ hatchet_sdk/clients/rest/api/task_api.py,sha256=rpppMT70gverBsDYaI9owYUwaDVicxIZRqsCBqPfVi8,87464
26
26
  hatchet_sdk/clients/rest/api/tenant_api.py,sha256=LYUdJSsg-O-Y_7cuCDdtDHP5P0BQ9ch8RFLQKIiIreQ,177493
27
27
  hatchet_sdk/clients/rest/api/user_api.py,sha256=NYuEKLeBjXO4q8gyYq1thtbuRm9m3g0R6-q6LIfv83U,115780
28
28
  hatchet_sdk/clients/rest/api/worker_api.py,sha256=56jRXsyK7SDENly2b019EO80d8xOHU4bZnmOmjKY1iQ,33049
29
- hatchet_sdk/clients/rest/api/workflow_api.py,sha256=o2Dov7KmjjlRmsnZaeOjPMsPWo3G80wD1vqSdCOyxoA,249814
29
+ hatchet_sdk/clients/rest/api/workflow_api.py,sha256=rpPXy5xZDZWo1GXQGLapTC3A5M_spk1zoK_vu_J7SVA,251652
30
30
  hatchet_sdk/clients/rest/api/workflow_run_api.py,sha256=Jvge80z6DhlqL9OuLzUC49OtojeiCuagrMbNBThMYI4,78120
31
- hatchet_sdk/clients/rest/api/workflow_runs_api.py,sha256=_zFmx0DTztKK2xa5BKBYhYqveIbNBc4g9DkNPIJeUxQ,70192
32
- hatchet_sdk/clients/rest/api_client.py,sha256=g1ECXTfdPHyM2yZuX4FZWZwvl5FZ9dEok0EKyeqLkRA,26813
31
+ hatchet_sdk/clients/rest/api/workflow_runs_api.py,sha256=NiDZXDUM7VapgjQ68z8MWPqZKTfz7rPBvPwGG5AJyZg,81997
32
+ hatchet_sdk/clients/rest/api_client.py,sha256=25vNKzpKVhvrGrU8T2YBLbz0Y7K0pKZwiLXF3Oc7tt0,27435
33
33
  hatchet_sdk/clients/rest/api_response.py,sha256=rSuCVGY-HE8X_WwteQP5wyANIuS-L5AmtZEUOwTicak,641
34
34
  hatchet_sdk/clients/rest/configuration.py,sha256=ijGxGorVe8OEikJruwJ0hPk1Rc0OAKOqeUrfcoEiYH8,19333
35
35
  hatchet_sdk/clients/rest/exceptions.py,sha256=5PTEjyGxLeGP8U_qqc79QzR-sN7SOhzBwknSUC-BU4c,6365
36
- hatchet_sdk/clients/rest/models/__init__.py,sha256=BAwgrsAKYGiS9A3ZtK2ROF9xjiKa3qA7Z_NqBOGgzXI,14931
36
+ hatchet_sdk/clients/rest/models/__init__.py,sha256=5Tse5Ljxu7tONV7ePuf9aFWM2oc1ehBaH90BiiAgdYA,15084
37
37
  hatchet_sdk/clients/rest/models/accept_invite_request.py,sha256=_otOis3SuTHl0F_hhYD-rYqgyxCXRn83CK_eU9oMdn4,2427
38
38
  hatchet_sdk/clients/rest/models/api_error.py,sha256=KodK1_cc28CgYGvX1WhIhTN0pAAkgq8PJXReIrMnqBA,3068
39
39
  hatchet_sdk/clients/rest/models/api_errors.py,sha256=RNmnWn1GWlG9xTvpvrTmKq-Pr70x9mcJ4-dNFBemxa8,2917
@@ -165,8 +165,10 @@ hatchet_sdk/clients/rest/models/v1_task_point_metrics.py,sha256=shKqLFLgNAKua865
165
165
  hatchet_sdk/clients/rest/models/v1_task_run_metric.py,sha256=8trEgJ_7AHAmUQi2Qty-v5XVjgN3g7VZ6gzMTjeZ1tY,2504
166
166
  hatchet_sdk/clients/rest/models/v1_task_run_status.py,sha256=tjipWHHNx7g4lUZBdu_DDZwEqSpxPKv06YiE2Q17cXo,753
167
167
  hatchet_sdk/clients/rest/models/v1_task_status.py,sha256=4Hqczjth228k8Y23vIaxAIzTpLaS9mh9I0PrTjY8JRY,742
168
- hatchet_sdk/clients/rest/models/v1_task_summary.py,sha256=GbHZN4fCkysTgfZKjaaWS-8bAFwgX7l5u4hAKLhDlw4,8371
168
+ hatchet_sdk/clients/rest/models/v1_task_summary.py,sha256=Unbtm9n-NexT37F0S0af2mYxYtWhcbuYDlk4EYh15c0,8330
169
169
  hatchet_sdk/clients/rest/models/v1_task_summary_list.py,sha256=0m-xf_lY9BwwbLky9i6fkTYUwh2K9mADHVZoRyF66o4,3510
170
+ hatchet_sdk/clients/rest/models/v1_task_timing.py,sha256=cYO73DfWGPzxvM7hUF-CXiTHfKVsGtgQalcVKoveBwo,5299
171
+ hatchet_sdk/clients/rest/models/v1_task_timing_list.py,sha256=1LFoKqFn11EJ_t7ZeWUFldWOWfG09tN_wTZu3a8e_SM,3509
170
172
  hatchet_sdk/clients/rest/models/v1_trigger_workflow_run_request.py,sha256=P-dC3O7dPr6mGJ2UZYcl3lSQoxKcX-GlYOiWkmNRMj0,3080
171
173
  hatchet_sdk/clients/rest/models/v1_workflow_run.py,sha256=0kgHJ35XjXgNfaJfb1p0KLS1Jw6VAMeMYSdts8EvuYc,5895
172
174
  hatchet_sdk/clients/rest/models/v1_workflow_run_details.py,sha256=vMnc50mT-tjfFlg2BJ58s2HhFvqvuGJaPGYAlTrLVI4,5040
@@ -242,15 +244,15 @@ hatchet_sdk/contracts/workflows_pb2.py,sha256=daEsUwZnlDQ5GGLJ8WHgLdI1Tgr3lBXxGV
242
244
  hatchet_sdk/contracts/workflows_pb2.pyi,sha256=WJ3b45pWvoNmmWTWjBJt61IiAoVn61F62AG5OrRsnd8,15538
243
245
  hatchet_sdk/contracts/workflows_pb2_grpc.py,sha256=2V8E72DlJx5qlH2yiQpVCu5cQbKUba5X7T1yNrQDF_s,10819
244
246
  hatchet_sdk/exceptions.py,sha256=HGmYSZy3bCY2rBDEOQfhYGRa7_j9GvYT9Pc0B8Ic5Ug,49
245
- hatchet_sdk/features/cron.py,sha256=OSBFBQSFSzKqDOK_6DDiiFeJN7S0yIxJUYoWsEs4XPA,9074
247
+ hatchet_sdk/features/cron.py,sha256=GM44qFidUfannW0-TpFm4ghbZRCrRvZtc9vp6QJ2RkQ,9666
246
248
  hatchet_sdk/features/logs.py,sha256=OcmgtmNyqFJI03_5ncuSy6M-Ho7AVTa8hnO0CDE3wi4,1172
247
249
  hatchet_sdk/features/metrics.py,sha256=TzAEB4Ogmgcq-EB7lEWQ9V8y-15d23ZuhAgPH6It92Y,4519
248
250
  hatchet_sdk/features/rate_limits.py,sha256=eh55Z3w75cYUthqTyoWmNxj_6tN3rjebMKm3of-vxv0,2155
249
- hatchet_sdk/features/runs.py,sha256=bplw0p-niIQUCUI4fQ4oYZS3WRffah9w2gUMyTOCLi0,14833
251
+ hatchet_sdk/features/runs.py,sha256=9kmn2AM1XVFZS9P_lR-hh6SXwW42Kh73l0WUBl5VJh8,14861
250
252
  hatchet_sdk/features/scheduled.py,sha256=1kNR8AxN1UlabNroU9TtVbptZEXfqTVE25Gxmh2lABs,8928
251
253
  hatchet_sdk/features/workers.py,sha256=vD6j7GCttu0fm23_XmBMdE0IuX4mUbL0adgMoC8Sk_E,2571
252
254
  hatchet_sdk/features/workflows.py,sha256=PFJsGXTHVfdDBDQ9WcQXcAzr7u-dN7vUpwbZ9fH0ZD8,3976
253
- hatchet_sdk/hatchet.py,sha256=kIRcvHiLgyOc1OY1uytNatUZ8qaYA4beqoKEiqFcRpE,21873
255
+ hatchet_sdk/hatchet.py,sha256=HRa__owQMeSRhtXzEfObap3ZKxUeNq2FJKOZEUVZ_CI,21795
254
256
  hatchet_sdk/labels.py,sha256=nATgxWE3lFxRTnfISEpoIRLGbMfAZsHF4lZTuG4Mfic,182
255
257
  hatchet_sdk/logger.py,sha256=5uOr52T4mImSQm1QvWT8HvZFK5WfPNh3Y1cBQZRFgUQ,333
256
258
  hatchet_sdk/metadata.py,sha256=XkRbhnghJJGCdVvF-uzyGBcNaTqpeQ3uiQvNNP1wyBc,107
@@ -258,10 +260,10 @@ hatchet_sdk/opentelemetry/instrumentor.py,sha256=GbsMZ1c9s0VRE7wwq-Iz5U9sT9fl7Zd
258
260
  hatchet_sdk/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
259
261
  hatchet_sdk/rate_limit.py,sha256=TwbCuggiZaWpYuo4mjVLlE-z1OfQ2mRBiVvCSaG3lv4,3919
260
262
  hatchet_sdk/runnables/contextvars.py,sha256=6MDocAMmlyiRW37oQ1jyx10tAlJs-xgDjR3xPoPz05g,426
261
- hatchet_sdk/runnables/standalone.py,sha256=2D31qNL7IgStrW0bO_794VDhvLxgyrahZalrlEu17WQ,11739
262
- hatchet_sdk/runnables/task.py,sha256=nZPclBbNaYRMlCLOYi91YU503MiTcGSp92Unh3_nKvs,7533
263
- hatchet_sdk/runnables/types.py,sha256=hF_8kcSWIVXgYspp67RwSfi-CFZJFTbb8mL8BHR8tG8,4889
264
- hatchet_sdk/runnables/workflow.py,sha256=mH6ZfrHbLVe9kNIUVnQYdivESvqA9G-a9d9qmJUjqwc,33562
263
+ hatchet_sdk/runnables/standalone.py,sha256=pCAIS40q9ltkK7K97ff79MzE73_k22ymZdrLdFdFwD8,15233
264
+ hatchet_sdk/runnables/task.py,sha256=5VOgi413eH8Gz9_XBxFTfbfLITTpPJYwRB2ZXshysW8,7014
265
+ hatchet_sdk/runnables/types.py,sha256=OBhqa6rvEaY4ypKtUpKHHyQxOXKYvxao_-Hknu5jVns,4802
266
+ hatchet_sdk/runnables/workflow.py,sha256=Ucjguf3SxyJzYe7R427U76iUOLDoHQMzwOQ7g9xYuQA,39765
265
267
  hatchet_sdk/token.py,sha256=KjIiInwG5Kqd_FO4BSW1x_5Uc7PFbnzIVJqr50-ZldE,779
266
268
  hatchet_sdk/utils/backoff.py,sha256=6B5Rb5nLKw_TqqgpJMYjIBV1PTTtbOMRZCveisVhg_I,353
267
269
  hatchet_sdk/utils/proto_enums.py,sha256=0UybwE3s7TcqmzoQSO8YnhgAKOS8WZXsyPchB8-eksw,1247
@@ -504,9 +506,9 @@ hatchet_sdk/worker/action_listener_process.py,sha256=KxS7-wBpfKnsq0LNSvk-MG442Lh
504
506
  hatchet_sdk/worker/runner/run_loop_manager.py,sha256=RNWKDCjR57nJ0LCoLUMi0_3pnmpqyo80mz_RaxHYGIc,3812
505
507
  hatchet_sdk/worker/runner/runner.py,sha256=z8ri-viK_avAfF6zgbVNBc-rztFDbxSwng3RHsof92w,17063
506
508
  hatchet_sdk/worker/runner/utils/capture_logs.py,sha256=nHRPSiDBqzhObM7i2X7t03OupVFnE7kQBdR2Ckgg-2w,2709
507
- hatchet_sdk/worker/worker.py,sha256=AdkYo167jNsQ3CAaxuBcqA8YjmnKEu33Lp9TKK15amg,16168
509
+ hatchet_sdk/worker/worker.py,sha256=SfUeYYGfPDVa7Hr1Tdgrzn_A0T-e_apIzW26BhsiB70,16101
508
510
  hatchet_sdk/workflow_run.py,sha256=ZwH0HLFGFVXz6jbiqSv4w0Om2XuR52Tzzw6LH4y65jQ,2765
509
- hatchet_sdk-1.6.5.dist-info/METADATA,sha256=UDOxt6AocsMoaP8zNZsU2DakoXFWDdKpz-20Ti6XjTI,3635
510
- hatchet_sdk-1.6.5.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
511
- hatchet_sdk-1.6.5.dist-info/entry_points.txt,sha256=Un_76pcLse-ZGBlwebhQpnTPyQrripeHW8J7qmEpGOk,1400
512
- hatchet_sdk-1.6.5.dist-info/RECORD,,
511
+ hatchet_sdk-1.8.0.dist-info/METADATA,sha256=MWSM2jbWn8RIm0J-On_FJy4paoq249kv1NvozdH9Y3M,3635
512
+ hatchet_sdk-1.8.0.dist-info/WHEEL,sha256=FMvqSimYX_P7y0a7UY-_Mc83r5zkBZsCYPm7Lr0Bsq4,88
513
+ hatchet_sdk-1.8.0.dist-info/entry_points.txt,sha256=Un_76pcLse-ZGBlwebhQpnTPyQrripeHW8J7qmEpGOk,1400
514
+ hatchet_sdk-1.8.0.dist-info/RECORD,,