hatchet-sdk 1.20.1__tar.gz → 1.21.0__tar.gz

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 (334) hide show
  1. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/PKG-INFO +5 -7
  2. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/context/context.py +24 -2
  3. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/exceptions.py +4 -0
  4. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/runs.py +12 -0
  5. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/hatchet.py +15 -7
  6. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/runnables/task.py +7 -4
  7. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/runnables/types.py +11 -5
  8. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/runnables/workflow.py +67 -15
  9. hatchet_sdk-1.21.0/hatchet_sdk/utils/typing.py +112 -0
  10. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/worker/runner/runner.py +5 -1
  11. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/worker/worker.py +24 -9
  12. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/pyproject.toml +11 -12
  13. hatchet_sdk-1.20.1/hatchet_sdk/utils/typing.py +0 -60
  14. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/README.md +0 -0
  15. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/__init__.py +0 -0
  16. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/client.py +0 -0
  17. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/admin.py +0 -0
  18. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/dispatcher/action_listener.py +0 -0
  19. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/dispatcher/dispatcher.py +0 -0
  20. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/event_ts.py +0 -0
  21. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/events.py +0 -0
  22. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/listeners/durable_event_listener.py +0 -0
  23. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/listeners/pooled_listener.py +0 -0
  24. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/listeners/run_event_listener.py +0 -0
  25. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/listeners/workflow_listener.py +0 -0
  26. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/__init__.py +0 -0
  27. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/__init__.py +0 -0
  28. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/api_token_api.py +0 -0
  29. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/cel_api.py +0 -0
  30. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/default_api.py +0 -0
  31. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/event_api.py +0 -0
  32. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/filter_api.py +0 -0
  33. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/github_api.py +0 -0
  34. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/healthcheck_api.py +0 -0
  35. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/log_api.py +0 -0
  36. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/metadata_api.py +0 -0
  37. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/rate_limits_api.py +0 -0
  38. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/slack_api.py +0 -0
  39. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/sns_api.py +0 -0
  40. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/step_run_api.py +0 -0
  41. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/task_api.py +0 -0
  42. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/tenant_api.py +0 -0
  43. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/user_api.py +0 -0
  44. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/webhook_api.py +0 -0
  45. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/worker_api.py +0 -0
  46. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/workflow_api.py +0 -0
  47. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/workflow_run_api.py +0 -0
  48. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api/workflow_runs_api.py +0 -0
  49. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api_client.py +0 -0
  50. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/api_response.py +0 -0
  51. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/configuration.py +0 -0
  52. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/exceptions.py +0 -0
  53. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/__init__.py +0 -0
  54. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/accept_invite_request.py +0 -0
  55. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/api_error.py +0 -0
  56. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/api_errors.py +0 -0
  57. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/api_meta.py +0 -0
  58. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/api_meta_auth.py +0 -0
  59. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/api_meta_integration.py +0 -0
  60. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/api_meta_posthog.py +0 -0
  61. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/api_resource_meta.py +0 -0
  62. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/api_token.py +0 -0
  63. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/bulk_create_event_request.py +0 -0
  64. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/bulk_create_event_response.py +0 -0
  65. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/cancel_event_request.py +0 -0
  66. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/cancel_step_run_request.py +0 -0
  67. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/concurrency_limit_strategy.py +0 -0
  68. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/create_api_token_request.py +0 -0
  69. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/create_api_token_response.py +0 -0
  70. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/create_cron_workflow_trigger_request.py +0 -0
  71. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/create_event_request.py +0 -0
  72. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/create_pull_request_from_step_run.py +0 -0
  73. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/create_sns_integration_request.py +0 -0
  74. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/create_tenant_alert_email_group_request.py +0 -0
  75. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/create_tenant_invite_request.py +0 -0
  76. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/create_tenant_request.py +0 -0
  77. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/cron_workflows.py +0 -0
  78. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/cron_workflows_list.py +0 -0
  79. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/cron_workflows_method.py +0 -0
  80. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/cron_workflows_order_by_field.py +0 -0
  81. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/event.py +0 -0
  82. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/event_data.py +0 -0
  83. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/event_key_list.py +0 -0
  84. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/event_list.py +0 -0
  85. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/event_order_by_direction.py +0 -0
  86. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/event_order_by_field.py +0 -0
  87. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/event_update_cancel200_response.py +0 -0
  88. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/event_workflow_run_summary.py +0 -0
  89. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/events.py +0 -0
  90. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/get_step_run_diff_response.py +0 -0
  91. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/github_app_installation.py +0 -0
  92. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/github_branch.py +0 -0
  93. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/github_repo.py +0 -0
  94. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/info_get_version200_response.py +0 -0
  95. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/job.py +0 -0
  96. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/job_run.py +0 -0
  97. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/job_run_status.py +0 -0
  98. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/link_github_repository_request.py +0 -0
  99. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/list_api_tokens_response.py +0 -0
  100. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/list_github_app_installations_response.py +0 -0
  101. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/list_pull_requests_response.py +0 -0
  102. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/list_slack_webhooks.py +0 -0
  103. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/list_sns_integrations.py +0 -0
  104. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/log_line.py +0 -0
  105. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/log_line_level.py +0 -0
  106. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/log_line_list.py +0 -0
  107. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/log_line_order_by_direction.py +0 -0
  108. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/log_line_order_by_field.py +0 -0
  109. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/pagination_response.py +0 -0
  110. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/pull_request.py +0 -0
  111. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/pull_request_state.py +0 -0
  112. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/queue_metrics.py +0 -0
  113. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/rate_limit.py +0 -0
  114. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/rate_limit_list.py +0 -0
  115. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/rate_limit_order_by_direction.py +0 -0
  116. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/rate_limit_order_by_field.py +0 -0
  117. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/recent_step_runs.py +0 -0
  118. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/registered_workflow.py +0 -0
  119. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/reject_invite_request.py +0 -0
  120. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/replay_event_request.py +0 -0
  121. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/replay_workflow_runs_request.py +0 -0
  122. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/replay_workflow_runs_response.py +0 -0
  123. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/rerun_step_run_request.py +0 -0
  124. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/schedule_workflow_run_request.py +0 -0
  125. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/scheduled_run_status.py +0 -0
  126. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/scheduled_workflows.py +0 -0
  127. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/scheduled_workflows_list.py +0 -0
  128. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/scheduled_workflows_method.py +0 -0
  129. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/scheduled_workflows_order_by_field.py +0 -0
  130. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/semaphore_slots.py +0 -0
  131. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/slack_webhook.py +0 -0
  132. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/sns_integration.py +0 -0
  133. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/step.py +0 -0
  134. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/step_run.py +0 -0
  135. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/step_run_archive.py +0 -0
  136. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/step_run_archive_list.py +0 -0
  137. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/step_run_diff.py +0 -0
  138. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/step_run_event.py +0 -0
  139. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/step_run_event_list.py +0 -0
  140. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/step_run_event_reason.py +0 -0
  141. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/step_run_event_severity.py +0 -0
  142. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/step_run_status.py +0 -0
  143. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant.py +0 -0
  144. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_alert_email_group.py +0 -0
  145. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_alert_email_group_list.py +0 -0
  146. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_alerting_settings.py +0 -0
  147. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_environment.py +0 -0
  148. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_invite.py +0 -0
  149. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_invite_list.py +0 -0
  150. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_list.py +0 -0
  151. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_member.py +0 -0
  152. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_member_list.py +0 -0
  153. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_member_role.py +0 -0
  154. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_queue_metrics.py +0 -0
  155. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_resource.py +0 -0
  156. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_resource_limit.py +0 -0
  157. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_resource_policy.py +0 -0
  158. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_step_run_queue_metrics.py +0 -0
  159. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_ui_version.py +0 -0
  160. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/tenant_version.py +0 -0
  161. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/trigger_workflow_run_request.py +0 -0
  162. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/update_cron_workflow_trigger_request.py +0 -0
  163. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/update_tenant_alert_email_group_request.py +0 -0
  164. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/update_tenant_invite_request.py +0 -0
  165. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/update_tenant_member_request.py +0 -0
  166. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/update_tenant_request.py +0 -0
  167. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/update_worker_request.py +0 -0
  168. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/user.py +0 -0
  169. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/user_change_password_request.py +0 -0
  170. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/user_login_request.py +0 -0
  171. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/user_register_request.py +0 -0
  172. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/user_tenant_memberships_list.py +0 -0
  173. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/user_tenant_public.py +0 -0
  174. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_cancel_task_request.py +0 -0
  175. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_cancelled_tasks.py +0 -0
  176. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_cel_debug_error_response.py +0 -0
  177. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_cel_debug_request.py +0 -0
  178. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_cel_debug_response.py +0 -0
  179. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_cel_debug_response_status.py +0 -0
  180. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_cel_debug_success_response.py +0 -0
  181. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_create_filter_request.py +0 -0
  182. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_create_webhook_request.py +0 -0
  183. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_create_webhook_request_api_key.py +0 -0
  184. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_create_webhook_request_api_key_all_of_auth_type.py +0 -0
  185. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_create_webhook_request_base.py +0 -0
  186. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_create_webhook_request_basic_auth.py +0 -0
  187. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_create_webhook_request_basic_auth_all_of_auth_type.py +0 -0
  188. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_create_webhook_request_hmac.py +0 -0
  189. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_create_webhook_request_hmac_all_of_auth_type.py +0 -0
  190. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_dag_children.py +0 -0
  191. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_event.py +0 -0
  192. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_event_list.py +0 -0
  193. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_event_triggered_run.py +0 -0
  194. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_event_workflow_run_summary.py +0 -0
  195. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_filter.py +0 -0
  196. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_filter_list.py +0 -0
  197. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_log_line.py +0 -0
  198. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_log_line_level.py +0 -0
  199. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_log_line_list.py +0 -0
  200. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_replay_task_request.py +0 -0
  201. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_replayed_tasks.py +0 -0
  202. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task.py +0 -0
  203. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_event.py +0 -0
  204. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_event_list.py +0 -0
  205. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_event_type.py +0 -0
  206. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_filter.py +0 -0
  207. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_point_metric.py +0 -0
  208. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_point_metrics.py +0 -0
  209. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_run_metric.py +0 -0
  210. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_run_status.py +0 -0
  211. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_status.py +0 -0
  212. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_summary.py +0 -0
  213. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_summary_list.py +0 -0
  214. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_timing.py +0 -0
  215. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_task_timing_list.py +0 -0
  216. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_trigger_workflow_run_request.py +0 -0
  217. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_update_filter_request.py +0 -0
  218. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_update_webhook_request.py +0 -0
  219. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_webhook.py +0 -0
  220. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_webhook_api_key_auth.py +0 -0
  221. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_webhook_auth_type.py +0 -0
  222. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_webhook_basic_auth.py +0 -0
  223. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_webhook_hmac_algorithm.py +0 -0
  224. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_webhook_hmac_auth.py +0 -0
  225. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_webhook_hmac_encoding.py +0 -0
  226. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_webhook_list.py +0 -0
  227. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_webhook_receive200_response.py +0 -0
  228. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_webhook_source_name.py +0 -0
  229. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_workflow_run.py +0 -0
  230. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_workflow_run_details.py +0 -0
  231. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_workflow_run_display_name.py +0 -0
  232. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_workflow_run_display_name_list.py +0 -0
  233. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/v1_workflow_type.py +0 -0
  234. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/webhook_worker.py +0 -0
  235. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/webhook_worker_create_request.py +0 -0
  236. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/webhook_worker_create_response.py +0 -0
  237. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/webhook_worker_created.py +0 -0
  238. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/webhook_worker_list_response.py +0 -0
  239. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/webhook_worker_request.py +0 -0
  240. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/webhook_worker_request_list_response.py +0 -0
  241. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/webhook_worker_request_method.py +0 -0
  242. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/worker.py +0 -0
  243. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/worker_label.py +0 -0
  244. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/worker_list.py +0 -0
  245. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/worker_runtime_info.py +0 -0
  246. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/worker_runtime_sdks.py +0 -0
  247. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/worker_type.py +0 -0
  248. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow.py +0 -0
  249. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_concurrency.py +0 -0
  250. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_deployment_config.py +0 -0
  251. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_kind.py +0 -0
  252. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_list.py +0 -0
  253. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_metrics.py +0 -0
  254. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_run.py +0 -0
  255. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_run_cancel200_response.py +0 -0
  256. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_run_list.py +0 -0
  257. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_run_order_by_direction.py +0 -0
  258. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_run_order_by_field.py +0 -0
  259. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_run_shape.py +0 -0
  260. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_run_shape_item_for_workflow_run_details.py +0 -0
  261. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_run_status.py +0 -0
  262. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_run_triggered_by.py +0 -0
  263. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_runs_cancel_request.py +0 -0
  264. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_runs_metrics.py +0 -0
  265. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_runs_metrics_counts.py +0 -0
  266. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_tag.py +0 -0
  267. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_trigger_cron_ref.py +0 -0
  268. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_trigger_event_ref.py +0 -0
  269. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_triggers.py +0 -0
  270. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_update_request.py +0 -0
  271. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_version.py +0 -0
  272. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_version_concurrency.py +0 -0
  273. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_version_definition.py +0 -0
  274. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_version_meta.py +0 -0
  275. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/models/workflow_workers_count.py +0 -0
  276. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/rest.py +0 -0
  277. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/rest/tenacity_utils.py +0 -0
  278. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/clients/v1/api_client.py +0 -0
  279. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/conditions.py +0 -0
  280. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/config.py +0 -0
  281. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/connection.py +0 -0
  282. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/context/__init__.py +0 -0
  283. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/context/worker_context.py +0 -0
  284. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/dispatcher_pb2.py +0 -0
  285. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/dispatcher_pb2.pyi +0 -0
  286. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/dispatcher_pb2_grpc.py +0 -0
  287. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/events_pb2.py +0 -0
  288. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/events_pb2.pyi +0 -0
  289. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/events_pb2_grpc.py +0 -0
  290. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/v1/dispatcher_pb2.py +0 -0
  291. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/v1/dispatcher_pb2.pyi +0 -0
  292. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/v1/dispatcher_pb2_grpc.py +0 -0
  293. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/v1/shared/condition_pb2.py +0 -0
  294. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/v1/shared/condition_pb2.pyi +0 -0
  295. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/v1/shared/condition_pb2_grpc.py +0 -0
  296. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/v1/workflows_pb2.py +0 -0
  297. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/v1/workflows_pb2.pyi +0 -0
  298. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/v1/workflows_pb2_grpc.py +0 -0
  299. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/workflows_pb2.py +0 -0
  300. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/workflows_pb2.pyi +0 -0
  301. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/contracts/workflows_pb2_grpc.py +0 -0
  302. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/cel.py +0 -0
  303. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/cron.py +0 -0
  304. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/filters.py +0 -0
  305. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/logs.py +0 -0
  306. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/metrics.py +0 -0
  307. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/rate_limits.py +0 -0
  308. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/scheduled.py +0 -0
  309. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/stubs.py +0 -0
  310. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/tenant.py +0 -0
  311. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/workers.py +0 -0
  312. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/features/workflows.py +0 -0
  313. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/labels.py +0 -0
  314. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/logger.py +0 -0
  315. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/metadata.py +0 -0
  316. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/opentelemetry/instrumentor.py +0 -0
  317. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/py.typed +0 -0
  318. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/rate_limit.py +0 -0
  319. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/runnables/action.py +0 -0
  320. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/runnables/contextvars.py +0 -0
  321. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/token.py +0 -0
  322. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/utils/aio.py +0 -0
  323. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/utils/backoff.py +0 -0
  324. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/utils/datetimes.py +0 -0
  325. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/utils/iterables.py +0 -0
  326. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/utils/opentelemetry.py +0 -0
  327. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/utils/proto_enums.py +0 -0
  328. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/utils/serde.py +0 -0
  329. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/utils/timedelta_to_expression.py +0 -0
  330. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/worker/__init__.py +0 -0
  331. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/worker/action_listener_process.py +0 -0
  332. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/worker/runner/run_loop_manager.py +0 -0
  333. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/worker/runner/utils/capture_logs.py +0 -0
  334. {hatchet_sdk-1.20.1 → hatchet_sdk-1.21.0}/hatchet_sdk/workflow_run.py +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: hatchet-sdk
