hatchet-sdk 0.47.1__py3-none-any.whl → 1.0.0a1__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 (329) hide show
  1. hatchet_sdk/__init__.py +45 -25
  2. hatchet_sdk/client.py +19 -94
  3. hatchet_sdk/clients/admin.py +309 -389
  4. hatchet_sdk/clients/dispatcher/action_listener.py +131 -109
  5. hatchet_sdk/clients/dispatcher/dispatcher.py +39 -37
  6. hatchet_sdk/clients/durable_event_listener.py +327 -0
  7. hatchet_sdk/clients/event_ts.py +23 -10
  8. hatchet_sdk/clients/events.py +96 -99
  9. hatchet_sdk/clients/rest/__init__.py +35 -0
  10. hatchet_sdk/clients/rest/api/__init__.py +2 -0
  11. hatchet_sdk/clients/rest/api/log_api.py +258 -0
  12. hatchet_sdk/clients/rest/api/task_api.py +2200 -0
  13. hatchet_sdk/clients/rest/api/workflow_runs_api.py +1274 -116
  14. hatchet_sdk/clients/rest/api_client.py +1 -1
  15. hatchet_sdk/clients/rest/configuration.py +8 -1
  16. hatchet_sdk/clients/rest/exceptions.py +21 -0
  17. hatchet_sdk/clients/rest/models/__init__.py +33 -0
  18. hatchet_sdk/clients/rest/models/tenant.py +4 -0
  19. hatchet_sdk/clients/rest/models/tenant_version.py +37 -0
  20. hatchet_sdk/clients/rest/models/update_tenant_request.py +7 -0
  21. hatchet_sdk/clients/rest/models/v1_cancel_task_request.py +104 -0
  22. hatchet_sdk/clients/rest/models/v1_dag_children.py +102 -0
  23. hatchet_sdk/clients/rest/models/v1_log_line.py +94 -0
  24. hatchet_sdk/clients/rest/models/v1_log_line_level.py +39 -0
  25. hatchet_sdk/clients/rest/models/v1_log_line_list.py +110 -0
  26. hatchet_sdk/clients/rest/models/v1_replay_task_request.py +104 -0
  27. hatchet_sdk/clients/rest/models/v1_task.py +174 -0
  28. hatchet_sdk/clients/rest/models/v1_task_event.py +118 -0
  29. hatchet_sdk/clients/rest/models/v1_task_event_list.py +110 -0
  30. hatchet_sdk/clients/rest/models/v1_task_event_type.py +55 -0
  31. hatchet_sdk/clients/rest/models/v1_task_filter.py +106 -0
  32. hatchet_sdk/clients/rest/models/v1_task_point_metric.py +92 -0
  33. hatchet_sdk/clients/rest/models/v1_task_point_metrics.py +100 -0
  34. hatchet_sdk/clients/rest/models/v1_task_run_metric.py +88 -0
  35. hatchet_sdk/clients/rest/models/v1_task_run_status.py +40 -0
  36. hatchet_sdk/clients/rest/models/v1_task_status.py +40 -0
  37. hatchet_sdk/clients/rest/models/v1_task_summary.py +228 -0
  38. hatchet_sdk/clients/rest/models/v1_task_summary_list.py +110 -0
  39. hatchet_sdk/clients/rest/models/v1_trigger_workflow_run_request.py +95 -0
  40. hatchet_sdk/clients/rest/models/v1_workflow_run.py +171 -0
  41. hatchet_sdk/clients/rest/models/v1_workflow_run_details.py +145 -0
  42. hatchet_sdk/clients/rest/models/v1_workflow_run_display_name.py +98 -0
  43. hatchet_sdk/clients/rest/models/v1_workflow_run_display_name_list.py +114 -0
  44. hatchet_sdk/clients/rest/models/v1_workflow_type.py +37 -0
  45. hatchet_sdk/clients/rest/models/workflow_run_shape_item_for_workflow_run_details.py +104 -0
  46. hatchet_sdk/clients/rest/rest.py +37 -26
  47. hatchet_sdk/clients/rest/tenacity_utils.py +1 -1
  48. hatchet_sdk/clients/rest_client.py +153 -116
  49. hatchet_sdk/clients/run_event_listener.py +65 -60
  50. hatchet_sdk/clients/workflow_listener.py +75 -66
  51. hatchet_sdk/config.py +117 -0
  52. hatchet_sdk/connection.py +27 -13
  53. hatchet_sdk/context/__init__.py +0 -1
  54. hatchet_sdk/context/context.py +118 -280
  55. hatchet_sdk/contracts/dispatcher_pb2_grpc.py +1 -1
  56. hatchet_sdk/contracts/events_pb2.py +2 -2
  57. hatchet_sdk/contracts/events_pb2_grpc.py +1 -1
  58. hatchet_sdk/contracts/v1/dispatcher_pb2.py +36 -0
  59. hatchet_sdk/contracts/v1/dispatcher_pb2.pyi +38 -0
  60. hatchet_sdk/contracts/v1/dispatcher_pb2_grpc.py +145 -0
  61. hatchet_sdk/contracts/v1/shared/condition_pb2.py +39 -0
  62. hatchet_sdk/contracts/v1/shared/condition_pb2.pyi +72 -0
  63. hatchet_sdk/contracts/v1/shared/condition_pb2_grpc.py +29 -0
  64. hatchet_sdk/contracts/v1/workflows_pb2.py +67 -0
  65. hatchet_sdk/contracts/v1/workflows_pb2.pyi +228 -0
  66. hatchet_sdk/contracts/v1/workflows_pb2_grpc.py +234 -0
  67. hatchet_sdk/contracts/workflows_pb2_grpc.py +1 -1
  68. hatchet_sdk/features/cron.py +43 -57
  69. hatchet_sdk/features/scheduled.py +60 -74
  70. hatchet_sdk/hatchet.py +491 -218
  71. hatchet_sdk/labels.py +4 -6
  72. hatchet_sdk/metadata.py +1 -1
  73. hatchet_sdk/opentelemetry/instrumentor.py +17 -18
  74. hatchet_sdk/rate_limit.py +40 -55
  75. hatchet_sdk/runnables/contextvars.py +12 -0
  76. hatchet_sdk/runnables/standalone.py +194 -0
  77. hatchet_sdk/runnables/task.py +144 -0
  78. hatchet_sdk/runnables/types.py +138 -0
  79. hatchet_sdk/runnables/workflow.py +764 -0
  80. hatchet_sdk/token.py +13 -9
  81. hatchet_sdk/utils/aio_utils.py +0 -119
  82. hatchet_sdk/utils/proto_enums.py +47 -0
  83. hatchet_sdk/utils/timedelta_to_expression.py +23 -0
  84. hatchet_sdk/utils/typing.py +10 -2
  85. hatchet_sdk/v0/__init__.py +251 -0
  86. hatchet_sdk/v0/client.py +119 -0
  87. hatchet_sdk/v0/clients/admin.py +541 -0
  88. hatchet_sdk/v0/clients/dispatcher/action_listener.py +422 -0
  89. hatchet_sdk/v0/clients/dispatcher/dispatcher.py +204 -0
  90. hatchet_sdk/v0/clients/event_ts.py +28 -0
  91. hatchet_sdk/v0/clients/events.py +182 -0
  92. hatchet_sdk/v0/clients/rest/__init__.py +307 -0
  93. hatchet_sdk/v0/clients/rest/api/__init__.py +19 -0
  94. hatchet_sdk/v0/clients/rest/api/api_token_api.py +858 -0
  95. hatchet_sdk/v0/clients/rest/api/default_api.py +2259 -0
  96. hatchet_sdk/v0/clients/rest/api/event_api.py +2548 -0
  97. hatchet_sdk/v0/clients/rest/api/github_api.py +331 -0
  98. hatchet_sdk/v0/clients/rest/api/healthcheck_api.py +483 -0
  99. hatchet_sdk/v0/clients/rest/api/log_api.py +449 -0
  100. hatchet_sdk/v0/clients/rest/api/metadata_api.py +728 -0
  101. hatchet_sdk/v0/clients/rest/api/rate_limits_api.py +423 -0
  102. hatchet_sdk/v0/clients/rest/api/slack_api.py +577 -0
  103. hatchet_sdk/v0/clients/rest/api/sns_api.py +872 -0
  104. hatchet_sdk/v0/clients/rest/api/step_run_api.py +2202 -0
  105. hatchet_sdk/v0/clients/rest/api/tenant_api.py +4430 -0
  106. hatchet_sdk/v0/clients/rest/api/user_api.py +2888 -0
  107. hatchet_sdk/v0/clients/rest/api/worker_api.py +858 -0
  108. hatchet_sdk/v0/clients/rest/api/workflow_api.py +6312 -0
  109. hatchet_sdk/v0/clients/rest/api/workflow_run_api.py +1932 -0
  110. hatchet_sdk/v0/clients/rest/api/workflow_runs_api.py +610 -0
  111. hatchet_sdk/v0/clients/rest/api_client.py +759 -0
  112. hatchet_sdk/v0/clients/rest/api_response.py +22 -0
  113. hatchet_sdk/v0/clients/rest/configuration.py +611 -0
  114. hatchet_sdk/v0/clients/rest/exceptions.py +200 -0
  115. hatchet_sdk/v0/clients/rest/models/__init__.py +274 -0
  116. hatchet_sdk/v0/clients/rest/models/accept_invite_request.py +83 -0
  117. hatchet_sdk/v0/clients/rest/models/api_error.py +102 -0
  118. hatchet_sdk/v0/clients/rest/models/api_errors.py +100 -0
  119. hatchet_sdk/v0/clients/rest/models/api_meta.py +144 -0
  120. hatchet_sdk/v0/clients/rest/models/api_meta_auth.py +85 -0
  121. hatchet_sdk/v0/clients/rest/models/api_meta_integration.py +88 -0
  122. hatchet_sdk/v0/clients/rest/models/api_meta_posthog.py +90 -0
  123. hatchet_sdk/v0/clients/rest/models/api_resource_meta.py +98 -0
  124. hatchet_sdk/v0/clients/rest/models/api_token.py +105 -0
  125. hatchet_sdk/v0/clients/rest/models/bulk_create_event_request.py +100 -0
  126. hatchet_sdk/v0/clients/rest/models/bulk_create_event_response.py +110 -0
  127. hatchet_sdk/v0/clients/rest/models/cancel_event_request.py +85 -0
  128. hatchet_sdk/v0/clients/rest/models/cancel_step_run_request.py +83 -0
  129. hatchet_sdk/v0/clients/rest/models/concurrency_limit_strategy.py +39 -0
  130. hatchet_sdk/v0/clients/rest/models/create_api_token_request.py +92 -0
  131. hatchet_sdk/v0/clients/rest/models/create_api_token_response.py +83 -0
  132. hatchet_sdk/v0/clients/rest/models/create_cron_workflow_trigger_request.py +98 -0
  133. hatchet_sdk/v0/clients/rest/models/create_event_request.py +95 -0
  134. hatchet_sdk/v0/clients/rest/models/create_pull_request_from_step_run.py +83 -0
  135. hatchet_sdk/v0/clients/rest/models/create_sns_integration_request.py +85 -0
  136. hatchet_sdk/v0/clients/rest/models/create_tenant_alert_email_group_request.py +83 -0
  137. hatchet_sdk/v0/clients/rest/models/create_tenant_invite_request.py +86 -0
  138. hatchet_sdk/v0/clients/rest/models/create_tenant_request.py +84 -0
  139. hatchet_sdk/v0/clients/rest/models/cron_workflows.py +131 -0
  140. hatchet_sdk/v0/clients/rest/models/cron_workflows_list.py +110 -0
  141. hatchet_sdk/v0/clients/rest/models/cron_workflows_method.py +37 -0
  142. hatchet_sdk/v0/clients/rest/models/cron_workflows_order_by_field.py +37 -0
  143. hatchet_sdk/v0/clients/rest/models/event.py +143 -0
  144. hatchet_sdk/v0/clients/rest/models/event_data.py +83 -0
  145. hatchet_sdk/v0/clients/rest/models/event_key_list.py +98 -0
  146. hatchet_sdk/v0/clients/rest/models/event_list.py +110 -0
  147. hatchet_sdk/v0/clients/rest/models/event_order_by_direction.py +37 -0
  148. hatchet_sdk/v0/clients/rest/models/event_order_by_field.py +36 -0
  149. hatchet_sdk/v0/clients/rest/models/event_update_cancel200_response.py +85 -0
  150. hatchet_sdk/v0/clients/rest/models/event_workflow_run_summary.py +116 -0
  151. hatchet_sdk/v0/clients/rest/models/events.py +110 -0
  152. hatchet_sdk/v0/clients/rest/models/get_step_run_diff_response.py +100 -0
  153. hatchet_sdk/v0/clients/rest/models/github_app_installation.py +107 -0
  154. hatchet_sdk/v0/clients/rest/models/github_branch.py +86 -0
  155. hatchet_sdk/v0/clients/rest/models/github_repo.py +86 -0
  156. hatchet_sdk/v0/clients/rest/models/info_get_version200_response.py +83 -0
  157. hatchet_sdk/v0/clients/rest/models/job.py +132 -0
  158. hatchet_sdk/v0/clients/rest/models/job_run.py +176 -0
  159. hatchet_sdk/v0/clients/rest/models/job_run_status.py +41 -0
  160. hatchet_sdk/v0/clients/rest/models/link_github_repository_request.py +106 -0
  161. hatchet_sdk/v0/clients/rest/models/list_api_tokens_response.py +110 -0
  162. hatchet_sdk/v0/clients/rest/models/list_github_app_installations_response.py +112 -0
  163. hatchet_sdk/v0/clients/rest/models/list_pull_requests_response.py +100 -0
  164. hatchet_sdk/v0/clients/rest/models/list_slack_webhooks.py +110 -0
  165. hatchet_sdk/v0/clients/rest/models/list_sns_integrations.py +110 -0
  166. hatchet_sdk/v0/clients/rest/models/log_line.py +94 -0
  167. hatchet_sdk/v0/clients/rest/models/log_line_level.py +39 -0
  168. hatchet_sdk/v0/clients/rest/models/log_line_list.py +110 -0
  169. hatchet_sdk/v0/clients/rest/models/log_line_order_by_direction.py +37 -0
  170. hatchet_sdk/v0/clients/rest/models/log_line_order_by_field.py +36 -0
  171. hatchet_sdk/v0/clients/rest/models/pagination_response.py +95 -0
  172. hatchet_sdk/v0/clients/rest/models/pull_request.py +112 -0
  173. hatchet_sdk/v0/clients/rest/models/pull_request_state.py +37 -0
  174. hatchet_sdk/v0/clients/rest/models/queue_metrics.py +97 -0
  175. hatchet_sdk/v0/clients/rest/models/rate_limit.py +117 -0
  176. hatchet_sdk/v0/clients/rest/models/rate_limit_list.py +110 -0
  177. hatchet_sdk/v0/clients/rest/models/rate_limit_order_by_direction.py +37 -0
  178. hatchet_sdk/v0/clients/rest/models/rate_limit_order_by_field.py +38 -0
  179. hatchet_sdk/v0/clients/rest/models/recent_step_runs.py +118 -0
  180. hatchet_sdk/v0/clients/rest/models/reject_invite_request.py +83 -0
  181. hatchet_sdk/v0/clients/rest/models/replay_event_request.py +85 -0
  182. hatchet_sdk/v0/clients/rest/models/replay_workflow_runs_request.py +85 -0
  183. hatchet_sdk/v0/clients/rest/models/replay_workflow_runs_response.py +100 -0
  184. hatchet_sdk/v0/clients/rest/models/rerun_step_run_request.py +83 -0
  185. hatchet_sdk/v0/clients/rest/models/schedule_workflow_run_request.py +92 -0
  186. hatchet_sdk/v0/clients/rest/models/scheduled_run_status.py +42 -0
  187. hatchet_sdk/v0/clients/rest/models/scheduled_workflows.py +149 -0
  188. hatchet_sdk/v0/clients/rest/models/scheduled_workflows_list.py +110 -0
  189. hatchet_sdk/v0/clients/rest/models/scheduled_workflows_method.py +37 -0
  190. hatchet_sdk/v0/clients/rest/models/scheduled_workflows_order_by_field.py +37 -0
  191. hatchet_sdk/v0/clients/rest/models/semaphore_slots.py +113 -0
  192. hatchet_sdk/v0/clients/rest/models/slack_webhook.py +127 -0
  193. hatchet_sdk/v0/clients/rest/models/sns_integration.py +114 -0
  194. hatchet_sdk/v0/clients/rest/models/step.py +123 -0
  195. hatchet_sdk/v0/clients/rest/models/step_run.py +202 -0
  196. hatchet_sdk/v0/clients/rest/models/step_run_archive.py +142 -0
  197. hatchet_sdk/v0/clients/rest/models/step_run_archive_list.py +110 -0
  198. hatchet_sdk/v0/clients/rest/models/step_run_diff.py +91 -0
  199. hatchet_sdk/v0/clients/rest/models/step_run_event.py +122 -0
  200. hatchet_sdk/v0/clients/rest/models/step_run_event_list.py +110 -0
  201. hatchet_sdk/v0/clients/rest/models/step_run_event_reason.py +52 -0
  202. hatchet_sdk/v0/clients/rest/models/step_run_event_severity.py +38 -0
  203. hatchet_sdk/v0/clients/rest/models/step_run_status.py +44 -0
  204. hatchet_sdk/v0/clients/rest/models/tenant.py +118 -0
  205. hatchet_sdk/v0/clients/rest/models/tenant_alert_email_group.py +98 -0
  206. hatchet_sdk/v0/clients/rest/models/tenant_alert_email_group_list.py +112 -0
  207. hatchet_sdk/v0/clients/rest/models/tenant_alerting_settings.py +143 -0
  208. hatchet_sdk/v0/clients/rest/models/tenant_invite.py +120 -0
  209. hatchet_sdk/v0/clients/rest/models/tenant_invite_list.py +110 -0
  210. hatchet_sdk/v0/clients/rest/models/tenant_list.py +110 -0
  211. hatchet_sdk/v0/clients/rest/models/tenant_member.py +123 -0
  212. hatchet_sdk/v0/clients/rest/models/tenant_member_list.py +110 -0
  213. hatchet_sdk/v0/clients/rest/models/tenant_member_role.py +38 -0
  214. hatchet_sdk/v0/clients/rest/models/tenant_queue_metrics.py +116 -0
  215. hatchet_sdk/v0/clients/rest/models/tenant_resource.py +40 -0
  216. hatchet_sdk/v0/clients/rest/models/tenant_resource_limit.py +135 -0
  217. hatchet_sdk/v0/clients/rest/models/tenant_resource_policy.py +102 -0
  218. hatchet_sdk/v0/clients/rest/models/tenant_step_run_queue_metrics.py +83 -0
  219. hatchet_sdk/v0/clients/rest/models/trigger_workflow_run_request.py +91 -0
  220. hatchet_sdk/v0/clients/rest/models/update_tenant_alert_email_group_request.py +83 -0
  221. hatchet_sdk/v0/clients/rest/models/update_tenant_invite_request.py +85 -0
  222. hatchet_sdk/v0/clients/rest/models/update_tenant_request.py +137 -0
  223. hatchet_sdk/v0/clients/rest/models/update_worker_request.py +87 -0
  224. hatchet_sdk/v0/clients/rest/models/user.py +126 -0
  225. hatchet_sdk/v0/clients/rest/models/user_change_password_request.py +88 -0
  226. hatchet_sdk/v0/clients/rest/models/user_login_request.py +86 -0
  227. hatchet_sdk/v0/clients/rest/models/user_register_request.py +91 -0
  228. hatchet_sdk/v0/clients/rest/models/user_tenant_memberships_list.py +110 -0
  229. hatchet_sdk/v0/clients/rest/models/user_tenant_public.py +86 -0
  230. hatchet_sdk/v0/clients/rest/models/webhook_worker.py +100 -0
  231. hatchet_sdk/v0/clients/rest/models/webhook_worker_create_request.py +94 -0
  232. hatchet_sdk/v0/clients/rest/models/webhook_worker_create_response.py +98 -0
  233. hatchet_sdk/v0/clients/rest/models/webhook_worker_created.py +102 -0
  234. hatchet_sdk/v0/clients/rest/models/webhook_worker_list_response.py +110 -0
  235. hatchet_sdk/v0/clients/rest/models/webhook_worker_request.py +102 -0
  236. hatchet_sdk/v0/clients/rest/models/webhook_worker_request_list_response.py +104 -0
  237. hatchet_sdk/v0/clients/rest/models/webhook_worker_request_method.py +38 -0
  238. hatchet_sdk/v0/clients/rest/models/worker.py +239 -0
  239. hatchet_sdk/v0/clients/rest/models/worker_label.py +102 -0
  240. hatchet_sdk/v0/clients/rest/models/worker_list.py +110 -0
  241. hatchet_sdk/v0/clients/rest/models/worker_runtime_info.py +103 -0
  242. hatchet_sdk/v0/clients/rest/models/worker_runtime_sdks.py +38 -0
  243. hatchet_sdk/v0/clients/rest/models/worker_type.py +38 -0
  244. hatchet_sdk/v0/clients/rest/models/workflow.py +165 -0
  245. hatchet_sdk/v0/clients/rest/models/workflow_concurrency.py +107 -0
  246. hatchet_sdk/v0/clients/rest/models/workflow_deployment_config.py +136 -0
  247. hatchet_sdk/v0/clients/rest/models/workflow_kind.py +38 -0
  248. hatchet_sdk/v0/clients/rest/models/workflow_list.py +120 -0
  249. hatchet_sdk/v0/clients/rest/models/workflow_metrics.py +97 -0
  250. hatchet_sdk/v0/clients/rest/models/workflow_run.py +188 -0
  251. hatchet_sdk/v0/clients/rest/models/workflow_run_cancel200_response.py +85 -0
  252. hatchet_sdk/v0/clients/rest/models/workflow_run_list.py +110 -0
  253. hatchet_sdk/v0/clients/rest/models/workflow_run_order_by_direction.py +37 -0
  254. hatchet_sdk/v0/clients/rest/models/workflow_run_order_by_field.py +39 -0
  255. hatchet_sdk/v0/clients/rest/models/workflow_run_shape.py +186 -0
  256. hatchet_sdk/v0/clients/rest/models/workflow_run_status.py +42 -0
  257. hatchet_sdk/v0/clients/rest/models/workflow_run_triggered_by.py +112 -0
  258. hatchet_sdk/v0/clients/rest/models/workflow_runs_cancel_request.py +85 -0
  259. hatchet_sdk/v0/clients/rest/models/workflow_runs_metrics.py +94 -0
  260. hatchet_sdk/v0/clients/rest/models/workflow_runs_metrics_counts.py +104 -0
  261. hatchet_sdk/v0/clients/rest/models/workflow_tag.py +84 -0
  262. hatchet_sdk/v0/clients/rest/models/workflow_trigger_cron_ref.py +86 -0
  263. hatchet_sdk/v0/clients/rest/models/workflow_trigger_event_ref.py +86 -0
  264. hatchet_sdk/v0/clients/rest/models/workflow_triggers.py +141 -0
  265. hatchet_sdk/v0/clients/rest/models/workflow_update_request.py +85 -0
  266. hatchet_sdk/v0/clients/rest/models/workflow_version.py +170 -0
  267. hatchet_sdk/v0/clients/rest/models/workflow_version_concurrency.py +114 -0
  268. hatchet_sdk/v0/clients/rest/models/workflow_version_definition.py +85 -0
  269. hatchet_sdk/v0/clients/rest/models/workflow_version_meta.py +123 -0
  270. hatchet_sdk/v0/clients/rest/models/workflow_workers_count.py +95 -0
  271. hatchet_sdk/v0/clients/rest/rest.py +187 -0
  272. hatchet_sdk/v0/clients/rest/tenacity_utils.py +39 -0
  273. hatchet_sdk/v0/clients/rest_client.py +622 -0
  274. hatchet_sdk/v0/clients/run_event_listener.py +260 -0
  275. hatchet_sdk/v0/clients/workflow_listener.py +277 -0
  276. hatchet_sdk/v0/connection.py +63 -0
  277. hatchet_sdk/v0/context/__init__.py +1 -0
  278. hatchet_sdk/v0/context/context.py +446 -0
  279. hatchet_sdk/v0/context/worker_context.py +28 -0
  280. hatchet_sdk/v0/contracts/dispatcher_pb2.py +102 -0
  281. hatchet_sdk/v0/contracts/dispatcher_pb2.pyi +387 -0
  282. hatchet_sdk/v0/contracts/dispatcher_pb2_grpc.py +621 -0
  283. hatchet_sdk/v0/contracts/events_pb2.py +46 -0
  284. hatchet_sdk/v0/contracts/events_pb2.pyi +87 -0
  285. hatchet_sdk/v0/contracts/events_pb2_grpc.py +274 -0
  286. hatchet_sdk/v0/contracts/workflows_pb2.py +80 -0
  287. hatchet_sdk/v0/contracts/workflows_pb2.pyi +312 -0
  288. hatchet_sdk/v0/contracts/workflows_pb2_grpc.py +277 -0
  289. hatchet_sdk/v0/features/cron.py +286 -0
  290. hatchet_sdk/v0/features/scheduled.py +248 -0
  291. hatchet_sdk/v0/hatchet.py +310 -0
  292. hatchet_sdk/v0/labels.py +10 -0
  293. hatchet_sdk/v0/logger.py +13 -0
  294. hatchet_sdk/v0/metadata.py +2 -0
  295. hatchet_sdk/v0/opentelemetry/instrumentor.py +396 -0
  296. hatchet_sdk/v0/rate_limit.py +126 -0
  297. hatchet_sdk/v0/token.py +27 -0
  298. hatchet_sdk/v0/utils/aio_utils.py +137 -0
  299. hatchet_sdk/v0/utils/backoff.py +9 -0
  300. hatchet_sdk/v0/utils/typing.py +12 -0
  301. hatchet_sdk/{v2 → v0/v2}/callable.py +8 -8
  302. hatchet_sdk/{v2 → v0/v2}/concurrency.py +2 -2
  303. hatchet_sdk/{v2 → v0/v2}/hatchet.py +10 -10
  304. hatchet_sdk/v0/worker/__init__.py +1 -0
  305. hatchet_sdk/v0/worker/action_listener_process.py +294 -0
  306. hatchet_sdk/v0/worker/runner/run_loop_manager.py +112 -0
  307. hatchet_sdk/v0/worker/runner/runner.py +460 -0
  308. hatchet_sdk/v0/worker/runner/utils/capture_logs.py +81 -0
  309. hatchet_sdk/v0/worker/worker.py +391 -0
  310. hatchet_sdk/{workflow.py → v0/workflow.py} +4 -4
  311. hatchet_sdk/v0/workflow_run.py +59 -0
  312. hatchet_sdk/waits.py +120 -0
  313. hatchet_sdk/worker/__init__.py +0 -1
  314. hatchet_sdk/worker/action_listener_process.py +80 -55
  315. hatchet_sdk/worker/runner/run_loop_manager.py +46 -34
  316. hatchet_sdk/worker/runner/runner.py +82 -87
  317. hatchet_sdk/worker/runner/utils/capture_logs.py +26 -23
  318. hatchet_sdk/worker/worker.py +172 -149
  319. hatchet_sdk/workflow_run.py +7 -21
  320. {hatchet_sdk-0.47.1.dist-info → hatchet_sdk-1.0.0a1.dist-info}/METADATA +2 -2
  321. hatchet_sdk-1.0.0a1.dist-info/RECORD +505 -0
  322. {hatchet_sdk-0.47.1.dist-info → hatchet_sdk-1.0.0a1.dist-info}/entry_points.txt +2 -0
  323. hatchet_sdk/utils/serialization.py +0 -18
  324. hatchet_sdk-0.47.1.dist-info/RECORD +0 -237
  325. /hatchet_sdk/{loader.py → v0/loader.py} +0 -0
  326. /hatchet_sdk/{semver.py → v0/semver.py} +0 -0
  327. /hatchet_sdk/{utils → v0/utils}/types.py +0 -0
  328. /hatchet_sdk/{worker → v0/worker}/runner/utils/error_with_traceback.py +0 -0
  329. {hatchet_sdk-0.47.1.dist-info → hatchet_sdk-1.0.0a1.dist-info}/WHEEL +0 -0
