hatchet-sdk 1.18.1__py3-none-any.whl → 1.20.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 (234) hide show
  1. hatchet_sdk/clients/dispatcher/action_listener.py +0 -1
  2. hatchet_sdk/clients/dispatcher/dispatcher.py +0 -30
  3. hatchet_sdk/hatchet.py +0 -20
  4. hatchet_sdk/opentelemetry/instrumentor.py +1 -27
  5. hatchet_sdk/runnables/action.py +2 -5
  6. hatchet_sdk/runnables/task.py +0 -1
  7. hatchet_sdk/utils/opentelemetry.py +0 -1
  8. hatchet_sdk/worker/action_listener_process.py +0 -29
  9. hatchet_sdk/worker/runner/runner.py +1 -105
  10. {hatchet_sdk-1.18.1.dist-info → hatchet_sdk-1.20.0.dist-info}/METADATA +2 -3
  11. {hatchet_sdk-1.18.1.dist-info → hatchet_sdk-1.20.0.dist-info}/RECORD +13 -234
  12. hatchet_sdk/v0/__init__.py +0 -251
  13. hatchet_sdk/v0/client.py +0 -119
  14. hatchet_sdk/v0/clients/admin.py +0 -541
  15. hatchet_sdk/v0/clients/dispatcher/action_listener.py +0 -422
  16. hatchet_sdk/v0/clients/dispatcher/dispatcher.py +0 -204
  17. hatchet_sdk/v0/clients/event_ts.py +0 -28
  18. hatchet_sdk/v0/clients/events.py +0 -182
  19. hatchet_sdk/v0/clients/rest/__init__.py +0 -307
  20. hatchet_sdk/v0/clients/rest/api/__init__.py +0 -19
  21. hatchet_sdk/v0/clients/rest/api/api_token_api.py +0 -858
  22. hatchet_sdk/v0/clients/rest/api/default_api.py +0 -2259
  23. hatchet_sdk/v0/clients/rest/api/event_api.py +0 -2548
  24. hatchet_sdk/v0/clients/rest/api/github_api.py +0 -331
  25. hatchet_sdk/v0/clients/rest/api/healthcheck_api.py +0 -483
  26. hatchet_sdk/v0/clients/rest/api/log_api.py +0 -449
  27. hatchet_sdk/v0/clients/rest/api/metadata_api.py +0 -728
  28. hatchet_sdk/v0/clients/rest/api/rate_limits_api.py +0 -423
  29. hatchet_sdk/v0/clients/rest/api/slack_api.py +0 -577
  30. hatchet_sdk/v0/clients/rest/api/sns_api.py +0 -872
  31. hatchet_sdk/v0/clients/rest/api/step_run_api.py +0 -2202
  32. hatchet_sdk/v0/clients/rest/api/tenant_api.py +0 -4430
  33. hatchet_sdk/v0/clients/rest/api/user_api.py +0 -2888
  34. hatchet_sdk/v0/clients/rest/api/worker_api.py +0 -858
  35. hatchet_sdk/v0/clients/rest/api/workflow_api.py +0 -6312
  36. hatchet_sdk/v0/clients/rest/api/workflow_run_api.py +0 -1932
  37. hatchet_sdk/v0/clients/rest/api/workflow_runs_api.py +0 -610
  38. hatchet_sdk/v0/clients/rest/api_client.py +0 -759
  39. hatchet_sdk/v0/clients/rest/api_response.py +0 -22
  40. hatchet_sdk/v0/clients/rest/configuration.py +0 -611
  41. hatchet_sdk/v0/clients/rest/exceptions.py +0 -200
  42. hatchet_sdk/v0/clients/rest/models/__init__.py +0 -274
  43. hatchet_sdk/v0/clients/rest/models/accept_invite_request.py +0 -83
  44. hatchet_sdk/v0/clients/rest/models/api_error.py +0 -102
  45. hatchet_sdk/v0/clients/rest/models/api_errors.py +0 -100
  46. hatchet_sdk/v0/clients/rest/models/api_meta.py +0 -144
  47. hatchet_sdk/v0/clients/rest/models/api_meta_auth.py +0 -85
  48. hatchet_sdk/v0/clients/rest/models/api_meta_integration.py +0 -88
  49. hatchet_sdk/v0/clients/rest/models/api_meta_posthog.py +0 -90
  50. hatchet_sdk/v0/clients/rest/models/api_resource_meta.py +0 -98
  51. hatchet_sdk/v0/clients/rest/models/api_token.py +0 -105
  52. hatchet_sdk/v0/clients/rest/models/bulk_create_event_request.py +0 -100
  53. hatchet_sdk/v0/clients/rest/models/bulk_create_event_response.py +0 -110
  54. hatchet_sdk/v0/clients/rest/models/cancel_event_request.py +0 -85
  55. hatchet_sdk/v0/clients/rest/models/cancel_step_run_request.py +0 -83
  56. hatchet_sdk/v0/clients/rest/models/concurrency_limit_strategy.py +0 -39
  57. hatchet_sdk/v0/clients/rest/models/create_api_token_request.py +0 -92
  58. hatchet_sdk/v0/clients/rest/models/create_api_token_response.py +0 -83
  59. hatchet_sdk/v0/clients/rest/models/create_cron_workflow_trigger_request.py +0 -98
  60. hatchet_sdk/v0/clients/rest/models/create_event_request.py +0 -95
  61. hatchet_sdk/v0/clients/rest/models/create_pull_request_from_step_run.py +0 -83
  62. hatchet_sdk/v0/clients/rest/models/create_sns_integration_request.py +0 -85
  63. hatchet_sdk/v0/clients/rest/models/create_tenant_alert_email_group_request.py +0 -83
  64. hatchet_sdk/v0/clients/rest/models/create_tenant_invite_request.py +0 -86
  65. hatchet_sdk/v0/clients/rest/models/create_tenant_request.py +0 -84
  66. hatchet_sdk/v0/clients/rest/models/cron_workflows.py +0 -131
  67. hatchet_sdk/v0/clients/rest/models/cron_workflows_list.py +0 -110
  68. hatchet_sdk/v0/clients/rest/models/cron_workflows_method.py +0 -37
  69. hatchet_sdk/v0/clients/rest/models/cron_workflows_order_by_field.py +0 -37
  70. hatchet_sdk/v0/clients/rest/models/event.py +0 -143
  71. hatchet_sdk/v0/clients/rest/models/event_data.py +0 -83
  72. hatchet_sdk/v0/clients/rest/models/event_key_list.py +0 -98
  73. hatchet_sdk/v0/clients/rest/models/event_list.py +0 -110
  74. hatchet_sdk/v0/clients/rest/models/event_order_by_direction.py +0 -37
  75. hatchet_sdk/v0/clients/rest/models/event_order_by_field.py +0 -36
  76. hatchet_sdk/v0/clients/rest/models/event_update_cancel200_response.py +0 -85
  77. hatchet_sdk/v0/clients/rest/models/event_workflow_run_summary.py +0 -116
  78. hatchet_sdk/v0/clients/rest/models/events.py +0 -110
  79. hatchet_sdk/v0/clients/rest/models/get_step_run_diff_response.py +0 -100
  80. hatchet_sdk/v0/clients/rest/models/github_app_installation.py +0 -107
  81. hatchet_sdk/v0/clients/rest/models/github_branch.py +0 -86
  82. hatchet_sdk/v0/clients/rest/models/github_repo.py +0 -86
  83. hatchet_sdk/v0/clients/rest/models/info_get_version200_response.py +0 -83
  84. hatchet_sdk/v0/clients/rest/models/job.py +0 -132
  85. hatchet_sdk/v0/clients/rest/models/job_run.py +0 -176
  86. hatchet_sdk/v0/clients/rest/models/job_run_status.py +0 -41
  87. hatchet_sdk/v0/clients/rest/models/link_github_repository_request.py +0 -106
  88. hatchet_sdk/v0/clients/rest/models/list_api_tokens_response.py +0 -110
  89. hatchet_sdk/v0/clients/rest/models/list_github_app_installations_response.py +0 -112
  90. hatchet_sdk/v0/clients/rest/models/list_pull_requests_response.py +0 -100
  91. hatchet_sdk/v0/clients/rest/models/list_slack_webhooks.py +0 -110
  92. hatchet_sdk/v0/clients/rest/models/list_sns_integrations.py +0 -110
  93. hatchet_sdk/v0/clients/rest/models/log_line.py +0 -94
  94. hatchet_sdk/v0/clients/rest/models/log_line_level.py +0 -39
  95. hatchet_sdk/v0/clients/rest/models/log_line_list.py +0 -110
  96. hatchet_sdk/v0/clients/rest/models/log_line_order_by_direction.py +0 -37
  97. hatchet_sdk/v0/clients/rest/models/log_line_order_by_field.py +0 -36
  98. hatchet_sdk/v0/clients/rest/models/pagination_response.py +0 -95
  99. hatchet_sdk/v0/clients/rest/models/pull_request.py +0 -112
  100. hatchet_sdk/v0/clients/rest/models/pull_request_state.py +0 -37
  101. hatchet_sdk/v0/clients/rest/models/queue_metrics.py +0 -97
  102. hatchet_sdk/v0/clients/rest/models/rate_limit.py +0 -117
  103. hatchet_sdk/v0/clients/rest/models/rate_limit_list.py +0 -110
  104. hatchet_sdk/v0/clients/rest/models/rate_limit_order_by_direction.py +0 -37
  105. hatchet_sdk/v0/clients/rest/models/rate_limit_order_by_field.py +0 -38
  106. hatchet_sdk/v0/clients/rest/models/recent_step_runs.py +0 -118
  107. hatchet_sdk/v0/clients/rest/models/reject_invite_request.py +0 -83
  108. hatchet_sdk/v0/clients/rest/models/replay_event_request.py +0 -85
  109. hatchet_sdk/v0/clients/rest/models/replay_workflow_runs_request.py +0 -85
  110. hatchet_sdk/v0/clients/rest/models/replay_workflow_runs_response.py +0 -100
  111. hatchet_sdk/v0/clients/rest/models/rerun_step_run_request.py +0 -83
  112. hatchet_sdk/v0/clients/rest/models/schedule_workflow_run_request.py +0 -92
  113. hatchet_sdk/v0/clients/rest/models/scheduled_run_status.py +0 -42
  114. hatchet_sdk/v0/clients/rest/models/scheduled_workflows.py +0 -149
  115. hatchet_sdk/v0/clients/rest/models/scheduled_workflows_list.py +0 -110
  116. hatchet_sdk/v0/clients/rest/models/scheduled_workflows_method.py +0 -37
  117. hatchet_sdk/v0/clients/rest/models/scheduled_workflows_order_by_field.py +0 -37
  118. hatchet_sdk/v0/clients/rest/models/semaphore_slots.py +0 -113
  119. hatchet_sdk/v0/clients/rest/models/slack_webhook.py +0 -127
  120. hatchet_sdk/v0/clients/rest/models/sns_integration.py +0 -114
  121. hatchet_sdk/v0/clients/rest/models/step.py +0 -123
  122. hatchet_sdk/v0/clients/rest/models/step_run.py +0 -202
  123. hatchet_sdk/v0/clients/rest/models/step_run_archive.py +0 -142
  124. hatchet_sdk/v0/clients/rest/models/step_run_archive_list.py +0 -110
  125. hatchet_sdk/v0/clients/rest/models/step_run_diff.py +0 -91
  126. hatchet_sdk/v0/clients/rest/models/step_run_event.py +0 -122
  127. hatchet_sdk/v0/clients/rest/models/step_run_event_list.py +0 -110
  128. hatchet_sdk/v0/clients/rest/models/step_run_event_reason.py +0 -52
  129. hatchet_sdk/v0/clients/rest/models/step_run_event_severity.py +0 -38
  130. hatchet_sdk/v0/clients/rest/models/step_run_status.py +0 -44
  131. hatchet_sdk/v0/clients/rest/models/tenant.py +0 -118
  132. hatchet_sdk/v0/clients/rest/models/tenant_alert_email_group.py +0 -98
  133. hatchet_sdk/v0/clients/rest/models/tenant_alert_email_group_list.py +0 -112
  134. hatchet_sdk/v0/clients/rest/models/tenant_alerting_settings.py +0 -143
  135. hatchet_sdk/v0/clients/rest/models/tenant_invite.py +0 -120
  136. hatchet_sdk/v0/clients/rest/models/tenant_invite_list.py +0 -110
  137. hatchet_sdk/v0/clients/rest/models/tenant_list.py +0 -110
  138. hatchet_sdk/v0/clients/rest/models/tenant_member.py +0 -123
  139. hatchet_sdk/v0/clients/rest/models/tenant_member_list.py +0 -110
  140. hatchet_sdk/v0/clients/rest/models/tenant_member_role.py +0 -38
  141. hatchet_sdk/v0/clients/rest/models/tenant_queue_metrics.py +0 -116
  142. hatchet_sdk/v0/clients/rest/models/tenant_resource.py +0 -40
  143. hatchet_sdk/v0/clients/rest/models/tenant_resource_limit.py +0 -135
  144. hatchet_sdk/v0/clients/rest/models/tenant_resource_policy.py +0 -102
  145. hatchet_sdk/v0/clients/rest/models/tenant_step_run_queue_metrics.py +0 -83
  146. hatchet_sdk/v0/clients/rest/models/trigger_workflow_run_request.py +0 -91
  147. hatchet_sdk/v0/clients/rest/models/update_tenant_alert_email_group_request.py +0 -83
  148. hatchet_sdk/v0/clients/rest/models/update_tenant_invite_request.py +0 -85
  149. hatchet_sdk/v0/clients/rest/models/update_tenant_request.py +0 -137
  150. hatchet_sdk/v0/clients/rest/models/update_worker_request.py +0 -87
  151. hatchet_sdk/v0/clients/rest/models/user.py +0 -126
  152. hatchet_sdk/v0/clients/rest/models/user_change_password_request.py +0 -88
  153. hatchet_sdk/v0/clients/rest/models/user_login_request.py +0 -86
  154. hatchet_sdk/v0/clients/rest/models/user_register_request.py +0 -91
  155. hatchet_sdk/v0/clients/rest/models/user_tenant_memberships_list.py +0 -110
  156. hatchet_sdk/v0/clients/rest/models/user_tenant_public.py +0 -86
  157. hatchet_sdk/v0/clients/rest/models/webhook_worker.py +0 -100
  158. hatchet_sdk/v0/clients/rest/models/webhook_worker_create_request.py +0 -94
  159. hatchet_sdk/v0/clients/rest/models/webhook_worker_create_response.py +0 -98
  160. hatchet_sdk/v0/clients/rest/models/webhook_worker_created.py +0 -102
  161. hatchet_sdk/v0/clients/rest/models/webhook_worker_list_response.py +0 -110
  162. hatchet_sdk/v0/clients/rest/models/webhook_worker_request.py +0 -102
  163. hatchet_sdk/v0/clients/rest/models/webhook_worker_request_list_response.py +0 -104
  164. hatchet_sdk/v0/clients/rest/models/webhook_worker_request_method.py +0 -38
  165. hatchet_sdk/v0/clients/rest/models/worker.py +0 -239
  166. hatchet_sdk/v0/clients/rest/models/worker_label.py +0 -102
  167. hatchet_sdk/v0/clients/rest/models/worker_list.py +0 -110
  168. hatchet_sdk/v0/clients/rest/models/worker_runtime_info.py +0 -103
  169. hatchet_sdk/v0/clients/rest/models/worker_runtime_sdks.py +0 -38
  170. hatchet_sdk/v0/clients/rest/models/worker_type.py +0 -38
  171. hatchet_sdk/v0/clients/rest/models/workflow.py +0 -165
  172. hatchet_sdk/v0/clients/rest/models/workflow_concurrency.py +0 -107
  173. hatchet_sdk/v0/clients/rest/models/workflow_deployment_config.py +0 -136
  174. hatchet_sdk/v0/clients/rest/models/workflow_kind.py +0 -38
  175. hatchet_sdk/v0/clients/rest/models/workflow_list.py +0 -120
  176. hatchet_sdk/v0/clients/rest/models/workflow_metrics.py +0 -97
  177. hatchet_sdk/v0/clients/rest/models/workflow_run.py +0 -188
  178. hatchet_sdk/v0/clients/rest/models/workflow_run_cancel200_response.py +0 -85
  179. hatchet_sdk/v0/clients/rest/models/workflow_run_list.py +0 -110
  180. hatchet_sdk/v0/clients/rest/models/workflow_run_order_by_direction.py +0 -37
  181. hatchet_sdk/v0/clients/rest/models/workflow_run_order_by_field.py +0 -39
  182. hatchet_sdk/v0/clients/rest/models/workflow_run_shape.py +0 -186
  183. hatchet_sdk/v0/clients/rest/models/workflow_run_status.py +0 -42
  184. hatchet_sdk/v0/clients/rest/models/workflow_run_triggered_by.py +0 -112
  185. hatchet_sdk/v0/clients/rest/models/workflow_runs_cancel_request.py +0 -85
  186. hatchet_sdk/v0/clients/rest/models/workflow_runs_metrics.py +0 -94
  187. hatchet_sdk/v0/clients/rest/models/workflow_runs_metrics_counts.py +0 -104
  188. hatchet_sdk/v0/clients/rest/models/workflow_tag.py +0 -84
  189. hatchet_sdk/v0/clients/rest/models/workflow_trigger_cron_ref.py +0 -86
  190. hatchet_sdk/v0/clients/rest/models/workflow_trigger_event_ref.py +0 -86
  191. hatchet_sdk/v0/clients/rest/models/workflow_triggers.py +0 -141
  192. hatchet_sdk/v0/clients/rest/models/workflow_update_request.py +0 -85
  193. hatchet_sdk/v0/clients/rest/models/workflow_version.py +0 -170
  194. hatchet_sdk/v0/clients/rest/models/workflow_version_concurrency.py +0 -114
  195. hatchet_sdk/v0/clients/rest/models/workflow_version_definition.py +0 -85
  196. hatchet_sdk/v0/clients/rest/models/workflow_version_meta.py +0 -123
  197. hatchet_sdk/v0/clients/rest/models/workflow_workers_count.py +0 -95
  198. hatchet_sdk/v0/clients/rest/rest.py +0 -187
  199. hatchet_sdk/v0/clients/rest/tenacity_utils.py +0 -39
  200. hatchet_sdk/v0/clients/rest_client.py +0 -622
  201. hatchet_sdk/v0/clients/run_event_listener.py +0 -260
  202. hatchet_sdk/v0/clients/workflow_listener.py +0 -277
  203. hatchet_sdk/v0/connection.py +0 -63
  204. hatchet_sdk/v0/context/__init__.py +0 -1
  205. hatchet_sdk/v0/context/context.py +0 -446
  206. hatchet_sdk/v0/context/worker_context.py +0 -28
  207. hatchet_sdk/v0/features/cron.py +0 -286
  208. hatchet_sdk/v0/features/scheduled.py +0 -248
  209. hatchet_sdk/v0/hatchet.py +0 -310
  210. hatchet_sdk/v0/labels.py +0 -10
  211. hatchet_sdk/v0/loader.py +0 -244
  212. hatchet_sdk/v0/metadata.py +0 -2
  213. hatchet_sdk/v0/opentelemetry/instrumentor.py +0 -393
  214. hatchet_sdk/v0/rate_limit.py +0 -126
  215. hatchet_sdk/v0/semver.py +0 -30
  216. hatchet_sdk/v0/token.py +0 -27
  217. hatchet_sdk/v0/utils/aio_utils.py +0 -137
  218. hatchet_sdk/v0/utils/backoff.py +0 -9
  219. hatchet_sdk/v0/utils/types.py +0 -8
  220. hatchet_sdk/v0/utils/typing.py +0 -12
  221. hatchet_sdk/v0/v2/callable.py +0 -202
  222. hatchet_sdk/v0/v2/concurrency.py +0 -47
  223. hatchet_sdk/v0/v2/hatchet.py +0 -224
  224. hatchet_sdk/v0/worker/__init__.py +0 -1
  225. hatchet_sdk/v0/worker/action_listener_process.py +0 -294
  226. hatchet_sdk/v0/worker/runner/run_loop_manager.py +0 -112
  227. hatchet_sdk/v0/worker/runner/runner.py +0 -460
  228. hatchet_sdk/v0/worker/runner/utils/capture_logs.py +0 -81
  229. hatchet_sdk/v0/worker/runner/utils/error_with_traceback.py +0 -6
  230. hatchet_sdk/v0/worker/worker.py +0 -391
  231. hatchet_sdk/v0/workflow.py +0 -261
  232. hatchet_sdk/v0/workflow_run.py +0 -59
  233. {hatchet_sdk-1.18.1.dist-info → hatchet_sdk-1.20.0.dist-info}/WHEEL +0 -0
  234. {hatchet_sdk-1.18.1.dist-info → hatchet_sdk-1.20.0.dist-info}/entry_points.txt +0 -0