3
- Version: 1.20.1
4
- Summary:
3
+ Version: 1.21.0
4
+ Summary: This is the official Python SDK for Hatchet, a distributed, fault-tolerant task queue. The SDK allows you to easily integrate Hatchet's task scheduling and workflow orchestration capabilities into your Python applications.
5
5
  License: MIT
6
6
  Author: Alexander Belanger
7
7
  Author-email: alexander@hatchet.run
@@ -14,10 +14,8 @@ Classifier: Programming Language :: Python :: 3.12
14
14
  Provides-Extra: otel
15
15
  Provides-Extra: v0-sdk
16
16
  Requires-Dist: aiohttp (>=3.10.5,<4.0.0)
17
- Requires-Dist: grpcio (>=1.64.1,!=1.68.*) ; python_version < "3.13"
18
- Requires-Dist: grpcio (>=1.69.0) ; python_version >= "3.13"
19
- Requires-Dist: grpcio-tools (>=1.64.1,!=1.68.*) ; python_version < "3.13"
20
- Requires-Dist: grpcio-tools (>=1.69.0) ; python_version >= "3.13"
17
+ Requires-Dist: grpcio (>=1.76.0,<2.0.0)
18
+ Requires-Dist: grpcio-tools (>=1.76.0,<2.0.0)
21
19
  Requires-Dist: opentelemetry-api (>=1.28.0,<2.0.0) ; extra == "otel"