hatchet_sdk/token.py CHANGED
@@ -1,20 +1,25 @@
1
1
  import base64
2
- import json
3
2
 
3
+ from pydantic import BaseModel
4
4
 
5
- def get_tenant_id_from_jwt(token: str) -> str:
6
- claims = extract_claims_from_jwt(token)
7
5
 
8
- return claims.get("sub")
6
+ class Claims(BaseModel):
7
+ sub: str
8
+ server_url: str
9
+ grpc_broadcast_address: str
10
+
11
+
12
+ def get_tenant_id_from_jwt(token: str) -> str:
13
+ return extract_claims_from_jwt(token).sub
9
14
 
10
15
 
11
- def get_addresses_from_jwt(token: str) -> (str, str):
16
+ def get_addresses_from_jwt(token: str) -> tuple[str, str]:
12
17
  claims = extract_claims_from_jwt(token)
13
18
 
14
- return claims.get("server_url"), claims.get("grpc_broadcast_address")
19
+ return claims.server_url, claims.grpc_broadcast_address
15
20
 
16
21
 
17
- def extract_claims_from_jwt(token: str):
22
+ def extract_claims_from_jwt(token: str) -> Claims:
18
23
  parts = token.split(".")
19
24
  if len(parts) != 3:
20
25
  raise ValueError("Invalid token format")