hatchet_sdk/v0/hatchet.py DELETED
@@ -1,310 +0,0 @@
1
- import asyncio
2
- import logging
3
- from typing import Any, Callable, Optional, ParamSpec, Type, TypeVar, Union
4
-
5
- from pydantic import BaseModel
6
- from typing_extensions import deprecated
7
-
8
- from hatchet_sdk.contracts.workflows_pb2 import (
9
- ConcurrencyLimitStrategy,
10
- CreateStepRateLimit,
11
- DesiredWorkerLabels,
12
- StickyStrategy,
13
- )
14
- from hatchet_sdk.v0.clients.rest_client import RestApi
15
- from hatchet_sdk.v0.context.context import Context
16
- from hatchet_sdk.v0.features.cron import CronClient
17
- from hatchet_sdk.v0.features.scheduled import ScheduledClient
18
- from hatchet_sdk.v0.labels import DesiredWorkerLabel
19
- from hatchet_sdk.v0.loader import ClientConfig, ConfigLoader
20
- from hatchet_sdk.v0.rate_limit import RateLimit
21
- from hatchet_sdk.v0.v2.callable import HatchetCallable
22
-
23
- from ..logger import logger
24
- from .client import Client, new_client, new_client_raw
25
- from .clients.admin import AdminClient
26
- from .clients.dispatcher.dispatcher import DispatcherClient
27
- from .clients.events import EventClient
28
- from .clients.run_event_listener import RunEventListenerClient
29
- from .worker.worker import Worker
30
- from .workflow import (
31
- ConcurrencyExpression,
32
- WorkflowInterface,
33
- WorkflowMeta,
34
- WorkflowStepProtocol,
35
- )
36
-
37
- T = TypeVar("T", bound=BaseModel)
38
- R = TypeVar("R")
39
- P = ParamSpec("P")
40
-
41
- TWorkflow = TypeVar("TWorkflow", bound=object)
42
-
43
-
44
- def workflow(
45
- name: str = "",
46
- on_events: list[str] | None = None,
47
- on_crons: list[str] | None = None,
48
- version: str = "",
49
- timeout: str = "60m",
50
- schedule_timeout: str = "5m",
51
- sticky: Union[StickyStrategy.Value, None] = None, # type: ignore[name-defined]
52
- default_priority: int | None = None,
53
- concurrency: ConcurrencyExpression | None = None,
54
- input_validator: Type[T] | None = None,
55
- ) -> Callable[[Type[TWorkflow]], WorkflowMeta]:
56
- on_events = on_events or []
57
- on_crons = on_crons or []
58
-
59
- def inner(cls: Type[TWorkflow]) -> WorkflowMeta:
60
- nonlocal name
61
- name = name or str(cls.__name__)
62
-
63
- setattr(cls, "on_events", on_events)
64
- setattr(cls, "on_crons", on_crons)
65
- setattr(cls, "name", name)
66
- setattr(cls, "version", version)
67
- setattr(cls, "timeout", timeout)
68
- setattr(cls, "schedule_timeout", schedule_timeout)
69
- setattr(cls, "sticky", sticky)
70
- setattr(cls, "default_priority", default_priority)
71
- setattr(cls, "concurrency_expression", concurrency)
72
-
73
- # Define a new class with the same name and bases as the original, but
74
- # with WorkflowMeta as its metaclass
75
-
76
- ## TODO: Figure out how to type this metaclass correctly
77
- setattr(cls, "input_validator", input_validator)
78
-
79
- return WorkflowMeta(name, cls.__bases__, dict(cls.__dict__))
80
-
81
- return inner
82
-
83
-
84
- def step(
85
- name: str = "",
86
- timeout: str = "",
87
- parents: list[str] | None = None,
88
- retries: int = 0,
89
- rate_limits: list[RateLimit] | None = None,
90
- desired_worker_labels: dict[str, DesiredWorkerLabel] = {},
91
- backoff_factor: float | None = None,
92
- backoff_max_seconds: int | None = None,
93
- ) -> Callable[[Callable[P, R]], Callable[P, R]]:
94
- parents = parents or []
95
-
96
- def inner(func: Callable[P, R]) -> Callable[P, R]:
97
- limits = None
98
- if rate_limits:
99
- limits = [rate_limit._req for rate_limit in rate_limits or []]
100
-
101
- setattr(func, "_step_name", name.lower() or str(func.__name__).lower())
102
- setattr(func, "_step_parents", parents)
103
- setattr(func, "_step_timeout", timeout)
104
- setattr(func, "_step_retries", retries)
105
- setattr(func, "_step_rate_limits", limits)
106
- setattr(func, "_step_backoff_factor", backoff_factor)
107
- setattr(func, "_step_backoff_max_seconds", backoff_max_seconds)
108
-
109
- def create_label(d: DesiredWorkerLabel) -> DesiredWorkerLabels:
110
- value = d["value"] if "value" in d else None
111
- return DesiredWorkerLabels(
112
- strValue=str(value) if not isinstance(value, int) else None,
113
- intValue=value if isinstance(value, int) else None,
114
- required=d["required"] if "required" in d else None, # type: ignore[arg-type]
115
- weight=d["weight"] if "weight" in d else None,
116
- comparator=d["comparator"] if "comparator" in d else None, # type: ignore[arg-type]
117
- )
118
-
119
- setattr(
120
- func,
121
- "_step_desired_worker_labels",
122
- {key: create_label(d) for key, d in desired_worker_labels.items()},
123
- )
124
-
125
- return func
126
-
127
- return inner
128
-
129
-
130
- def on_failure_step(
131
- name: str = "",
132
- timeout: str = "",
133
- retries: int = 0,
134
- rate_limits: list[RateLimit] | None = None,
135
- backoff_factor: float | None = None,
136
- backoff_max_seconds: int | None = None,
137
- ) -> Callable[..., Any]:
138
- def inner(func: Callable[[Context], Any]) -> Callable[[Context], Any]:
139
- limits = None
140
- if rate_limits:
141
- limits = [
142
- CreateStepRateLimit(key=rate_limit.static_key, units=rate_limit.units) # type: ignore[arg-type]
143
- for rate_limit in rate_limits or []
144
- ]
145
-
146
- setattr(
147
- func, "_on_failure_step_name", name.lower() or str(func.__name__).lower()
148
- )
149
- setattr(func, "_on_failure_step_timeout", timeout)
150
- setattr(func, "_on_failure_step_retries", retries)
151
- setattr(func, "_on_failure_step_rate_limits", limits)
152
- setattr(func, "_on_failure_step_backoff_factor", backoff_factor)
153
- setattr(func, "_on_failure_step_backoff_max_seconds", backoff_max_seconds)
154
-
155
- return func
156
-
157
- return inner
158
-
159
-
160
- def concurrency(
161
- name: str = "",
162
- max_runs: int = 1,
163
- limit_strategy: ConcurrencyLimitStrategy = ConcurrencyLimitStrategy.CANCEL_IN_PROGRESS,
164
- ) -> Callable[..., Any]:
165
- def inner(func: Callable[[Context], Any]) -> Callable[[Context], Any]:
166
- setattr(
167
- func,
168
- "_concurrency_fn_name",
169
- name.lower() or str(func.__name__).lower(),
170
- )
171
- setattr(func, "_concurrency_max_runs", max_runs)
172
- setattr(func, "_concurrency_limit_strategy", limit_strategy)
173
-
174
- return func
175
-
176
- return inner
177
-
178
-
179
- class HatchetRest:
180
- """
181
- Main client for interacting with the Hatchet API.
182
-
183
- This class provides access to various client interfaces and utility methods
184
- for working with Hatchet via the REST API,
185
-
186
- Attributes:
187
- rest (RestApi): Interface for REST API operations.
188
- """
189
-
190
- rest: RestApi
191
-
192
- def __init__(self, config: ClientConfig = ClientConfig()):
193
- _config: ClientConfig = ConfigLoader(".").load_client_config(config)
194
- self.rest = RestApi(_config.server_url, _config.token, _config.tenant_id)
195
-
196
-
197
- class Hatchet:
198
- """
199
- Main client for interacting with the Hatchet SDK.
200
-
201
- This class provides access to various client interfaces and utility methods
202
- for working with Hatchet workers, workflows, and steps.
203
-
204
- Attributes:
205
- cron (CronClient): Interface for cron trigger operations.
206
-
207
- admin (AdminClient): Interface for administrative operations.
208
- dispatcher (DispatcherClient): Interface for dispatching operations.
209
- event (EventClient): Interface for event-related operations.
210
- rest (RestApi): Interface for REST API operations.
211
- """
212
-
213
- _client: Client
214
- cron: CronClient
215
- scheduled: ScheduledClient
216
-
217
- @classmethod
218
- def from_environment(
219
- cls, defaults: ClientConfig = ClientConfig(), **kwargs: Any
220
- ) -> "Hatchet":
221
- return cls(client=new_client(defaults), **kwargs)
222
-
223
- @classmethod
224
- def from_config(cls, config: ClientConfig, **kwargs: Any) -> "Hatchet":
225
- return cls(client=new_client_raw(config), **kwargs)
226
-
227
- def __init__(
228
- self,
229
- debug: bool = False,
230
- client: Optional[Client] = None,
231
- config: ClientConfig = ClientConfig(),
232
- ):
233
- """
234
- Initialize a new Hatchet instance.
235
-
236
- Args:
237
- debug (bool, optional): Enable debug logging.
238
- client (Optional[Client], optional): A pre-configured Client instance.
239
- config (ClientConfig, optional): Configuration for creating a new Client.
240
- """
241
- if client is not None:
242
- self._client = client
243
- else:
244
- self._client = new_client(config, debug)
245
-
246
- if debug:
247
- logger.setLevel(logging.DEBUG)
248
-
249
- self.cron = CronClient(self._client)
250
- self.scheduled = ScheduledClient(self._client)
251
-
252
- @property
253
- @deprecated(
254
- "Direct access to client is deprecated and will be removed in a future version. Use specific client properties (Hatchet.admin, Hatchet.dispatcher, Hatchet.event, Hatchet.rest) instead. [0.32.0]",
255
- )
256
- def client(self) -> Client:
257
- return self._client
258
-
259
- @property
260
- def admin(self) -> AdminClient:
261
- return self._client.admin
262
-
263
- @property
264
- def dispatcher(self) -> DispatcherClient:
265
- return self._client.dispatcher
266
-
267
- @property
268
- def event(self) -> EventClient:
269
- return self._client.event
270
-
271
- @property
272
- def rest(self) -> RestApi:
273
- return self._client.rest
274
-
275
- @property
276
- def listener(self) -> RunEventListenerClient:
277
- return self._client.listener
278
-
279
- @property
280
- def config(self) -> ClientConfig:
281
- return self._client.config
282
-
283
- @property
284
- def tenant_id(self) -> str:
285
- return self._client.config.tenant_id
286
-
287
- concurrency = staticmethod(concurrency)
288
-
289
- workflow = staticmethod(workflow)
290
-
291
- step = staticmethod(step)
292
-
293
- on_failure_step = staticmethod(on_failure_step)
294
-
295
- def worker(
296
- self, name: str, max_runs: int | None = None, labels: dict[str, str | int] = {}
297
- ) -> Worker:
298
- try:
299
- loop = asyncio.get_running_loop()
300
- except RuntimeError:
301
- loop = None
302
-
303
- return Worker(
304
- name=name,
305
- max_runs=max_runs,
306
- labels=labels,
307
- config=self._client.config,
308
- debug=self._client.debug,
309
- owned_loop=loop is None,
310
- )
hatchet_sdk/v0/labels.py DELETED
@@ -1,10 +0,0 @@
1
- from typing import TypedDict
2
-
3
-
4
- class DesiredWorkerLabel(TypedDict, total=False):
5
- value: str | int
6
- required: bool | None = None
7
- weight: int | None = None
8
- comparator: int | None = (
9
- None # _ClassVar[WorkerLabelComparator] TODO figure out type
10
- )
hatchet_sdk/v0/loader.py DELETED
@@ -1,244 +0,0 @@
1
- import os
2
- from logging import Logger, getLogger
3
- from typing import Dict, Optional
4
- from warnings import warn
5
-
6
- import yaml
7
-
8
- from .token import get_addresses_from_jwt, get_tenant_id_from_jwt
9
-
10
-
11
- class ClientTLSConfig:
12
- def __init__(
13
- self,
14
- tls_strategy: str,
15
- cert_file: str,
16
- key_file: str,
17
- ca_file: str,
18
- server_name: str,
19
- ):
20
- self.tls_strategy = tls_strategy
21
- self.cert_file = cert_file
22
- self.key_file = key_file
23
- self.ca_file = ca_file
24
- self.server_name = server_name
25
-
26
-
27
- class ClientConfig:
28
- logInterceptor: Logger
29
-
30
- def __init__(
31
- self,
32
- tenant_id: str = None,
33
- tls_config: ClientTLSConfig = None,
34
- token: str = None,
35
- host_port: str = "localhost:7070",
36
- server_url: str = "https://app.dev.hatchet-tools.com",
37
- namespace: str = None,
38
- listener_v2_timeout: int = None,
39
- logger: Logger = None,
40
- grpc_max_recv_message_length: int = 4 * 1024 * 1024, # 4MB
41
- grpc_max_send_message_length: int = 4 * 1024 * 1024, # 4MB
42
- worker_healthcheck_port: int | None = None,
43
- worker_healthcheck_enabled: bool | None = None,
44
- worker_preset_labels: dict[str, str] = {},
45
- enable_force_kill_sync_threads: bool = False,
46
- ):
47
- self.tenant_id = tenant_id
48
- self.tls_config = tls_config
49
- self.host_port = host_port
50
- self.token = token
51
- self.server_url = server_url
52
- self.namespace = ""
53
- self.logInterceptor = logger
54
- self.grpc_max_recv_message_length = grpc_max_recv_message_length
55
- self.grpc_max_send_message_length = grpc_max_send_message_length
56
- self.worker_healthcheck_port = worker_healthcheck_port
57
- self.worker_healthcheck_enabled = worker_healthcheck_enabled
58
- self.worker_preset_labels = worker_preset_labels
59
- self.enable_force_kill_sync_threads = enable_force_kill_sync_threads
60
-
61
- if not self.logInterceptor:
62
- self.logInterceptor = getLogger()
63
-
64
- # case on whether the namespace already has a trailing underscore
65
- if namespace and not namespace.endswith("_"):
66
- self.namespace = f"{namespace}_"
67
- elif namespace:
68
- self.namespace = namespace
69
-
70
- self.namespace = self.namespace.lower()
71
-
72
- self.listener_v2_timeout = listener_v2_timeout
73
-
74
-
75
- class ConfigLoader:
76
- def __init__(self, directory: str):
77
- self.directory = directory
78
-
79
- def load_client_config(self, defaults: ClientConfig) -> ClientConfig:
80
- config_file_path = os.path.join(self.directory, "client.yaml")
81
- config_data: object = {"tls": {}}
82
-
83
- # determine if client.yaml exists
84
- if os.path.exists(config_file_path):
85
- with open(config_file_path, "r") as file:
86
- config_data = yaml.safe_load(file)
87
-
88
- def get_config_value(key, env_var):
89
- if key in config_data:
90
- return config_data[key]
91
-
92
- if self._get_env_var(env_var) is not None:
93
- return self._get_env_var(env_var)
94
-
95
- return getattr(defaults, key, None)
96
-
97
- namespace = get_config_value("namespace", "HATCHET_CLIENT_NAMESPACE")
98
-
99
- tenant_id = get_config_value("tenantId", "HATCHET_CLIENT_TENANT_ID")
100
- token = get_config_value("token", "HATCHET_CLIENT_TOKEN")
101
- listener_v2_timeout = get_config_value(
102
- "listener_v2_timeout", "HATCHET_CLIENT_LISTENER_V2_TIMEOUT"
103
- )
104
- listener_v2_timeout = int(listener_v2_timeout) if listener_v2_timeout else None
105
-
106
- if not token:
107
- raise ValueError(
108
- "Token must be set via HATCHET_CLIENT_TOKEN environment variable"
109
- )
110
-
111
- host_port = get_config_value("hostPort", "HATCHET_CLIENT_HOST_PORT")
112
- server_url: str | None = None
113
-
114
- grpc_max_recv_message_length = get_config_value(
115
- "grpc_max_recv_message_length",
116
- "HATCHET_CLIENT_GRPC_MAX_RECV_MESSAGE_LENGTH",
117
- )
118
- grpc_max_send_message_length = get_config_value(
119
- "grpc_max_send_message_length",
120
- "HATCHET_CLIENT_GRPC_MAX_SEND_MESSAGE_LENGTH",
121
- )
122
-
123
- if grpc_max_recv_message_length:
124
- grpc_max_recv_message_length = int(grpc_max_recv_message_length)
125
-
126
- if grpc_max_send_message_length:
127
- grpc_max_send_message_length = int(grpc_max_send_message_length)
128
-
129
- if not host_port:
130
- # extract host and port from token
131
- server_url, grpc_broadcast_address = get_addresses_from_jwt(token)
132
- host_port = grpc_broadcast_address
133
-
134
- if not tenant_id:
135
- tenant_id = get_tenant_id_from_jwt(token)
136
-
137
- tls_config = self._load_tls_config(config_data["tls"], host_port)
138
-
139
- worker_healthcheck_port = int(
140
- get_config_value(
141
- "worker_healthcheck_port", "HATCHET_CLIENT_WORKER_HEALTHCHECK_PORT"
142
- )
143
- or 8001
144
- )
145
-
146
- worker_healthcheck_enabled = (
147
- str(
148
- get_config_value(
149
- "worker_healthcheck_port",
150
- "HATCHET_CLIENT_WORKER_HEALTHCHECK_ENABLED",
151
- )
152
- )
153
- == "True"
154
- )
155
-
156
- # Add preset labels to the worker config
157
- worker_preset_labels: dict[str, str] = defaults.worker_preset_labels
158
-
159
- autoscaling_target = get_config_value(
160
- "autoscaling_target", "HATCHET_CLIENT_AUTOSCALING_TARGET"
161
- )
162
-
163
- if autoscaling_target:
164
- worker_preset_labels["hatchet-autoscaling-target"] = autoscaling_target
165
-
166
- legacy_otlp_headers = get_config_value(
167
- "otel_exporter_otlp_endpoint", "HATCHET_CLIENT_OTEL_EXPORTER_OTLP_ENDPOINT"
168
- )
169
-
170
- legacy_otlp_headers = get_config_value(
171
- "otel_exporter_otlp_headers", "HATCHET_CLIENT_OTEL_EXPORTER_OTLP_HEADERS"
172
- )
173
-
174
- if legacy_otlp_headers or legacy_otlp_headers:
175
- warn(
176
- "The `otel_exporter_otlp_*` fields are no longer supported as of SDK version `0.46.0`. Please see the documentation on OpenTelemetry at https://docs.hatchet.run/home/features/opentelemetry for more information on how to migrate to the new `HatchetInstrumentor`."
177
- )
178
-
179
- enable_force_kill_sync_threads = bool(
180
- get_config_value(
181
- "enable_force_kill_sync_threads",
182
- "HATCHET_CLIENT_ENABLE_FORCE_KILL_SYNC_THREADS",
183
- )
184
- == "True"
185
- or False
186
- )
187
- return ClientConfig(
188
- tenant_id=tenant_id,
189
- tls_config=tls_config,
190
- token=token,
191
- host_port=host_port,
192
- server_url=server_url,
193
- namespace=namespace,
194
- listener_v2_timeout=listener_v2_timeout,
195
- logger=defaults.logInterceptor,
196
- grpc_max_recv_message_length=grpc_max_recv_message_length,
197
- grpc_max_send_message_length=grpc_max_send_message_length,
198
- worker_healthcheck_port=worker_healthcheck_port,
199
- worker_healthcheck_enabled=worker_healthcheck_enabled,
200
- worker_preset_labels=worker_preset_labels,
201
- enable_force_kill_sync_threads=enable_force_kill_sync_threads,
202
- )
203
-
204
- def _load_tls_config(self, tls_data: Dict, host_port) -> ClientTLSConfig:
205
- tls_strategy = (
206
- tls_data["tlsStrategy"]
207
- if "tlsStrategy" in tls_data
208
- else self._get_env_var("HATCHET_CLIENT_TLS_STRATEGY")
209
- )
210
-
211
- if not tls_strategy:
212
- tls_strategy = "tls"
213
-
214
- cert_file = (
215
- tls_data["tlsCertFile"]
216
- if "tlsCertFile" in tls_data
217
- else self._get_env_var("HATCHET_CLIENT_TLS_CERT_FILE")
218
- )
219
- key_file = (
220
- tls_data["tlsKeyFile"]
221
- if "tlsKeyFile" in tls_data
222
- else self._get_env_var("HATCHET_CLIENT_TLS_KEY_FILE")
223
- )
224
- ca_file = (
225
- tls_data["tlsRootCAFile"]
226
- if "tlsRootCAFile" in tls_data
227
- else self._get_env_var("HATCHET_CLIENT_TLS_ROOT_CA_FILE")
228
- )
229
-
230
- server_name = (
231
- tls_data["tlsServerName"]
232
- if "tlsServerName" in tls_data
233
- else self._get_env_var("HATCHET_CLIENT_TLS_SERVER_NAME")
234
- )
235
-
236
- # if server_name is not set, use the host from the host_port
237
- if not server_name:
238
- server_name = host_port.split(":")[0]
239
-
240
- return ClientTLSConfig(tls_strategy, cert_file, key_file, ca_file, server_name)
241
-
242
- @staticmethod
243
- def _get_env_var(env_var: str, default: Optional[str] = None) -> str:
244
- return os.environ.get(env_var, default)
@@ -1,2 +0,0 @@
1
- def get_metadata(token: str):
2
- return [("authorization", "bearer " + token)]