22
20
  Requires-Dist: opentelemetry-distro (>=0.49b0) ; extra == "otel"
23
21
  Requires-Dist: opentelemetry-exporter-otlp (>=1.28.0,<2.0.0) ; extra == "otel"
@@ -25,7 +23,7 @@ Requires-Dist: opentelemetry-exporter-otlp-proto-http (>=1.28.0,<2.0.0) ; extra
25
23
  Requires-Dist: opentelemetry-instrumentation (>=0.49b0) ; extra == "otel"
26
24
  Requires-Dist: opentelemetry-sdk (>=1.28.0,<2.0.0) ; extra == "otel"
27
25
  Requires-Dist: prometheus-client (>=0.21.1)
28
- Requires-Dist: protobuf (>=5.29.5,<6.0.0)
26
+ Requires-Dist: protobuf (>=6.30.0,<7.0.0)
29
27
  Requires-Dist: pydantic (>=2.6.3,<3.0.0)
30
28
  Requires-Dist: pydantic-settings (>=2.7.1,<3.0.0)
31
29
  Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
@@ -4,6 +4,8 @@ from datetime import timedelta
4
4
  from typing import TYPE_CHECKING, Any, cast
5
5
  from warnings import warn
6
6
 
7
+ from pydantic import TypeAdapter
8
+
7
9
  from hatchet_sdk.clients.admin import AdminClient