@@ -22,6 +27,5 @@ def extract_claims_from_jwt(token: str):
22
27
  claims_part = parts[1]
23
28
  claims_part += "=" * ((4 - len(claims_part) % 4) % 4) # Padding for base64 decoding
24
29
  claims_data = base64.urlsafe_b64decode(claims_part)
25
- claims = json.loads(claims_data)
26
30
 
27
- return claims
31
+ return Claims.model_validate_json(claims_data)
@@ -1,123 +1,4 @@
1
1
  import asyncio
2
- import inspect
3
- from concurrent.futures import Executor
4
- from functools import partial, wraps
5
- from threading import Thread
6
- from typing import Any
7
-
8
-
9
- ## TODO: Stricter typing here
10
- def sync_to_async(func: Any) -> Any:
11
- """
12
- A decorator to run a synchronous function or coroutine in an asynchronous context with added
13
- asyncio loop safety.
14
-
15
- This decorator allows you to safely call synchronous functions or coroutines from an
16
- asynchronous function by running them in an executor.
17
-
18
- Args:
19
- func (callable): The synchronous function or coroutine to be run asynchronously.
20
-
21
- Returns:
22
- callable: An asynchronous wrapper function that runs the given function in an executor.
23
-
24
- Example:
25
- @sync_to_async
26
- def sync_function(x, y):
27
- return x + y
28
-
29
- @sync_to_async
30
- async def async_function(x, y):
31
- return x + y
32
-
33
-
34
- def undecorated_function(x, y):
35
- return x + y
36
-
37
- async def main():
38
- result1 = await sync_function(1, 2)
39
- result2 = await async_function(3, 4)
40
- result3 = await sync_to_async(undecorated_function)(5, 6)
41
- print(result1, result2, result3)
42
-
43
- asyncio.run(main())
44
- """
45
-
46
- ## TODO: Stricter typing here
47
- @wraps(func)
48
- async def run(
49
- *args: Any,
50
- loop: asyncio.AbstractEventLoop | None = None,
51
- executor: Executor | None = None,
52
- **kwargs: Any
53
- ) -> Any:
54
- """
55
- The asynchronous wrapper function that runs the given function in an executor.
56
-
57
- Args:
58
- *args: Positional arguments to pass to the function.
59
- loop (asyncio.AbstractEventLoop, optional): The event loop to use. If None, the current running loop is used.
60
- executor (concurrent.futures.Executor, optional): The executor to use. If None, the default executor is used.
61
- **kwargs: Keyword arguments to pass to the function.
62
-
63
- Returns:
64
- The result of the function call.
65
- """
66
- if loop is None:
67
- loop = asyncio.get_running_loop()
68
-
69
- if inspect.iscoroutinefunction(func):
70
- # Wrap the coroutine to run it in an executor
71
- async def wrapper() -> Any:
72
- return await func(*args, **kwargs)
73
-
74
- pfunc = partial(asyncio.run, wrapper())
75
- return await loop.run_in_executor(executor, pfunc)
76
- else:
77
- # Run the synchronous function in an executor
78
- pfunc = partial(func, *args, **kwargs)
79
- return await loop.run_in_executor(executor, pfunc)
80
-
81
- return run
82
-
83
-
84
- class EventLoopThread:
85
- """A class that manages an asyncio event loop running in a separate thread."""
86
-
87
- def __init__(self) -> None:
88
- """
89
- Initializes the EventLoopThread by creating an event loop
90
- and setting up a thread to run the loop.
91
- """
92
- self.loop = asyncio.new_event_loop()
93
- self.thread = Thread(target=self.run_loop_in_thread, args=(self.loop,))
94
-
95
- def __enter__(self, *a, **kw) -> asyncio.AbstractEventLoop:
96
- """
97
- Starts the thread running the event loop when entering the context.
98
-
99
- Returns:
100
- asyncio.AbstractEventLoop: The event loop running in the separate thread.
101
- """
102
- self.thread.start()
103
- return self.loop
104
-
105
- def __exit__(self, *a, **kw) -> None:
106
- """
107
- Stops the event loop and joins the thread when exiting the context.
108
- """
109
- self.loop.call_soon_threadsafe(self.loop.stop)
110
- self.thread.join()
111
-
112
- def run_loop_in_thread(self, loop: asyncio.AbstractEventLoop) -> None:
113
- """
114
- Sets the event loop for the current thread and runs it forever.
115
-
116
- Args:
117
- loop (asyncio.AbstractEventLoop): The event loop to run.
118
- """
119
- asyncio.set_event_loop(loop)
120
- loop.run_forever()
121
2
 