8
10
  from hatchet_sdk.clients.dispatcher.dispatcher import ( # type: ignore[attr-defined]
9
11
  Action,
@@ -25,7 +27,13 @@ from hatchet_sdk.exceptions import TaskRunError
25
27
  from hatchet_sdk.features.runs import RunsClient
26
28
  from hatchet_sdk.logger import logger
27
29
  from hatchet_sdk.utils.timedelta_to_expression import Duration, timedelta_to_expr
28
- from hatchet_sdk.utils.typing import JSONSerializableMapping, LogLevel
30
+ from hatchet_sdk.utils.typing import (
31
+ JSONSerializableMapping,
32
+ LogLevel,
33
+ classify_output_validator,
34
+ is_basemodel_validator,
35
+ is_dataclass_validator,
36
+ )
29
37
  from hatchet_sdk.worker.runner.utils.capture_logs import AsyncLogSender, LogRecord
30
38
 
31
39
  if TYPE_CHECKING:
@@ -106,7 +114,21 @@ class Context:
106
114
  raise ValueError(f"Step output for '{task.name}' not found") from e
107
115
 
108
116
  if parent_step_data and (v := task.validators.step_output):
109
- return cast(R, v.model_validate(parent_step_data))
117
+ validator = classify_output_validator(v)
118
+
119
+ if is_dataclass_validator(validator):
120
+ return cast(
121
+ R,
122
+ TypeAdapter(validator.validator_type).validate_python(
123
+ parent_step_data
124
+ ),
125
+ )
126
+
127
+ if is_basemodel_validator(validator):
128
+ return cast(
129
+ R,
130
+ validator.validator_type.model_validate(parent_step_data),
131
+ )
110
132
 
111
133
  return parent_step_data
112
134
 
@@ -167,3 +167,7 @@ class LoopAlreadyRunningError(Exception):
167
167
 
168
168
  class IllegalTaskOutputError(Exception):
169
169
  pass
170
+
171
+
172
+ class LifespanSetupError(Exception):
173
+ pass
@@ -405,6 +405,7 @@ class RunsClient(BaseRestClient):
405
405
  worker_id: str | None = None,
406
406
  parent_task_external_id: str | None = None,
407
407
  triggering_event_external_id: str | None = None,
408
+ include_payloads: bool = True,
408
409
  ) -> list[V1TaskSummary]:
409
410
  """
410
411
  List task runs according to a set of filters, paginating through days
@@ -420,6 +421,7 @@ class RunsClient(BaseRestClient):
420
421
  :param worker_id: The worker ID to filter task runs by.
421
422
  :param parent_task_external_id: The parent task external ID to filter task runs by.
422
423
  :param triggering_event_external_id: The event id that triggered the task run.
424
+ :param include_payloads: Whether to include payloads in the response.
423
425
 
424
426
  :return: A list of task runs matching the specified filters.
425
427
  """
@@ -446,6 +448,7 @@ class RunsClient(BaseRestClient):
446
448
  worker_id=worker_id,
447
449
  parent_task_external_id=parent_task_external_id,
448
450
  triggering_event_external_id=triggering_event_external_id,
451
+ include_payloads=include_payloads,
449
452
  )
450
453
  for s, u in date_ranges
451
454
  ]
@@ -475,6 +478,7 @@ class RunsClient(BaseRestClient):
475
478
  worker_id: str | None = None,
476
479
  parent_task_external_id: str | None = None,
477
480
  triggering_event_external_id: str | None = None,
481
+ include_payloads: bool = True,
478
482
  ) -> list[V1TaskSummary]:
479
483
  """
480
484
  List task runs according to a set of filters, paginating through days
@@ -490,6 +494,7 @@ class RunsClient(BaseRestClient):
490
494
  :param worker_id: The worker ID to filter task runs by.
491
495
  :param parent_task_external_id: The parent task external ID to filter task runs by.
492
496
  :param triggering_event_external_id: The event id that triggered the task run.
497
+ :param include_payloads: Whether to include payloads in the response.
493
498
 
494
499
  :return: A list of task runs matching the specified filters.
495
500
  """
@@ -517,6 +522,7 @@ class RunsClient(BaseRestClient):
517
522
  worker_id=worker_id,
518
523
  parent_task_external_id=parent_task_external_id,
519
524
  triggering_event_external_id=triggering_event_external_id,
525
+ include_payloads=include_payloads,
520
526
  )
521
527
  for s, u in date_ranges
522
528
  ]
@@ -550,6 +556,7 @@ class RunsClient(BaseRestClient):
550
556
  worker_id: str | None = None,
551
557
  parent_task_external_id: str | None = None,
552
558
  triggering_event_external_id: str | None = None,
559
+ include_payloads: bool = True,
553
560
  ) -> V1TaskSummaryList:
554
561
  """
555
562
  List task runs according to a set of filters.
@@ -565,6 +572,7 @@ class RunsClient(BaseRestClient):
565
572
  :param worker_id: The worker ID to filter task runs by.
566
573
  :param parent_task_external_id: The parent task external ID to filter task runs by.
567
574
  :param triggering_event_external_id: The event id that triggered the task run.
575
+ :param include_payloads: Whether to include payloads in the response.
568
576
 
569
577
  :return: A list of task runs matching the specified filters.
570
578
  """
@@ -581,6 +589,7 @@ class RunsClient(BaseRestClient):
581
589
  worker_id=worker_id,
582
590
  parent_task_external_id=parent_task_external_id,
583
591
  triggering_event_external_id=triggering_event_external_id,
592
+ include_payloads=include_payloads,
584
593
  )
585
594
 
586
595
  @retry
@@ -597,6 +606,7 @@ class RunsClient(BaseRestClient):
597
606
  worker_id: str | None = None,
598
607
  parent_task_external_id: str | None = None,
599
608
  triggering_event_external_id: str | None = None,
609
+ include_payloads: bool = True,
600
610
  ) -> V1TaskSummaryList:
601
611
  """
602
612
  List task runs according to a set of filters.
@@ -612,6 +622,7 @@ class RunsClient(BaseRestClient):
612
622
  :param worker_id: The worker ID to filter task runs by.
613
623
  :param parent_task_external_id: The parent task external ID to filter task runs by.
614
624
  :param triggering_event_external_id: The event id that triggered the task run.
625
+ :param include_payloads: Whether to include payloads in the response.
615
626
 
616
627
  :return: A list of task runs matching the specified filters.
617
628
  """
@@ -643,6 +654,7 @@ class RunsClient(BaseRestClient):
643
654
  worker_id=worker_id,
644
655
  parent_task_external_id=parent_task_external_id,
645
656
  triggering_event_external_id=triggering_event_external_id,
657
+ include_payloads=include_payloads,
646
658
  )
647
659
 
648
660
  def create(
@@ -4,6 +4,8 @@ from collections.abc import Callable
4
4
  from datetime import timedelta
5
5
  from typing import Any, Concatenate, ParamSpec, cast, overload
6
6
 
7
+ from pydantic import BaseModel
8
+
7
9
  from hatchet_sdk import Context, DurableContext
8
10
  from hatchet_sdk.client import Client
9
11
  from hatchet_sdk.clients.dispatcher.dispatcher import DispatcherClient
@@ -36,7 +38,7 @@ from hatchet_sdk.runnables.types import (
36
38
  )
37
39
  from hatchet_sdk.runnables.workflow import BaseWorkflow, Standalone, Workflow
38
40
  from hatchet_sdk.utils.timedelta_to_expression import Duration
39
- from hatchet_sdk.utils.typing import CoroutineLike
41
+ from hatchet_sdk.utils.typing import CoroutineLike, DataclassInstance
40
42
  from hatchet_sdk.worker.worker import LifespanFn, Worker
41
43
 
42
44
  P = ParamSpec("P")
@@ -302,8 +304,10 @@ class Hatchet:
302
304
  on_crons=on_crons or [],
303
305
  sticky=sticky,
304
306
  concurrency=concurrency,
305
- input_validator=input_validator
306
- or cast(type[TWorkflowInput], EmptyModel),
307
+ input_validator=cast(
308
+ type[BaseModel] | type[DataclassInstance],
309
+ input_validator or EmptyModel,
310
+ ),
307
311
  task_defaults=task_defaults,
308
312
  default_priority=default_priority,
309
313
  default_filters=default_filters or [],
@@ -449,8 +453,10 @@ class Hatchet:
449
453
  on_crons=on_crons or [],
450
454
  sticky=sticky,
451
455
  default_priority=default_priority,
452
- input_validator=input_validator
453
- or cast(type[TWorkflowInput], EmptyModel),
456
+ input_validator=cast(
457
+ type[BaseModel] | type[DataclassInstance],
458
+ input_validator or EmptyModel,
459
+ ),
454
460
  default_filters=default_filters or [],
455
461
  ),
456
462
  self,
@@ -633,8 +639,10 @@ class Hatchet:
633
639
  on_events=on_events or [],
634
640
  on_crons=on_crons or [],
635
641
  sticky=sticky,
636
- input_validator=input_validator
637
- or cast(type[TWorkflowInput], EmptyModel),
642
+ input_validator=cast(
643
+ type[BaseModel] | type[DataclassInstance],
644
+ input_validator or EmptyModel,
645
+ ),
638
646
  default_priority=default_priority,
639
647
  default_filters=default_filters or [],
640
648
  ),
@@ -1,5 +1,6 @@
1
1
  import asyncio
2
2
  from collections.abc import Callable
3
+ from dataclasses import asdict, is_dataclass
3
4
  from inspect import Parameter, iscoroutinefunction, signature