122
3
 
123
4
  def get_active_event_loop() -> asyncio.AbstractEventLoop | None:
@@ -0,0 +1,47 @@
1
+ from enum import Enum
2
+ from typing import Type, TypeVar, overload
3
+
4
+ from google.protobuf.internal.enum_type_wrapper import EnumTypeWrapper
5
+
6
+ TProtoEnumValue = TypeVar("TProtoEnumValue", bound=int)
7
+
8
+ TProtoEnum = TypeVar("TProtoEnum", bound=EnumTypeWrapper)
9
+ TPythonEnum = TypeVar("TPythonEnum", bound=Enum)
10
+
11
+
12
+ def convert_python_enum_to_proto(
13
+ value: TPythonEnum | None, proto_enum: TProtoEnum
14
+ ) -> int | None:
15
+ if value is None:
16
+ return None
17
+
18
+ names = [item.name for item in proto_enum.DESCRIPTOR.values]
19
+
20
+ for name in names:
21
+ if name == value.name:
22
+ return proto_enum.Value(value.name)
23
+
24
+ raise ValueError(f"Value must be one of {names}. Got: {value}")
25
+
26
+
27
+ @overload
28
+ def convert_proto_enum_to_python(
29
+ value: TProtoEnumValue, python_enum_class: Type[TPythonEnum], proto_enum: TProtoEnum
30
+ ) -> TPythonEnum: ...
31
+
32
+
33
+ @overload
34
+ def convert_proto_enum_to_python(
35
+ value: None, python_enum_class: Type[TPythonEnum], proto_enum: TProtoEnum
36
+ ) -> None: ...
37
+
38
+
39
+ def convert_proto_enum_to_python(
40
+ value: TProtoEnumValue | None,
41
+ python_enum_class: Type[TPythonEnum],
42
+ proto_enum: TProtoEnum,
43
+ ) -> TPythonEnum | None:
44
+ if value is None:
45
+ return None
46
+
47
+ return python_enum_class[proto_enum.Name(value)]
@@ -0,0 +1,23 @@
1
+ from datetime import timedelta
2
+
3
+ DAY = 86400
4
+ HOUR = 3600
5
+ MINUTE = 60
6
+
7
+ Duration = timedelta | str
8
+
9
+
10
+ def timedelta_to_expr(td: Duration) -> str:
11
+ if isinstance(td, str):
12
+ return td
13
+
14
+ seconds = td.seconds
15
+
16
+ if seconds % DAY == 0:
17
+ return f"{seconds // DAY}d"
18
+ elif seconds % HOUR == 0:
19
+ return f"{seconds // HOUR}h"
20
+ elif seconds % MINUTE == 0:
21
+ return f"{seconds // MINUTE}m"
22
+ else:
23
+ return f"{seconds}s"
@@ -1,12 +1,20 @@
1
- from typing import Any, Type, TypeGuard, TypeVar
1
+ from typing import Any, Mapping, Type, TypeGuard, TypeVar
2
2
 
3
3
  from pydantic import BaseModel
4
4
 
5
5
  T = TypeVar("T", bound=BaseModel)
6
6
 
7
7
 
8
- def is_basemodel_subclass(model: Any) -> bool:
8
+ def is_basemodel_subclass(model: Any) -> TypeGuard[Type[BaseModel]]:
9
9
  try:
10
10
  return issubclass(model, BaseModel)
11
11
  except TypeError:
12
12
  return False
13
+
14
+
15
+ class WorkflowValidator(BaseModel):
16
+ workflow_input: Type[BaseModel] | None = None
17
+ step_output: Type[BaseModel] | None = None
18
+
19
+
20
+ JSONSerializableMapping = Mapping[str, Any]
@@ -0,0 +1,251 @@
1
+ from hatchet_sdk.v0.clients.rest.models.accept_invite_request import AcceptInviteRequest
2
+
3
+ # import models into sdk package
4
+ from hatchet_sdk.v0.clients.rest.models.api_error import APIError
5
+ from hatchet_sdk.v0.clients.rest.models.api_errors import APIErrors
6
+ from hatchet_sdk.v0.clients.rest.models.api_meta import APIMeta
7
+ from hatchet_sdk.v0.clients.rest.models.api_meta_auth import APIMetaAuth
8
+ from hatchet_sdk.v0.clients.rest.models.api_meta_integration import APIMetaIntegration
9
+ from hatchet_sdk.v0.clients.rest.models.api_resource_meta import APIResourceMeta
10
+ from hatchet_sdk.v0.clients.rest.models.api_token import APIToken
11
+ from hatchet_sdk.v0.clients.rest.models.create_api_token_request import (
12
+ CreateAPITokenRequest,
13
+ )
14
+ from hatchet_sdk.v0.clients.rest.models.create_api_token_response import (
15
+ CreateAPITokenResponse,
16
+ )
17
+ from hatchet_sdk.v0.clients.rest.models.create_pull_request_from_step_run import (
18
+ CreatePullRequestFromStepRun,
19
+ )
20
+ from hatchet_sdk.v0.clients.rest.models.create_tenant_invite_request import (
21
+ CreateTenantInviteRequest,
22
+ )
23
+ from hatchet_sdk.v0.clients.rest.models.create_tenant_request import CreateTenantRequest
24
+ from hatchet_sdk.v0.clients.rest.models.event import Event
25
+ from hatchet_sdk.v0.clients.rest.models.event_data import EventData
26
+ from hatchet_sdk.v0.clients.rest.models.event_key_list import EventKeyList
27
+ from hatchet_sdk.v0.clients.rest.models.event_list import EventList
28
+ from hatchet_sdk.v0.clients.rest.models.event_order_by_direction import (
29
+ EventOrderByDirection,
30
+ )
31
+ from hatchet_sdk.v0.clients.rest.models.event_order_by_field import EventOrderByField
32
+ from hatchet_sdk.v0.clients.rest.models.event_workflow_run_summary import (
33
+ EventWorkflowRunSummary,
34
+ )
35
+ from hatchet_sdk.v0.clients.rest.models.get_step_run_diff_response import (
36
+ GetStepRunDiffResponse,
37
+ )
38
+ from hatchet_sdk.v0.clients.rest.models.github_app_installation import (
39
+ GithubAppInstallation,
40
+ )
41
+ from hatchet_sdk.v0.clients.rest.models.github_branch import GithubBranch
42
+ from hatchet_sdk.v0.clients.rest.models.github_repo import GithubRepo
43
+ from hatchet_sdk.v0.clients.rest.models.job import Job
44
+ from hatchet_sdk.v0.clients.rest.models.job_run import JobRun
45
+ from hatchet_sdk.v0.clients.rest.models.job_run_status import JobRunStatus
46
+ from hatchet_sdk.v0.clients.rest.models.link_github_repository_request import (
47
+ LinkGithubRepositoryRequest,
48
+ )
49
+ from hatchet_sdk.v0.clients.rest.models.list_api_tokens_response import (
50
+ ListAPITokensResponse,
51
+ )
52
+ from hatchet_sdk.v0.clients.rest.models.list_github_app_installations_response import (
53
+ ListGithubAppInstallationsResponse,
54
+ )
55
+ from hatchet_sdk.v0.clients.rest.models.list_pull_requests_response import (
56
+ ListPullRequestsResponse,
57
+ )
58
+ from hatchet_sdk.v0.clients.rest.models.log_line import LogLine
59
+ from hatchet_sdk.v0.clients.rest.models.log_line_level import LogLineLevel
60
+ from hatchet_sdk.v0.clients.rest.models.log_line_list import LogLineList
61
+ from hatchet_sdk.v0.clients.rest.models.log_line_order_by_direction import (
62
+ LogLineOrderByDirection,
63
+ )
64
+ from hatchet_sdk.v0.clients.rest.models.log_line_order_by_field import (
65
+ LogLineOrderByField,
66
+ )
67
+ from hatchet_sdk.v0.clients.rest.models.pagination_response import PaginationResponse
68
+ from hatchet_sdk.v0.clients.rest.models.pull_request import PullRequest
69
+ from hatchet_sdk.v0.clients.rest.models.pull_request_state import PullRequestState
70
+ from hatchet_sdk.v0.clients.rest.models.reject_invite_request import RejectInviteRequest
71
+ from hatchet_sdk.v0.clients.rest.models.replay_event_request import ReplayEventRequest
72
+ from hatchet_sdk.v0.clients.rest.models.rerun_step_run_request import (
73
+ RerunStepRunRequest,
74
+ )
75
+ from hatchet_sdk.v0.clients.rest.models.step import Step
76
+ from hatchet_sdk.v0.clients.rest.models.step_run import StepRun
77
+ from hatchet_sdk.v0.clients.rest.models.step_run_diff import StepRunDiff
78
+ from hatchet_sdk.v0.clients.rest.models.step_run_status import StepRunStatus
79
+ from hatchet_sdk.v0.clients.rest.models.tenant import Tenant
80
+ from hatchet_sdk.v0.clients.rest.models.tenant_invite import TenantInvite
81
+ from hatchet_sdk.v0.clients.rest.models.tenant_invite_list import TenantInviteList
82
+ from hatchet_sdk.v0.clients.rest.models.tenant_list import TenantList
83
+ from hatchet_sdk.v0.clients.rest.models.tenant_member import TenantMember
84
+ from hatchet_sdk.v0.clients.rest.models.tenant_member_list import TenantMemberList
85
+ from hatchet_sdk.v0.clients.rest.models.tenant_member_role import TenantMemberRole
86
+ from hatchet_sdk.v0.clients.rest.models.trigger_workflow_run_request import (
87
+ TriggerWorkflowRunRequest,
88
+ )
89
+ from hatchet_sdk.v0.clients.rest.models.update_tenant_invite_request import (
90
+ UpdateTenantInviteRequest,
91
+ )
92
+ from hatchet_sdk.v0.clients.rest.models.user import User
93
+ from hatchet_sdk.v0.clients.rest.models.user_login_request import UserLoginRequest
94
+ from hatchet_sdk.v0.clients.rest.models.user_register_request import UserRegisterRequest
95
+ from hatchet_sdk.v0.clients.rest.models.user_tenant_memberships_list import (
96
+ UserTenantMembershipsList,
97
+ )
98
+ from hatchet_sdk.v0.clients.rest.models.user_tenant_public import UserTenantPublic
99
+ from hatchet_sdk.v0.clients.rest.models.worker_list import WorkerList
100
+ from hatchet_sdk.v0.clients.rest.models.workflow import Workflow
101
+ from hatchet_sdk.v0.clients.rest.models.workflow_deployment_config import (
102
+ WorkflowDeploymentConfig,
103
+ )
104
+ from hatchet_sdk.v0.clients.rest.models.workflow_list import WorkflowList
105
+ from hatchet_sdk.v0.clients.rest.models.workflow_run import WorkflowRun
106
+ from hatchet_sdk.v0.clients.rest.models.workflow_run_list import WorkflowRunList
107
+ from hatchet_sdk.v0.clients.rest.models.workflow_run_status import WorkflowRunStatus
108
+ from hatchet_sdk.v0.clients.rest.models.workflow_run_triggered_by import (
109
+ WorkflowRunTriggeredBy,
110
+ )
111
+ from hatchet_sdk.v0.clients.rest.models.workflow_tag import WorkflowTag
112
+ from hatchet_sdk.v0.clients.rest.models.workflow_trigger_cron_ref import (
113
+ WorkflowTriggerCronRef,
114
+ )
115
+ from hatchet_sdk.v0.clients.rest.models.workflow_trigger_event_ref import (
116
+ WorkflowTriggerEventRef,
117
+ )
118
+ from hatchet_sdk.v0.clients.rest.models.workflow_triggers import WorkflowTriggers
119
+ from hatchet_sdk.v0.clients.rest.models.workflow_version import WorkflowVersion
120
+ from hatchet_sdk.v0.clients.rest.models.workflow_version_definition import (
121
+ WorkflowVersionDefinition,
122
+ )
123
+ from hatchet_sdk.v0.clients.rest.models.workflow_version_meta import WorkflowVersionMeta
124
+ from hatchet_sdk.v0.contracts.workflows_pb2 import (
125
+ ConcurrencyLimitStrategy,
126
+ CreateWorkflowVersionOpts,
127
+ RateLimitDuration,
128
+ StickyStrategy,
129
+ WorkerLabelComparator,
130
+ )
131
+ from hatchet_sdk.v0.utils.aio_utils import sync_to_async
132
+
133
+ from .client import new_client
134
+ from .clients.admin import (
135
+ ChildTriggerWorkflowOptions,
136
+ DedupeViolationErr,
137
+ ScheduleTriggerWorkflowOptions,
138
+ TriggerWorkflowOptions,
139
+ )
140
+ from .clients.events import PushEventOptions
141
+ from .clients.run_event_listener import StepRunEventType, WorkflowRunEventType
142
+ from .context.context import Context
143
+ from .context.worker_context import WorkerContext
144
+ from .hatchet import ClientConfig, Hatchet, concurrency, on_failure_step, step, workflow
145
+ from .worker import Worker, WorkerStartOptions, WorkerStatus
146
+ from .workflow import ConcurrencyExpression
147
+
148
+ __all__ = [
149
+ "AcceptInviteRequest",
150
+ "APIError",
151
+ "APIErrors",
152
+ "APIMeta",
153
+ "APIMetaAuth",
154
+ "APIMetaIntegration",
155
+ "APIResourceMeta",
156
+ "APIToken",
157
+ "CreateAPITokenRequest",
158
+ "CreateAPITokenResponse",
159
+ "CreatePullRequestFromStepRun",
160
+ "CreateTenantInviteRequest",
161
+ "CreateTenantRequest",
162
+ "Event",
163
+ "EventData",
164
+ "EventKeyList",
165
+ "EventList",
166
+ "EventOrderByDirection",
167
+ "EventOrderByField",
168
+ "EventWorkflowRunSummary",
169
+ "GetStepRunDiffResponse",
170
+ "GithubAppInstallation",
171
+ "GithubBranch",
172
+ "GithubRepo",
173
+ "Job",
174
+ "JobRun",
175
+ "JobRunStatus",
176
+ "LinkGithubRepositoryRequest",
177
+ "ListAPITokensResponse",
178
+ "ListGithubAppInstallationsResponse",
179
+ "ListPullRequestsResponse",
180
+ "LogLine",
181
+ "LogLineLevel",
182
+ "LogLineList",
183
+ "LogLineOrderByDirection",
184
+ "LogLineOrderByField",
185
+ "PaginationResponse",
186
+ "PullRequest",
187
+ "PullRequestState",
188
+ "RejectInviteRequest",
189
+ "ReplayEventRequest",
190
+ "RerunStepRunRequest",
191
+ "Step",
192
+ "StepRun",
193
+ "StepRunDiff",
194
+ "StepRunStatus",
195
+ "sync_to_async",
196
+ "Tenant",
197
+ "TenantInvite",
198
+ "TenantInviteList",
199
+ "TenantList",
200
+ "TenantMember",
201
+ "TenantMemberList",
202
+ "TenantMemberRole",
203
+ "TriggerWorkflowRunRequest",
204
+ "UpdateTenantInviteRequest",
205
+ "User",
206
+ "UserLoginRequest",
207
+ "UserRegisterRequest",
208
+ "UserTenantMembershipsList",
209
+ "UserTenantPublic",
210
+ "Worker",
211
+ "WorkerLabelComparator",
212
+ "WorkerList",
213
+ "Workflow",
214
+ "WorkflowDeploymentConfig",
215
+ "WorkflowList",
216
+ "WorkflowRun",
217
+ "WorkflowRunList",
218
+ "WorkflowRunStatus",
219
+ "WorkflowRunTriggeredBy",
220
+ "WorkflowTag",
221
+ "WorkflowTriggerCronRef",
222
+ "WorkflowTriggerEventRef",
223
+ "WorkflowTriggers",
224
+ "WorkflowVersion",
225
+ "WorkflowVersionDefinition",
226
+ "WorkflowVersionMeta",
227
+ "ConcurrencyLimitStrategy",
228
+ "CreateWorkflowVersionOpts",
229
+ "RateLimitDuration",
230
+ "StickyStrategy",
231
+ "new_client",
232
+ "ChildTriggerWorkflowOptions",
233
+ "DedupeViolationErr",
234
+ "ScheduleTriggerWorkflowOptions",
235
+ "TriggerWorkflowOptions",
236
+ "PushEventOptions",
237
+ "StepRunEventType",
238
+ "WorkflowRunEventType",
239
+ "Context",
240
+ "WorkerContext",
241
+ "ClientConfig",
242
+ "Hatchet",
243
+ "concurrency",
244
+ "on_failure_step",
245
+ "step",
246
+ "workflow",
247
+ "Worker",
248
+ "WorkerStartOptions",
249
+ "WorkerStatus",
250
+ "ConcurrencyExpression",
251
+ ]
@@ -0,0 +1,119 @@
1
+ import asyncio
2
+ from logging import Logger
3
+ from typing import Callable
4
+
5
+ import grpc
6
+
7
+ from hatchet_sdk.v0.clients.run_event_listener import RunEventListenerClient
8
+ from hatchet_sdk.v0.clients.workflow_listener import PooledWorkflowRunListener
9
+ from hatchet_sdk.v0.connection import new_conn
10
+
11
+ from .clients.admin import AdminClient, new_admin
12
+ from .clients.dispatcher.dispatcher import DispatcherClient, new_dispatcher
13
+ from .clients.events import EventClient, new_event
14
+ from .clients.rest_client import RestApi
15
+ from .loader import ClientConfig, ConfigLoader
16
+
17
+
18
+ class Client:
19
+ admin: AdminClient
20
+ dispatcher: DispatcherClient
21
+ event: EventClient
22
+ rest: RestApi
23
+ workflow_listener: PooledWorkflowRunListener
24
+ logInterceptor: Logger
25
+ debug: bool = False
26
+
27
+ @classmethod
28
+ def from_environment(
29
+ cls,
30
+ defaults: ClientConfig = ClientConfig(),
31
+ debug: bool = False,
32
+ *opts_functions: Callable[[ClientConfig], None],
33
+ ):
34
+ try:
35
+ loop = asyncio.get_running_loop()
36
+ except RuntimeError:
37
+ loop = asyncio.new_event_loop()
38
+ asyncio.set_event_loop(loop)
39
+
40
+ config: ClientConfig = ConfigLoader(".").load_client_config(defaults)
41
+ for opt_function in opts_functions:
42
+ opt_function(config)
43
+
44
+ return cls.from_config(config, debug)
45
+
46
+ @classmethod
47
+ def from_config(
48
+ cls,
49
+ config: ClientConfig = ClientConfig(),
50
+ debug: bool = False,
51
+ ):
52
+ try:
53
+ loop = asyncio.get_running_loop()
54
+ except RuntimeError:
55
+ loop = asyncio.new_event_loop()
56
+ asyncio.set_event_loop(loop)
57
+
58
+ if config.tls_config is None:
59
+ raise ValueError("TLS config is required")
60
+
61
+ if config.host_port is None:
62
+ raise ValueError("Host and port are required")
63
+
64
+ conn: grpc.Channel = new_conn(config)
65
+
66
+ # Instantiate clients
67
+ event_client = new_event(conn, config)
68
+ admin_client = new_admin(config)
69
+ dispatcher_client = new_dispatcher(config)
70
+ rest_client = RestApi(config.server_url, config.token, config.tenant_id)
71
+ workflow_listener = None # Initialize this if needed
72
+
73
+ return cls(
74
+ event_client,
75
+ admin_client,
76
+ dispatcher_client,
77
+ workflow_listener,
78
+ rest_client,
79
+ config,
80
+ debug,
81
+ )
82
+
83
+ def __init__(
84
+ self,
85
+ event_client: EventClient,
86
+ admin_client: AdminClient,
87
+ dispatcher_client: DispatcherClient,
88
+ workflow_listener: PooledWorkflowRunListener,
89
+ rest_client: RestApi,
90
+ config: ClientConfig,
91
+ debug: bool = False,
92
+ ):
93
+ try:
94
+ loop = asyncio.get_running_loop()
95
+ except RuntimeError:
96
+ loop = asyncio.new_event_loop()
97
+ asyncio.set_event_loop(loop)
98
+
99
+ self.admin = admin_client
100
+ self.dispatcher = dispatcher_client
101
+ self.event = event_client
102
+ self.rest = rest_client
103
+ self.config = config
104
+ self.listener = RunEventListenerClient(config)
105
+ self.workflow_listener = workflow_listener
106
+ self.logInterceptor = config.logInterceptor
107
+ self.debug = debug
108
+
109
+
110
+ def with_host_port(host: str, port: int):
111
+ def with_host_port_impl(config: ClientConfig):
112
+ config.host = host
113
+ config.port = port
114
+
115
+ return with_host_port_impl
116
+
117
+
118
+ new_client = Client.from_environment
119
+ new_client_raw = Client.from_config