4
5
  from typing import (
5
6
  TYPE_CHECKING,
@@ -37,7 +38,6 @@ from hatchet_sdk.contracts.v1.workflows_pb2 import (
37
38
  from hatchet_sdk.exceptions import InvalidDependencyError
38
39
  from hatchet_sdk.runnables.types import (
39
40
  ConcurrencyExpression,
40
- EmptyModel,
41
41
  R,
42
42
  StepType,
43
43
  TWorkflowInput,
@@ -289,11 +289,14 @@ class Task(Generic[TWorkflowInput, R]):
289
289
 
290
290
  additional_metadata = additional_metadata or {}
291
291
  parent_outputs = parent_outputs or {}
292
+ serialized_input: dict[str, Any] = {}
292
293
 
293
- if input is None:
294
- input = cast(TWorkflowInput, EmptyModel())
294
+ if is_dataclass(input):
295
+ serialized_input = asdict(input)
296
+ elif isinstance(input, BaseModel):
297
+ serialized_input = input.model_dump()
295
298
 
296
- action_payload = ActionPayload(input=input.model_dump(), parents=parent_outputs)
299
+ action_payload = ActionPayload(input=serialized_input, parents=parent_outputs)
297
300
 
298
301
  action = Action(
299
302
  tenant_id=self.workflow.client.config.tenant_id,
@@ -4,15 +4,19 @@ from collections.abc import Callable, Mapping
4
4
  from enum import Enum
5
5
  from typing import Any, ParamSpec, TypeGuard, TypeVar
6
6
 
7
- from pydantic import BaseModel, ConfigDict, Field
7
+ from pydantic import BaseModel, ConfigDict, Field, SkipValidation
8
8
 
9
9
  from hatchet_sdk.context.context import Context, DurableContext
10
10
  from hatchet_sdk.contracts.v1.workflows_pb2 import Concurrency
11
11
  from hatchet_sdk.contracts.v1.workflows_pb2 import DefaultFilter as DefaultFilterProto
12
12
  from hatchet_sdk.utils.timedelta_to_expression import Duration
13
- from hatchet_sdk.utils.typing import AwaitableLike, JSONSerializableMapping
13
+ from hatchet_sdk.utils.typing import (
14
+ AwaitableLike,
15
+ DataclassInstance,
16
+ JSONSerializableMapping,
17
+ )
14
18
 
15
- ValidTaskReturnType = BaseModel | Mapping[str, Any] | None
19
+ ValidTaskReturnType = BaseModel | Mapping[str, Any] | DataclassInstance | None
16
20
 
17
21
  R = TypeVar("R", bound=ValidTaskReturnType)
18
22
  P = ParamSpec("P")
@@ -56,7 +60,7 @@ class ConcurrencyExpression(BaseModel):
56
60
  )
57
61
 
58
62
 
59
- TWorkflowInput = TypeVar("TWorkflowInput", bound=BaseModel)
63
+ TWorkflowInput = TypeVar("TWorkflowInput", bound=BaseModel | DataclassInstance)
60
64
 
61
65
 
62
66
  class TaskDefaults(BaseModel):
@@ -93,7 +97,9 @@ class WorkflowConfig(BaseModel):
93
97
  on_crons: list[str] = Field(default_factory=list)
94
98
  sticky: StickyStrategy | None = None
95
99
  concurrency: ConcurrencyExpression | list[ConcurrencyExpression] | None = None
96
- input_validator: type[BaseModel] = EmptyModel
100
+ input_validator: SkipValidation[type[BaseModel] | type[DataclassInstance]] = (
101
+ EmptyModel
102
+ )
97
103
  default_priority: int | None = None
98
104
 
99
105
  task_defaults: TaskDefaults = TaskDefaults()
@@ -1,5 +1,6 @@
1
1
  import asyncio
2
2
  from collections.abc import Callable
3
+ from dataclasses import asdict
3
4
  from datetime import datetime, timedelta
4
5
  from functools import cached_property
5
6
  from typing import (
@@ -16,7 +17,7 @@ from typing import (
16
17
  )
17
18
 
18
19
  from google.protobuf import timestamp_pb2
19
- from pydantic import BaseModel, model_validator
20
+ from pydantic import BaseModel, ConfigDict, SkipValidation, TypeAdapter, model_validator
20
21
 
21
22
  from hatchet_sdk.clients.admin import (
22
23
  ScheduleTriggerWorkflowOptions,
@@ -52,8 +53,12 @@ from hatchet_sdk.utils.proto_enums import convert_python_enum_to_proto
52
53
  from hatchet_sdk.utils.timedelta_to_expression import Duration
53
54
  from hatchet_sdk.utils.typing import (
54
55
  CoroutineLike,
56
+ DataclassInstance,
55
57
  JSONSerializableMapping,
56
- is_basemodel_subclass,
58
+ classify_output_validator,
59
+ is_basemodel_validator,
60
+ is_dataclass_validator,
61
+ is_no_validator,
57
62
  )
58
63
  from hatchet_sdk.workflow_run import WorkflowRunRef
59
64
 
@@ -130,7 +135,8 @@ def transform_desired_worker_label(d: DesiredWorkerLabel) -> DesiredWorkerLabels
130
135
 
131
136
 
132
137
  class TypedTriggerWorkflowRunConfig(BaseModel, Generic[TWorkflowInput]):
133
- input: TWorkflowInput
138
+ model_config = ConfigDict(arbitrary_types_allowed=True)
139
+ input: SkipValidation[TWorkflowInput]
134
140
  options: TriggerWorkflowOptions
135
141
 
136
142
 
@@ -217,10 +223,26 @@ class BaseWorkflow(Generic[TWorkflowInput]):
217
223
  )
218
224
 
219
225
  def _get_workflow_input(self, ctx: Context) -> TWorkflowInput:
220
- return cast(
221
- TWorkflowInput,
222
- self.config.input_validator.model_validate(ctx.workflow_input),
223
- )
226
+ validator = classify_output_validator(self.config.input_validator)
227
+
228
+ if is_dataclass_validator(validator):
229
+ return cast(
230
+ TWorkflowInput,
231
+ TypeAdapter(validator.validator_type).validate_python(
232
+ ctx.workflow_input
233
+ ),
234
+ )
235
+
236
+ if is_basemodel_validator(validator):
237
+ return cast(
238
+ TWorkflowInput,
239
+ validator.validator_type.model_validate(ctx.workflow_input),
240
+ )
241
+
242
+ ## impossible to reach here since the input validator has to be either a BaseModel or dataclass
243
+
244
+ self.client.config.logger.error("input validator is of an unknown type")
245
+ return cast(TWorkflowInput, EmptyModel())
224
246
 
225
247
  @property
226
248
  def input_validator(self) -> type[TWorkflowInput]:
@@ -271,11 +293,16 @@ class BaseWorkflow(Generic[TWorkflowInput]):
271
293
  if not input:
272
294
  return {}
273
295
 
274
- if isinstance(input, BaseModel):
275
- return input.model_dump(mode="json")
296
+ validator = classify_output_validator(self.config.input_validator)
297
+
298
+ if is_dataclass_validator(validator):
299
+ return asdict(cast(DataclassInstance, input))
300
+
301
+ if is_basemodel_validator(validator):
302
+ return cast(BaseModel, input).model_dump(mode="json")
276
303
 
277
304
  raise ValueError(
278
- f"Input must be a BaseModel or `None`, got {type(input)} instead."
305
+ f"Input must be a BaseModel or dataclass, got {type(input)} instead."
279
306
  )
280
307
 
281
308
  @cached_property
@@ -1203,12 +1230,26 @@ class Standalone(BaseWorkflow[TWorkflowInput], Generic[TWorkflowInput, R]):
1203
1230
 
1204
1231
  return_type = get_type_hints(self._task.fn).get("return")
1205
1232
 
1206
- self._output_validator = (
1207
- return_type if is_basemodel_subclass(return_type) else None
1208
- )
1233
+ self._output_validator = self.get_output_validator(return_type)
1209
1234
 
1210
1235
  self.config = self._workflow.config
1211
1236
 
1237
+ def get_output_validator(
1238
+ self, return_type: Any | None
1239
+ ) -> type[BaseModel] | type[DataclassInstance] | None:
1240
+ validator = classify_output_validator(return_type)
1241
+
1242
+ if is_basemodel_validator(validator):
1243
+ return validator.validator_type
1244
+
1245
+ if is_dataclass_validator(validator):
1246
+ return validator.validator_type
1247
+
1248
+ if is_no_validator(validator):
1249
+ return None
1250
+
1251
+ raise TypeError(f"Unhandled validator type: {validator}")
1252
+
1212
1253
  @overload
1213
1254
  def _extract_result(self, result: dict[str, Any]) -> R: ...
1214
1255
 
@@ -1223,10 +1264,21 @@ class Standalone(BaseWorkflow[TWorkflowInput], Generic[TWorkflowInput, R]):
1223
1264
 
1224
1265
  output = result.get(self._task.name)
1225
1266
 
1226
- if not self._output_validator:
1267
+ validator = classify_output_validator(self._output_validator)
1268
+
1269
+ if is_basemodel_validator(validator):
1270
+ return cast(R, validator.validator_type.model_validate(output))
1271
+
1272
+ if is_dataclass_validator(validator):
1273
+ return cast(
1274
+ R,
1275
+ TypeAdapter(validator.validator_type).validate_python(output),
1276
+ )
1277
+
1278
+ if is_no_validator(validator):
1227
1279
  return cast(R, output)
1228
1280
 
1229
- return cast(R, self._output_validator.model_validate(output))
1281
+ raise TypeError(f"Unhandled validator type: {validator}")
1230
1282
 
1231
1283
  def run(
1232
1284
  self,
@@ -0,0 +1,112 @@
1
+ import sys
2
+ from collections.abc import Awaitable, Coroutine, Generator
3
+ from dataclasses import Field as DataclassField
4
+ from dataclasses import dataclass, is_dataclass
5
+ from enum import Enum
6
+ from typing import Any, ClassVar, Literal, Protocol, TypeAlias, TypeGuard, TypeVar
7
+
8
+ from pydantic import BaseModel, SkipValidation
9
+
10
+
11
+ class DataclassInstance(Protocol):
12
+ __dataclass_fields__: ClassVar[dict[str, DataclassField[Any]]]
13
+
14
+
15
+ def is_basemodel_subclass(model: Any) -> TypeGuard[type[BaseModel]]:
16
+ try:
17
+ return issubclass(model, BaseModel)
18
+ except TypeError:
19
+ return False
20
+
21
+
22
+ @dataclass
23
+ class PydanticModelValidator:
24
+ validator_type: type[BaseModel]
25
+ kind: Literal["basemodel"] = "basemodel"
26
+
27
+
28
+ @dataclass
29
+ class DataclassValidator:
30
+ validator_type: type[DataclassInstance]
31
+ kind: Literal["dataclass"] = "dataclass"
32
+
33
+
34
+ @dataclass
35
+ class NoValidator:
36
+ kind: Literal["none"] = "none"
37
+
38
+
39
+ OutputValidator = PydanticModelValidator | DataclassValidator | NoValidator
40
+
41
+
42
+ def is_basemodel_validator(
43
+ validator: OutputValidator,
44
+ ) -> TypeGuard[PydanticModelValidator]:
45
+ return validator.kind == "basemodel"
46
+
47
+
48
+ def is_dataclass_validator(validator: OutputValidator) -> TypeGuard[DataclassValidator]:
49
+ return validator.kind == "dataclass"
50
+
51
+
52
+ def is_no_validator(validator: OutputValidator) -> TypeGuard[NoValidator]:
53
+ return validator.kind == "none"
54
+
55
+
56
+ def classify_output_validator(return_type: Any | None) -> OutputValidator:
57
+ if is_basemodel_subclass(return_type):
58
+ return PydanticModelValidator(validator_type=return_type)
59
+
60
+ if is_dataclass(return_type) and isinstance(return_type, type):
61
+ return DataclassValidator(validator_type=return_type)
62
+
63
+ return NoValidator()
64
+
65
+
66
+ class TaskIOValidator(BaseModel):
67
+ workflow_input: SkipValidation[type[BaseModel] | type[DataclassInstance] | None] = (
68
+ None
69
+ )
70
+ step_output: SkipValidation[type[BaseModel] | type[DataclassInstance] | None] = None
71
+
72
+
73
+ JSONSerializableMapping = dict[str, Any]
74
+
75
+
76
+ _T_co = TypeVar("_T_co", covariant=True)
77
+
78
+ if sys.version_info >= (3, 12):
79
+ AwaitableLike: TypeAlias = Awaitable[_T_co]
80
+ CoroutineLike: TypeAlias = Coroutine[Any, Any, _T_co]
81
+ else:
82
+ AwaitableLike: TypeAlias = Generator[Any, None, _T_co] | Awaitable[_T_co]
83
+ CoroutineLike: TypeAlias = Generator[Any, None, _T_co] | Coroutine[Any, Any, _T_co]
84
+
85
+ STOP_LOOP_TYPE = Literal["STOP_LOOP"]
86
+ STOP_LOOP: STOP_LOOP_TYPE = "STOP_LOOP" # Sentinel object to stop the loop
87
+
88
+
89
+ class LogLevel(str, Enum):
90
+ DEBUG = "DEBUG"
91
+ INFO = "INFO"
92
+ WARN = "WARN"
93
+ ERROR = "ERROR"
94
+
95
+ @classmethod
96
+ def from_levelname(cls, levelname: str) -> "LogLevel":
97
+ levelname = levelname.upper()
98
+
99
+ if levelname == "DEBUG":
100
+ return cls.DEBUG
101
+
102
+ if levelname == "INFO":
103
+ return cls.INFO
104
+
105
+ if levelname in ["WARNING", "WARN"]:
106
+ return cls.WARN
107
+
108
+ if levelname == "ERROR":
109
+ return cls.ERROR
110
+
111
+ # fall back to INFO
112
+ return cls.INFO
@@ -4,6 +4,7 @@ import functools
4
4
  import json
5
5
  from collections.abc import Callable
6
6
  from concurrent.futures import ThreadPoolExecutor
7
+ from dataclasses import asdict, is_dataclass
7
8
  from enum import Enum
8
9
  from multiprocessing import Queue
9
10
  from textwrap import dedent
@@ -48,6 +49,7 @@ from hatchet_sdk.runnables.contextvars import (
48
49
  from hatchet_sdk.runnables.task import Task
49
50
  from hatchet_sdk.runnables.types import R, TWorkflowInput
50
51
  from hatchet_sdk.utils.serde import remove_null_unicode_character
52
+ from hatchet_sdk.utils.typing import DataclassInstance
51
53
  from hatchet_sdk.worker.action_listener_process import ActionEvent
52
54
  from hatchet_sdk.worker.runner.utils.capture_logs import (
53
55
  AsyncLogSender,
@@ -479,10 +481,12 @@ class Runner:
479
481
 
480
482
  if isinstance(output, BaseModel):
481
483
  output = output.model_dump(mode="json")
484
+ elif is_dataclass(output):
485
+ output = asdict(cast(DataclassInstance, output))
482
486
 
483
487
  if not isinstance(output, dict):
484
488
  raise IllegalTaskOutputError(
485
- f"Tasks must return either a dictionary or a Pydantic BaseModel which can be serialized to a JSON object. Got object of type {type(output)} instead."
489
+ f"Tasks must return either a dictionary, a Pydantic BaseModel, or a dataclass which can be serialized to a JSON object. Got object of type {type(output)} instead."
486
490
  )
487
491
 
488
492
  if output is None:
@@ -24,7 +24,7 @@ from pydantic import BaseModel
24
24
  from hatchet_sdk.client import Client
25
25
  from hatchet_sdk.config import ClientConfig
26
26
  from hatchet_sdk.contracts.v1.workflows_pb2 import CreateWorkflowVersionRequest
27
- from hatchet_sdk.exceptions import LoopAlreadyRunningError
27
+ from hatchet_sdk.exceptions import LifespanSetupError, LoopAlreadyRunningError
28
28
  from hatchet_sdk.logger import logger
29
29
  from hatchet_sdk.runnables.action import Action
30
30
  from hatchet_sdk.runnables.contextvars import task_count
@@ -273,12 +273,18 @@ class Worker:
273
273
  "no actions registered, register workflows or actions before starting worker"
274
274
  )
275
275
 
276
- if self.config.healthcheck.enabled:
277
- await self._start_health_server()
278
-
279
276
  lifespan_context = None
280
277
  if self.lifespan:
281
- lifespan_context = await self._setup_lifespan()
278
+ try:
279
+ lifespan_context = await self._setup_lifespan()
280
+ except LifespanSetupError as e:
281
+ logger.exception("lifespan setup failed")
282
+ if self.loop:
283
+ self.loop.stop()
284
+ raise e
285
+
286
+ if self.config.healthcheck.enabled:
287
+ await self._start_health_server()
282
288
 
283
289
  if self.has_any_non_durable:
284
290
  self.action_listener_process = self._start_action_listener(is_durable=False)
@@ -328,8 +334,8 @@ class Worker:
328
334
 
329
335
  self.lifespan_stack = AsyncExitStack()
330
336
 
331
- lifespan_gen = self.lifespan()
332
337
  try:
338
+ lifespan_gen = self.lifespan()
333
339
  context = await anext(lifespan_gen)
334
340
  await self.lifespan_stack.enter_async_context(
335
341
  _create_async_context_manager(lifespan_gen)
@@ -337,10 +343,16 @@ class Worker:
337
343
  return context
338
344
  except StopAsyncIteration:
339
345
  return None
346
+ except Exception as e:
347
+ raise LifespanSetupError("An error occurred during lifespan setup") from e
340
348
 
341
349
  async def _cleanup_lifespan(self) -> None:
342
- if self.lifespan_stack is not None:
343
- await self.lifespan_stack.aclose()
350
+ try:
351
+ if self.lifespan_stack is not None:
352
+ await self.lifespan_stack.aclose()
353
+ except Exception as e:
354
+ logger.exception("error during lifespan cleanup")
355
+ raise LifespanSetupError("An error occurred during lifespan cleanup") from e
344
356
 
345
357
  def _start_action_listener(
346
358
  self, is_durable: bool
@@ -472,7 +484,10 @@ class Worker:
472
484
  ):
473
485
  self.durable_action_listener_process.kill()
474
486
 
475
- await self._cleanup_lifespan()
487
+ try:
488
+ await self._cleanup_lifespan()
489
+ except LifespanSetupError:
490
+ logger.exception("lifespan cleanup failed")
476
491
 
477
492
  await self._close()
478
493
  if self.loop and self.owned_loop: