hatchet-sdk 0.42.3__py3-none-any.whl → 0.42.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of hatchet-sdk might be problematic. Click here for more details.

@@ -1,12 +1,22 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # NO CHECKED-IN PROTOBUF GENCODE
3
4
  # source: workflows.proto
4
- # Protobuf Python Version: 4.25.1
5
+ # Protobuf Python Version: 5.28.1
5
6
  """Generated protocol buffer code."""
6
7
  from google.protobuf import descriptor as _descriptor
7
8
  from google.protobuf import descriptor_pool as _descriptor_pool
9
+ from google.protobuf import runtime_version as _runtime_version
8
10
  from google.protobuf import symbol_database as _symbol_database
9
11
  from google.protobuf.internal import builder as _builder
12
+ _runtime_version.ValidateProtobufRuntimeVersion(
13
+ _runtime_version.Domain.PUBLIC,
14
+ 5,
15
+ 28,
16
+ 1,
17
+ '',
18
+ 'workflows.proto'
19
+ )
10
20
  # @@protoc_insertion_point(imports)
11
21
 
12
22
  _sym_db = _symbol_database.Default()
@@ -15,26 +25,26 @@ _sym_db = _symbol_database.Default()
15
25
  from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
16
26
 
17
27
 
18
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fworkflows.proto\x1a\x1fgoogle/protobuf/timestamp.proto\">\n\x12PutWorkflowRequest\x12(\n\x04opts\x18\x01 \x01(\x0b\x32\x1a.CreateWorkflowVersionOpts\"\xbf\x04\n\x19\x43reateWorkflowVersionOpts\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x16\n\x0e\x65vent_triggers\x18\x04 \x03(\t\x12\x15\n\rcron_triggers\x18\x05 \x03(\t\x12\x36\n\x12scheduled_triggers\x18\x06 \x03(\x0b\x32\x1a.google.protobuf.Timestamp\x12$\n\x04jobs\x18\x07 \x03(\x0b\x32\x16.CreateWorkflowJobOpts\x12-\n\x0b\x63oncurrency\x18\x08 \x01(\x0b\x32\x18.WorkflowConcurrencyOpts\x12\x1d\n\x10schedule_timeout\x18\t \x01(\tH\x00\x88\x01\x01\x12\x17\n\ncron_input\x18\n \x01(\tH\x01\x88\x01\x01\x12\x33\n\x0eon_failure_job\x18\x0b \x01(\x0b\x32\x16.CreateWorkflowJobOptsH\x02\x88\x01\x01\x12$\n\x06sticky\x18\x0c \x01(\x0e\x32\x0f.StickyStrategyH\x03\x88\x01\x01\x12 \n\x04kind\x18\r \x01(\x0e\x32\r.WorkflowKindH\x04\x88\x01\x01\x12\x1d\n\x10\x64\x65\x66\x61ult_priority\x18\x0e \x01(\x05H\x05\x88\x01\x01\x42\x13\n\x11_schedule_timeoutB\r\n\x0b_cron_inputB\x11\n\x0f_on_failure_jobB\t\n\x07_stickyB\x07\n\x05_kindB\x13\n\x11_default_priority\"\xd0\x01\n\x17WorkflowConcurrencyOpts\x12\x13\n\x06\x61\x63tion\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08max_runs\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x36\n\x0elimit_strategy\x18\x03 \x01(\x0e\x32\x19.ConcurrencyLimitStrategyH\x02\x88\x01\x01\x12\x17\n\nexpression\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\t\n\x07_actionB\x0b\n\t_max_runsB\x11\n\x0f_limit_strategyB\r\n\x0b_expression\"h\n\x15\x43reateWorkflowJobOpts\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12&\n\x05steps\x18\x04 \x03(\x0b\x32\x17.CreateWorkflowStepOptsJ\x04\x08\x03\x10\x04\"\xe1\x01\n\x13\x44\x65siredWorkerLabels\x12\x15\n\x08strValue\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08intValue\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x15\n\x08required\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12/\n\ncomparator\x18\x04 \x01(\x0e\x32\x16.WorkerLabelComparatorH\x03\x88\x01\x01\x12\x13\n\x06weight\x18\x05 \x01(\x05H\x04\x88\x01\x01\x42\x0b\n\t_strValueB\x0b\n\t_intValueB\x0b\n\t_requiredB\r\n\x0b_comparatorB\t\n\x07_weight\"\xb5\x03\n\x16\x43reateWorkflowStepOpts\x12\x13\n\x0breadable_id\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x02 \x01(\t\x12\x0f\n\x07timeout\x18\x03 \x01(\t\x12\x0e\n\x06inputs\x18\x04 \x01(\t\x12\x0f\n\x07parents\x18\x05 \x03(\t\x12\x11\n\tuser_data\x18\x06 \x01(\t\x12\x0f\n\x07retries\x18\x07 \x01(\x05\x12)\n\x0brate_limits\x18\x08 \x03(\x0b\x32\x14.CreateStepRateLimit\x12@\n\rworker_labels\x18\t \x03(\x0b\x32).CreateWorkflowStepOpts.WorkerLabelsEntry\x12\x1b\n\x0e\x62\x61\x63koff_factor\x18\n \x01(\x02H\x00\x88\x01\x01\x12 \n\x13\x62\x61\x63koff_max_seconds\x18\x0b \x01(\x05H\x01\x88\x01\x01\x1aI\n\x11WorkerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.DesiredWorkerLabels:\x02\x38\x01\x42\x11\n\x0f_backoff_factorB\x16\n\x14_backoff_max_seconds\"\xfa\x01\n\x13\x43reateStepRateLimit\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x12\n\x05units\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x15\n\x08key_expr\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nunits_expr\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1e\n\x11limit_values_expr\x18\x05 \x01(\tH\x03\x88\x01\x01\x12)\n\x08\x64uration\x18\x06 \x01(\x0e\x32\x12.RateLimitDurationH\x04\x88\x01\x01\x42\x08\n\x06_unitsB\x0b\n\t_key_exprB\r\n\x0b_units_exprB\x14\n\x12_limit_values_exprB\x0b\n\t_duration\"\x16\n\x14ListWorkflowsRequest\"\xcd\x02\n\x17ScheduleWorkflowRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12-\n\tschedules\x18\x02 \x03(\x0b\x32\x1a.google.protobuf.Timestamp\x12\r\n\x05input\x18\x03 \x01(\t\x12\x16\n\tparent_id\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x1f\n\x12parent_step_run_id\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x63hild_index\x18\x06 \x01(\x05H\x02\x88\x01\x01\x12\x16\n\tchild_key\x18\x07 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x61\x64\x64itional_metadata\x18\x08 \x01(\tH\x04\x88\x01\x01\x42\x0c\n\n_parent_idB\x15\n\x13_parent_step_run_idB\x0e\n\x0c_child_indexB\x0c\n\n_child_keyB\x16\n\x14_additional_metadata\"O\n\x11ScheduledWorkflow\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ntrigger_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xe3\x01\n\x0fWorkflowVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07version\x18\x05 \x01(\t\x12\r\n\x05order\x18\x06 \x01(\x03\x12\x13\n\x0bworkflow_id\x18\x07 \x01(\t\x12/\n\x13scheduled_workflows\x18\x08 \x03(\x0b\x32\x12.ScheduledWorkflow\"?\n\x17WorkflowTriggerEventRef\x12\x11\n\tparent_id\x18\x01 \x01(\t\x12\x11\n\tevent_key\x18\x02 \x01(\t\"9\n\x16WorkflowTriggerCronRef\x12\x11\n\tparent_id\x18\x01 \x01(\t\x12\x0c\n\x04\x63ron\x18\x02 \x01(\t\"H\n\x1a\x42ulkTriggerWorkflowRequest\x12*\n\tworkflows\x18\x01 \x03(\x0b\x32\x17.TriggerWorkflowRequest\"7\n\x1b\x42ulkTriggerWorkflowResponse\x12\x18\n\x10workflow_run_ids\x18\x01 \x03(\t\"\xf7\x02\n\x16TriggerWorkflowRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05input\x18\x02 \x01(\t\x12\x16\n\tparent_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1f\n\x12parent_step_run_id\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x63hild_index\x18\x05 \x01(\x05H\x02\x88\x01\x01\x12\x16\n\tchild_key\x18\x06 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x61\x64\x64itional_metadata\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x1e\n\x11\x64\x65sired_worker_id\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x15\n\x08priority\x18\t \x01(\x05H\x06\x88\x01\x01\x42\x0c\n\n_parent_idB\x15\n\x13_parent_step_run_idB\x0e\n\x0c_child_indexB\x0c\n\n_child_keyB\x16\n\x14_additional_metadataB\x14\n\x12_desired_worker_idB\x0b\n\t_priority\"2\n\x17TriggerWorkflowResponse\x12\x17\n\x0fworkflow_run_id\x18\x01 \x01(\t\"W\n\x13PutRateLimitRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x05\x12$\n\x08\x64uration\x18\x03 \x01(\x0e\x32\x12.RateLimitDuration\"\x16\n\x14PutRateLimitResponse*$\n\x0eStickyStrategy\x12\x08\n\x04SOFT\x10\x00\x12\x08\n\x04HARD\x10\x01*2\n\x0cWorkflowKind\x12\x0c\n\x08\x46UNCTION\x10\x00\x12\x0b\n\x07\x44URABLE\x10\x01\x12\x07\n\x03\x44\x41G\x10\x02*l\n\x18\x43oncurrencyLimitStrategy\x12\x16\n\x12\x43\x41NCEL_IN_PROGRESS\x10\x00\x12\x0f\n\x0b\x44ROP_NEWEST\x10\x01\x12\x10\n\x0cQUEUE_NEWEST\x10\x02\x12\x15\n\x11GROUP_ROUND_ROBIN\x10\x03*\x85\x01\n\x15WorkerLabelComparator\x12\t\n\x05\x45QUAL\x10\x00\x12\r\n\tNOT_EQUAL\x10\x01\x12\x10\n\x0cGREATER_THAN\x10\x02\x12\x19\n\x15GREATER_THAN_OR_EQUAL\x10\x03\x12\r\n\tLESS_THAN\x10\x04\x12\x16\n\x12LESS_THAN_OR_EQUAL\x10\x05*]\n\x11RateLimitDuration\x12\n\n\x06SECOND\x10\x00\x12\n\n\x06MINUTE\x10\x01\x12\x08\n\x04HOUR\x10\x02\x12\x07\n\x03\x44\x41Y\x10\x03\x12\x08\n\x04WEEK\x10\x04\x12\t\n\x05MONTH\x10\x05\x12\x08\n\x04YEAR\x10\x06\x32\xdc\x02\n\x0fWorkflowService\x12\x34\n\x0bPutWorkflow\x12\x13.PutWorkflowRequest\x1a\x10.WorkflowVersion\x12>\n\x10ScheduleWorkflow\x12\x18.ScheduleWorkflowRequest\x1a\x10.WorkflowVersion\x12\x44\n\x0fTriggerWorkflow\x12\x17.TriggerWorkflowRequest\x1a\x18.TriggerWorkflowResponse\x12P\n\x13\x42ulkTriggerWorkflow\x12\x1b.BulkTriggerWorkflowRequest\x1a\x1c.BulkTriggerWorkflowResponse\x12;\n\x0cPutRateLimit\x12\x14.PutRateLimitRequest\x1a\x15.PutRateLimitResponseBBZ@github.com/hatchet-dev/hatchet/internal/services/admin/contractsb\x06proto3')
28
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0fworkflows.proto\x1a\x1fgoogle/protobuf/timestamp.proto\">\n\x12PutWorkflowRequest\x12(\n\x04opts\x18\x01 \x01(\x0b\x32\x1a.CreateWorkflowVersionOpts\"\xbf\x04\n\x19\x43reateWorkflowVersionOpts\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\t\x12\x16\n\x0e\x65vent_triggers\x18\x04 \x03(\t\x12\x15\n\rcron_triggers\x18\x05 \x03(\t\x12\x36\n\x12scheduled_triggers\x18\x06 \x03(\x0b\x32\x1a.google.protobuf.Timestamp\x12$\n\x04jobs\x18\x07 \x03(\x0b\x32\x16.CreateWorkflowJobOpts\x12-\n\x0b\x63oncurrency\x18\x08 \x01(\x0b\x32\x18.WorkflowConcurrencyOpts\x12\x1d\n\x10schedule_timeout\x18\t \x01(\tH\x00\x88\x01\x01\x12\x17\n\ncron_input\x18\n \x01(\tH\x01\x88\x01\x01\x12\x33\n\x0eon_failure_job\x18\x0b \x01(\x0b\x32\x16.CreateWorkflowJobOptsH\x02\x88\x01\x01\x12$\n\x06sticky\x18\x0c \x01(\x0e\x32\x0f.StickyStrategyH\x03\x88\x01\x01\x12 \n\x04kind\x18\r \x01(\x0e\x32\r.WorkflowKindH\x04\x88\x01\x01\x12\x1d\n\x10\x64\x65\x66\x61ult_priority\x18\x0e \x01(\x05H\x05\x88\x01\x01\x42\x13\n\x11_schedule_timeoutB\r\n\x0b_cron_inputB\x11\n\x0f_on_failure_jobB\t\n\x07_stickyB\x07\n\x05_kindB\x13\n\x11_default_priority\"\xd0\x01\n\x17WorkflowConcurrencyOpts\x12\x13\n\x06\x61\x63tion\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08max_runs\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x36\n\x0elimit_strategy\x18\x03 \x01(\x0e\x32\x19.ConcurrencyLimitStrategyH\x02\x88\x01\x01\x12\x17\n\nexpression\x18\x04 \x01(\tH\x03\x88\x01\x01\x42\t\n\x07_actionB\x0b\n\t_max_runsB\x11\n\x0f_limit_strategyB\r\n\x0b_expression\"h\n\x15\x43reateWorkflowJobOpts\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x12&\n\x05steps\x18\x04 \x03(\x0b\x32\x17.CreateWorkflowStepOptsJ\x04\x08\x03\x10\x04\"\xe1\x01\n\x13\x44\x65siredWorkerLabels\x12\x15\n\x08strValue\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08intValue\x18\x02 \x01(\x05H\x01\x88\x01\x01\x12\x15\n\x08required\x18\x03 \x01(\x08H\x02\x88\x01\x01\x12/\n\ncomparator\x18\x04 \x01(\x0e\x32\x16.WorkerLabelComparatorH\x03\x88\x01\x01\x12\x13\n\x06weight\x18\x05 \x01(\x05H\x04\x88\x01\x01\x42\x0b\n\t_strValueB\x0b\n\t_intValueB\x0b\n\t_requiredB\r\n\x0b_comparatorB\t\n\x07_weight\"\xb5\x03\n\x16\x43reateWorkflowStepOpts\x12\x13\n\x0breadable_id\x18\x01 \x01(\t\x12\x0e\n\x06\x61\x63tion\x18\x02 \x01(\t\x12\x0f\n\x07timeout\x18\x03 \x01(\t\x12\x0e\n\x06inputs\x18\x04 \x01(\t\x12\x0f\n\x07parents\x18\x05 \x03(\t\x12\x11\n\tuser_data\x18\x06 \x01(\t\x12\x0f\n\x07retries\x18\x07 \x01(\x05\x12)\n\x0brate_limits\x18\x08 \x03(\x0b\x32\x14.CreateStepRateLimit\x12@\n\rworker_labels\x18\t \x03(\x0b\x32).CreateWorkflowStepOpts.WorkerLabelsEntry\x12\x1b\n\x0e\x62\x61\x63koff_factor\x18\n \x01(\x02H\x00\x88\x01\x01\x12 \n\x13\x62\x61\x63koff_max_seconds\x18\x0b \x01(\x05H\x01\x88\x01\x01\x1aI\n\x11WorkerLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12#\n\x05value\x18\x02 \x01(\x0b\x32\x14.DesiredWorkerLabels:\x02\x38\x01\x42\x11\n\x0f_backoff_factorB\x16\n\x14_backoff_max_seconds\"\xfa\x01\n\x13\x43reateStepRateLimit\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x12\n\x05units\x18\x02 \x01(\x05H\x00\x88\x01\x01\x12\x15\n\x08key_expr\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x17\n\nunits_expr\x18\x04 \x01(\tH\x02\x88\x01\x01\x12\x1e\n\x11limit_values_expr\x18\x05 \x01(\tH\x03\x88\x01\x01\x12)\n\x08\x64uration\x18\x06 \x01(\x0e\x32\x12.RateLimitDurationH\x04\x88\x01\x01\x42\x08\n\x06_unitsB\x0b\n\t_key_exprB\r\n\x0b_units_exprB\x14\n\x12_limit_values_exprB\x0b\n\t_duration\"\x16\n\x14ListWorkflowsRequest\"\xcd\x02\n\x17ScheduleWorkflowRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12-\n\tschedules\x18\x02 \x03(\x0b\x32\x1a.google.protobuf.Timestamp\x12\r\n\x05input\x18\x03 \x01(\t\x12\x16\n\tparent_id\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x1f\n\x12parent_step_run_id\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x63hild_index\x18\x06 \x01(\x05H\x02\x88\x01\x01\x12\x16\n\tchild_key\x18\x07 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x61\x64\x64itional_metadata\x18\x08 \x01(\tH\x04\x88\x01\x01\x42\x0c\n\n_parent_idB\x15\n\x13_parent_step_run_idB\x0e\n\x0c_child_indexB\x0c\n\n_child_keyB\x16\n\x14_additional_metadata\"O\n\x11ScheduledWorkflow\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ntrigger_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\xe3\x01\n\x0fWorkflowVersion\x12\n\n\x02id\x18\x01 \x01(\t\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x0f\n\x07version\x18\x05 \x01(\t\x12\r\n\x05order\x18\x06 \x01(\x03\x12\x13\n\x0bworkflow_id\x18\x07 \x01(\t\x12/\n\x13scheduled_workflows\x18\x08 \x03(\x0b\x32\x12.ScheduledWorkflow\"?\n\x17WorkflowTriggerEventRef\x12\x11\n\tparent_id\x18\x01 \x01(\t\x12\x11\n\tevent_key\x18\x02 \x01(\t\"9\n\x16WorkflowTriggerCronRef\x12\x11\n\tparent_id\x18\x01 \x01(\t\x12\x0c\n\x04\x63ron\x18\x02 \x01(\t\"H\n\x1a\x42ulkTriggerWorkflowRequest\x12*\n\tworkflows\x18\x01 \x03(\x0b\x32\x17.TriggerWorkflowRequest\"7\n\x1b\x42ulkTriggerWorkflowResponse\x12\x18\n\x10workflow_run_ids\x18\x01 \x03(\t\"\xf7\x02\n\x16TriggerWorkflowRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05input\x18\x02 \x01(\t\x12\x16\n\tparent_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12\x1f\n\x12parent_step_run_id\x18\x04 \x01(\tH\x01\x88\x01\x01\x12\x18\n\x0b\x63hild_index\x18\x05 \x01(\x05H\x02\x88\x01\x01\x12\x16\n\tchild_key\x18\x06 \x01(\tH\x03\x88\x01\x01\x12 \n\x13\x61\x64\x64itional_metadata\x18\x07 \x01(\tH\x04\x88\x01\x01\x12\x1e\n\x11\x64\x65sired_worker_id\x18\x08 \x01(\tH\x05\x88\x01\x01\x12\x15\n\x08priority\x18\t \x01(\x05H\x06\x88\x01\x01\x42\x0c\n\n_parent_idB\x15\n\x13_parent_step_run_idB\x0e\n\x0c_child_indexB\x0c\n\n_child_keyB\x16\n\x14_additional_metadataB\x14\n\x12_desired_worker_idB\x0b\n\t_priority\"2\n\x17TriggerWorkflowResponse\x12\x17\n\x0fworkflow_run_id\x18\x01 \x01(\t\"W\n\x13PutRateLimitRequest\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05limit\x18\x02 \x01(\x05\x12$\n\x08\x64uration\x18\x03 \x01(\x0e\x32\x12.RateLimitDuration\"\x16\n\x14PutRateLimitResponse*$\n\x0eStickyStrategy\x12\x08\n\x04SOFT\x10\x00\x12\x08\n\x04HARD\x10\x01*2\n\x0cWorkflowKind\x12\x0c\n\x08\x46UNCTION\x10\x00\x12\x0b\n\x07\x44URABLE\x10\x01\x12\x07\n\x03\x44\x41G\x10\x02*\x7f\n\x18\x43oncurrencyLimitStrategy\x12\x16\n\x12\x43\x41NCEL_IN_PROGRESS\x10\x00\x12\x0f\n\x0b\x44ROP_NEWEST\x10\x01\x12\x10\n\x0cQUEUE_NEWEST\x10\x02\x12\x15\n\x11GROUP_ROUND_ROBIN\x10\x03\x12\x11\n\rCANCEL_NEWEST\x10\x04*\x85\x01\n\x15WorkerLabelComparator\x12\t\n\x05\x45QUAL\x10\x00\x12\r\n\tNOT_EQUAL\x10\x01\x12\x10\n\x0cGREATER_THAN\x10\x02\x12\x19\n\x15GREATER_THAN_OR_EQUAL\x10\x03\x12\r\n\tLESS_THAN\x10\x04\x12\x16\n\x12LESS_THAN_OR_EQUAL\x10\x05*]\n\x11RateLimitDuration\x12\n\n\x06SECOND\x10\x00\x12\n\n\x06MINUTE\x10\x01\x12\x08\n\x04HOUR\x10\x02\x12\x07\n\x03\x44\x41Y\x10\x03\x12\x08\n\x04WEEK\x10\x04\x12\t\n\x05MONTH\x10\x05\x12\x08\n\x04YEAR\x10\x06\x32\xdc\x02\n\x0fWorkflowService\x12\x34\n\x0bPutWorkflow\x12\x13.PutWorkflowRequest\x1a\x10.WorkflowVersion\x12>\n\x10ScheduleWorkflow\x12\x18.ScheduleWorkflowRequest\x1a\x10.WorkflowVersion\x12\x44\n\x0fTriggerWorkflow\x12\x17.TriggerWorkflowRequest\x1a\x18.TriggerWorkflowResponse\x12P\n\x13\x42ulkTriggerWorkflow\x12\x1b.BulkTriggerWorkflowRequest\x1a\x1c.BulkTriggerWorkflowResponse\x12;\n\x0cPutRateLimit\x12\x14.PutRateLimitRequest\x1a\x15.PutRateLimitResponseBBZ@github.com/hatchet-dev/hatchet/internal/services/admin/contractsb\x06proto3')
19
29
 
20
30
  _globals = globals()
21
31
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
22
32
  _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'workflows_pb2', _globals)
23
- if _descriptor._USE_C_DESCRIPTORS == False:
24
- _globals['DESCRIPTOR']._options = None
33
+ if not _descriptor._USE_C_DESCRIPTORS:
34
+ _globals['DESCRIPTOR']._loaded_options = None
25
35
  _globals['DESCRIPTOR']._serialized_options = b'Z@github.com/hatchet-dev/hatchet/internal/services/admin/contracts'
26
- _globals['_CREATEWORKFLOWSTEPOPTS_WORKERLABELSENTRY']._options = None
36
+ _globals['_CREATEWORKFLOWSTEPOPTS_WORKERLABELSENTRY']._loaded_options = None
27
37
  _globals['_CREATEWORKFLOWSTEPOPTS_WORKERLABELSENTRY']._serialized_options = b'8\001'
28
38
  _globals['_STICKYSTRATEGY']._serialized_start=3401
29
39
  _globals['_STICKYSTRATEGY']._serialized_end=3437
30
40
  _globals['_WORKFLOWKIND']._serialized_start=3439
31
41
  _globals['_WORKFLOWKIND']._serialized_end=3489
32
42
  _globals['_CONCURRENCYLIMITSTRATEGY']._serialized_start=3491
33
- _globals['_CONCURRENCYLIMITSTRATEGY']._serialized_end=3599
34
- _globals['_WORKERLABELCOMPARATOR']._serialized_start=3602
35
- _globals['_WORKERLABELCOMPARATOR']._serialized_end=3735
36
- _globals['_RATELIMITDURATION']._serialized_start=3737
37
- _globals['_RATELIMITDURATION']._serialized_end=3830
43
+ _globals['_CONCURRENCYLIMITSTRATEGY']._serialized_end=3618
44
+ _globals['_WORKERLABELCOMPARATOR']._serialized_start=3621
45
+ _globals['_WORKERLABELCOMPARATOR']._serialized_end=3754
46
+ _globals['_RATELIMITDURATION']._serialized_start=3756
47
+ _globals['_RATELIMITDURATION']._serialized_end=3849
38
48
  _globals['_PUTWORKFLOWREQUEST']._serialized_start=52
39
49
  _globals['_PUTWORKFLOWREQUEST']._serialized_end=114
40
50
  _globals['_CREATEWORKFLOWVERSIONOPTS']._serialized_start=117
@@ -75,6 +85,6 @@ if _descriptor._USE_C_DESCRIPTORS == False:
75
85
  _globals['_PUTRATELIMITREQUEST']._serialized_end=3375
76
86
  _globals['_PUTRATELIMITRESPONSE']._serialized_start=3377
77
87
  _globals['_PUTRATELIMITRESPONSE']._serialized_end=3399
78
- _globals['_WORKFLOWSERVICE']._serialized_start=3833
79
- _globals['_WORKFLOWSERVICE']._serialized_end=4181
88
+ _globals['_WORKFLOWSERVICE']._serialized_start=3852
89
+ _globals['_WORKFLOWSERVICE']._serialized_end=4200
80
90
  # @@protoc_insertion_point(module_scope)
@@ -24,6 +24,7 @@ class ConcurrencyLimitStrategy(int, metaclass=_enum_type_wrapper.EnumTypeWrapper
24
24
  DROP_NEWEST: _ClassVar[ConcurrencyLimitStrategy]
25
25
  QUEUE_NEWEST: _ClassVar[ConcurrencyLimitStrategy]
26
26
  GROUP_ROUND_ROBIN: _ClassVar[ConcurrencyLimitStrategy]
27
+ CANCEL_NEWEST: _ClassVar[ConcurrencyLimitStrategy]
27
28
 
28
29
  class WorkerLabelComparator(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
29
30
  __slots__ = ()
@@ -52,6 +53,7 @@ CANCEL_IN_PROGRESS: ConcurrencyLimitStrategy
52
53
  DROP_NEWEST: ConcurrencyLimitStrategy
53
54
  QUEUE_NEWEST: ConcurrencyLimitStrategy
54
55
  GROUP_ROUND_ROBIN: ConcurrencyLimitStrategy
56
+ CANCEL_NEWEST: ConcurrencyLimitStrategy
55
57
  EQUAL: WorkerLabelComparator
56
58
  NOT_EQUAL: WorkerLabelComparator
57
59
  GREATER_THAN: WorkerLabelComparator
@@ -1,9 +1,29 @@
1
1
  # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
2
2
  """Client and server classes corresponding to protobuf-defined services."""
3
3
  import grpc
4
+ import warnings
4
5
 
5
6
  from . import workflows_pb2 as workflows__pb2
6
7
 
8
+ GRPC_GENERATED_VERSION = '1.68.1'
9
+ GRPC_VERSION = grpc.__version__
10
+ _version_not_supported = False
11
+
12
+ try:
13
+ from grpc._utilities import first_version_is_lower
14
+ _version_not_supported = first_version_is_lower(GRPC_VERSION, GRPC_GENERATED_VERSION)
15
+ except ImportError:
16
+ _version_not_supported = True
17
+
18
+ if _version_not_supported:
19
+ raise RuntimeError(
20
+ f'The grpc package installed is at version {GRPC_VERSION},'
21
+ + f' but the generated code in workflows_pb2_grpc.py depends on'
22
+ + f' grpcio>={GRPC_GENERATED_VERSION}.'
23
+ + f' Please upgrade your grpc module to grpcio>={GRPC_GENERATED_VERSION}'
24
+ + f' or downgrade your generated code using grpcio-tools<={GRPC_VERSION}.'
25
+ )
26
+
7
27
 
8
28
  class WorkflowServiceStub(object):
9
29
  """WorkflowService represents a set of RPCs for managing workflows.
@@ -19,27 +39,27 @@ class WorkflowServiceStub(object):
19
39
  '/WorkflowService/PutWorkflow',
20
40
  request_serializer=workflows__pb2.PutWorkflowRequest.SerializeToString,
21
41
  response_deserializer=workflows__pb2.WorkflowVersion.FromString,
22
- )
42
+ _registered_method=True)
23
43
  self.ScheduleWorkflow = channel.unary_unary(
24
44
  '/WorkflowService/ScheduleWorkflow',
25
45
  request_serializer=workflows__pb2.ScheduleWorkflowRequest.SerializeToString,
26
46
  response_deserializer=workflows__pb2.WorkflowVersion.FromString,
27
- )
47
+ _registered_method=True)
28
48
  self.TriggerWorkflow = channel.unary_unary(
29
49
  '/WorkflowService/TriggerWorkflow',
30
50
  request_serializer=workflows__pb2.TriggerWorkflowRequest.SerializeToString,
31
51
  response_deserializer=workflows__pb2.TriggerWorkflowResponse.FromString,
32
- )
52
+ _registered_method=True)
33
53
  self.BulkTriggerWorkflow = channel.unary_unary(
34
54
  '/WorkflowService/BulkTriggerWorkflow',
35
55
  request_serializer=workflows__pb2.BulkTriggerWorkflowRequest.SerializeToString,
36
56
  response_deserializer=workflows__pb2.BulkTriggerWorkflowResponse.FromString,
37
- )
57
+ _registered_method=True)
38
58
  self.PutRateLimit = channel.unary_unary(
39
59
  '/WorkflowService/PutRateLimit',
40
60
  request_serializer=workflows__pb2.PutRateLimitRequest.SerializeToString,
41
61
  response_deserializer=workflows__pb2.PutRateLimitResponse.FromString,
42
- )
62
+ _registered_method=True)
43
63
 
44
64
 
45
65
  class WorkflowServiceServicer(object):
@@ -108,6 +128,7 @@ def add_WorkflowServiceServicer_to_server(servicer, server):
108
128
  generic_handler = grpc.method_handlers_generic_handler(
109
129
  'WorkflowService', rpc_method_handlers)
110
130
  server.add_generic_rpc_handlers((generic_handler,))
131
+ server.add_registered_method_handlers('WorkflowService', rpc_method_handlers)
111
132
 
112
133
 
113
134
  # This class is part of an EXPERIMENTAL API.
@@ -126,11 +147,21 @@ class WorkflowService(object):
126
147
  wait_for_ready=None,
127
148
  timeout=None,
128
149
  metadata=None):
129
- return grpc.experimental.unary_unary(request, target, '/WorkflowService/PutWorkflow',
150
+ return grpc.experimental.unary_unary(
151
+ request,
152
+ target,
153
+ '/WorkflowService/PutWorkflow',
130
154
  workflows__pb2.PutWorkflowRequest.SerializeToString,
131
155
  workflows__pb2.WorkflowVersion.FromString,
132
- options, channel_credentials,
133
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
156
+ options,
157
+ channel_credentials,
158
+ insecure,
159
+ call_credentials,
160
+ compression,
161
+ wait_for_ready,
162
+ timeout,
163
+ metadata,
164
+ _registered_method=True)
134
165
 
135
166
  @staticmethod
136
167
  def ScheduleWorkflow(request,
@@ -143,11 +174,21 @@ class WorkflowService(object):
143
174
  wait_for_ready=None,
144
175
  timeout=None,
145
176
  metadata=None):
146
- return grpc.experimental.unary_unary(request, target, '/WorkflowService/ScheduleWorkflow',
177
+ return grpc.experimental.unary_unary(
178
+ request,
179
+ target,
180
+ '/WorkflowService/ScheduleWorkflow',
147
181
  workflows__pb2.ScheduleWorkflowRequest.SerializeToString,
148
182
  workflows__pb2.WorkflowVersion.FromString,
149
- options, channel_credentials,
150
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
183
+ options,
184
+ channel_credentials,
185
+ insecure,
186
+ call_credentials,
187
+ compression,
188
+ wait_for_ready,
189
+ timeout,
190
+ metadata,
191
+ _registered_method=True)
151
192
 
152
193
  @staticmethod
153
194
  def TriggerWorkflow(request,
@@ -160,11 +201,21 @@ class WorkflowService(object):
160
201
  wait_for_ready=None,
161
202
  timeout=None,
162
203
  metadata=None):
163
- return grpc.experimental.unary_unary(request, target, '/WorkflowService/TriggerWorkflow',
204
+ return grpc.experimental.unary_unary(
205
+ request,
206
+ target,
207
+ '/WorkflowService/TriggerWorkflow',
164
208
  workflows__pb2.TriggerWorkflowRequest.SerializeToString,
165
209
  workflows__pb2.TriggerWorkflowResponse.FromString,
166
- options, channel_credentials,
167
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
210
+ options,
211
+ channel_credentials,
212
+ insecure,
213
+ call_credentials,
214
+ compression,
215
+ wait_for_ready,
216
+ timeout,
217
+ metadata,
218
+ _registered_method=True)
168
219
 
169
220
  @staticmethod
170
221
  def BulkTriggerWorkflow(request,
@@ -177,11 +228,21 @@ class WorkflowService(object):
177
228
  wait_for_ready=None,
178
229
  timeout=None,
179
230
  metadata=None):
180
- return grpc.experimental.unary_unary(request, target, '/WorkflowService/BulkTriggerWorkflow',
231
+ return grpc.experimental.unary_unary(
232
+ request,
233
+ target,
234
+ '/WorkflowService/BulkTriggerWorkflow',
181
235
  workflows__pb2.BulkTriggerWorkflowRequest.SerializeToString,
182
236
  workflows__pb2.BulkTriggerWorkflowResponse.FromString,
183
- options, channel_credentials,
184
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
237
+ options,
238
+ channel_credentials,
239
+ insecure,
240
+ call_credentials,
241
+ compression,
242
+ wait_for_ready,
243
+ timeout,
244
+ metadata,
245
+ _registered_method=True)
185
246
 
186
247
  @staticmethod
187
248
  def PutRateLimit(request,
@@ -194,8 +255,18 @@ class WorkflowService(object):
194
255
  wait_for_ready=None,
195
256
  timeout=None,
196
257
  metadata=None):
197
- return grpc.experimental.unary_unary(request, target, '/WorkflowService/PutRateLimit',
258
+ return grpc.experimental.unary_unary(
259
+ request,
260
+ target,
261
+ '/WorkflowService/PutRateLimit',
198
262
  workflows__pb2.PutRateLimitRequest.SerializeToString,
199
263
  workflows__pb2.PutRateLimitResponse.FromString,
200
- options, channel_credentials,
201
- insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
264
+ options,
265
+ channel_credentials,
266
+ insecure,
267
+ call_credentials,
268
+ compression,
269
+ wait_for_ready,
270
+ timeout,
271
+ metadata,
272
+ _registered_method=True)
hatchet_sdk/hatchet.py CHANGED
@@ -1,15 +1,13 @@
1
1
  import asyncio
2
2
  import logging
3
- from typing import Any, Callable, Optional, Type, TypeVar, cast, get_type_hints
3
+ from typing import Any, Callable, Optional, Type, TypeVar, Union
4
4
 
5
5
  from pydantic import BaseModel
6
6
  from typing_extensions import deprecated
7
7
 
8
8
  from hatchet_sdk.clients.rest_client import RestApi
9
-
10
- ## TODO: These type stubs need to be updated to mass MyPy, and then we can remove this ignore
11
- ## There are file-level type ignore lines in the corresponding .pyi files.
12
- from hatchet_sdk.contracts.workflows_pb2 import ( # type: ignore[attr-defined]
9
+ from hatchet_sdk.context.context import Context
10
+ from hatchet_sdk.contracts.workflows_pb2 import (
13
11
  ConcurrencyLimitStrategy,
14
12
  CreateStepRateLimit,
15
13
  DesiredWorkerLabels,
@@ -20,6 +18,7 @@ from hatchet_sdk.features.scheduled import ScheduledClient
20
18
  from hatchet_sdk.labels import DesiredWorkerLabel
21
19
  from hatchet_sdk.loader import ClientConfig, ConfigLoader
22
20
  from hatchet_sdk.rate_limit import RateLimit
21
+ from hatchet_sdk.v2.callable import HatchetCallable
23
22
 
24
23
  from .client import Client, new_client, new_client_raw
25
24
  from .clients.admin import AdminClient
@@ -36,6 +35,7 @@ from .workflow import (
36
35
  )
37
36
 
38
37
  T = TypeVar("T", bound=BaseModel)
38
+ TWorkflow = TypeVar("TWorkflow", bound=object)
39
39
 
40
40
 
41
41
  def workflow(
@@ -45,30 +45,35 @@ def workflow(
45
45
  version: str = "",
46
46
  timeout: str = "60m",
47
47
  schedule_timeout: str = "5m",
48
- sticky: StickyStrategy = None,
48
+ sticky: Union[StickyStrategy.Value, None] = None, # type: ignore[name-defined]
49
49
  default_priority: int | None = None,
50
50
  concurrency: ConcurrencyExpression | None = None,
51
51
  input_validator: Type[T] | None = None,
52
- ) -> Callable[[Type[WorkflowInterface]], WorkflowMeta]:
52
+ ) -> Callable[[Type[TWorkflow]], WorkflowMeta]:
53
53
  on_events = on_events or []
54
54
  on_crons = on_crons or []
55
55
 
56
- def inner(cls: Type[WorkflowInterface]) -> WorkflowMeta:
57
- cls.on_events = on_events
58
- cls.on_crons = on_crons
59
- cls.name = name or str(cls.__name__)
60
- cls.version = version
61
- cls.timeout = timeout
62
- cls.schedule_timeout = schedule_timeout
63
- cls.sticky = sticky
64
- cls.default_priority = default_priority
65
- cls.concurrency_expression = concurrency
56
+ def inner(cls: Type[TWorkflow]) -> WorkflowMeta:
57
+ nonlocal name
58
+ name = name or str(cls.__name__)
59
+
60
+ setattr(cls, "on_events", on_events)
61
+ setattr(cls, "on_crons", on_crons)
62
+ setattr(cls, "name", name)
63
+ setattr(cls, "version", version)
64
+ setattr(cls, "timeout", timeout)
65
+ setattr(cls, "schedule_timeout", schedule_timeout)
66
+ setattr(cls, "sticky", sticky)
67
+ setattr(cls, "default_priority", default_priority)
68
+ setattr(cls, "concurrency_expression", concurrency)
69
+
66
70
  # Define a new class with the same name and bases as the original, but
67
71
  # with WorkflowMeta as its metaclass
68
72
 
69
73
  ## TODO: Figure out how to type this metaclass correctly
70
- cls.input_validator = input_validator
71
- return WorkflowMeta(cls.name, cls.__bases__, dict(cls.__dict__))
74
+ setattr(cls, "input_validator", input_validator)
75
+
76
+ return WorkflowMeta(name, cls.__bases__, dict(cls.__dict__))
72
77
 
73
78
  return inner
74
79
 
@@ -82,34 +87,39 @@ def step(
82
87
  desired_worker_labels: dict[str, DesiredWorkerLabel] = {},
83
88
  backoff_factor: float | None = None,
84
89
  backoff_max_seconds: int | None = None,
85
- ) -> Callable[[WorkflowStepProtocol], WorkflowStepProtocol]:
90
+ ) -> Callable[..., Any]:
86
91
  parents = parents or []
87
92
 
88
- def inner(func: WorkflowStepProtocol) -> WorkflowStepProtocol:
93
+ def inner(func: Callable[[Context], Any]) -> Callable[[Context], Any]:
89
94
  limits = None
90
95
  if rate_limits:
91
96
  limits = [rate_limit._req for rate_limit in rate_limits or []]
92
97
 
93
- func._step_name = name.lower() or str(func.__name__).lower()
94
- func._step_parents = parents
95
- func._step_timeout = timeout
96
- func._step_retries = retries
97
- func._step_rate_limits = limits
98
- func._step_backoff_factor = backoff_factor
99
- func._step_backoff_max_seconds = backoff_max_seconds
100
-
101
- func._step_desired_worker_labels = {}
98
+ setattr(func, "_step_name", name.lower() or str(func.__name__).lower())
99
+ setattr(func, "_step_parents", parents)
100
+ setattr(func, "_step_timeout", timeout)
101
+ setattr(func, "_step_retries", retries)
102
+ setattr(func, "_step_rate_limits", retries)
103
+ setattr(func, "_step_rate_limits", limits)
104
+ setattr(func, "_step_backoff_factor", backoff_factor)
105
+ setattr(func, "_step_backoff_max_seconds", backoff_max_seconds)
102
106
 
103
- for key, d in desired_worker_labels.items():
107
+ def create_label(d: DesiredWorkerLabel) -> DesiredWorkerLabels:
104
108
  value = d["value"] if "value" in d else None
105
- func._step_desired_worker_labels[key] = DesiredWorkerLabels(
109
+ return DesiredWorkerLabels(
106
110
  strValue=str(value) if not isinstance(value, int) else None,
107
111
  intValue=value if isinstance(value, int) else None,
108
- required=d["required"] if "required" in d else None,
112
+ required=d["required"] if "required" in d else None, # type: ignore[arg-type]
109
113
  weight=d["weight"] if "weight" in d else None,
110
- comparator=d["comparator"] if "comparator" in d else None,
114
+ comparator=d["comparator"] if "comparator" in d else None, # type: ignore[arg-type]
111
115
  )
112
116
 
117
+ setattr(
118
+ func,
119
+ "_step_desired_worker_labels",
120
+ {key: create_label(d) for key, d in desired_worker_labels.items()},
121
+ )
122
+
113
123
  return func
114
124
 
115
125
  return inner
@@ -122,21 +132,23 @@ def on_failure_step(
122
132
  rate_limits: list[RateLimit] | None = None,
123
133
  backoff_factor: float | None = None,
124
134
  backoff_max_seconds: int | None = None,
125
- ) -> Callable[[WorkflowStepProtocol], WorkflowStepProtocol]:
126
- def inner(func: WorkflowStepProtocol) -> WorkflowStepProtocol:
135
+ ) -> Callable[..., Any]:
136
+ def inner(func: Callable[[Context], Any]) -> Callable[[Context], Any]:
127
137
  limits = None
128
138
  if rate_limits:
129
139
  limits = [
130
- CreateStepRateLimit(key=rate_limit.static_key, units=rate_limit.units)
140
+ CreateStepRateLimit(key=rate_limit.static_key, units=rate_limit.units) # type: ignore[arg-type]
131
141
  for rate_limit in rate_limits or []
132
142
  ]
133
143
 
134
- func._on_failure_step_name = name.lower() or str(func.__name__).lower()
135
- func._on_failure_step_timeout = timeout
136
- func._on_failure_step_retries = retries
137
- func._on_failure_step_rate_limits = limits
138
- func._on_failure_step_backoff_factor = backoff_factor
139
- func._on_failure_step_backoff_max_seconds = backoff_max_seconds
144
+ setattr(
145
+ func, "_on_failure_step_name", name.lower() or str(func.__name__).lower()
146
+ )
147
+ setattr(func, "_on_failure_step_timeout", timeout)
148
+ setattr(func, "_on_failure_step_retries", retries)
149
+ setattr(func, "_on_failure_step_rate_limits", limits)
150
+ setattr(func, "_on_failure_step_backoff_factor", backoff_factor)
151
+ setattr(func, "_on_failure_step_backoff_max_seconds", backoff_max_seconds)
140
152
 
141
153
  return func
142
154
 
@@ -147,11 +159,15 @@ def concurrency(
147
159
  name: str = "",
148
160
  max_runs: int = 1,
149
161
  limit_strategy: ConcurrencyLimitStrategy = ConcurrencyLimitStrategy.CANCEL_IN_PROGRESS,
150
- ) -> Callable[[WorkflowStepProtocol], WorkflowStepProtocol]:
151
- def inner(func: WorkflowStepProtocol) -> WorkflowStepProtocol:
152
- func._concurrency_fn_name = name.lower() or str(func.__name__).lower()
153
- func._concurrency_max_runs = max_runs
154
- func._concurrency_limit_strategy = limit_strategy
162
+ ) -> Callable[..., Any]:
163
+ def inner(func: Callable[[Context], Any]) -> Callable[[Context], Any]:
164
+ setattr(
165
+ func,
166
+ "_concurrency_fn_name",
167
+ name.lower() or str(func.__name__).lower(),
168
+ )
169
+ setattr(func, "_concurrency_max_runs", max_runs)
170
+ setattr(func, "_concurrency_limit_strategy", limit_strategy)
155
171
 
156
172
  return func
157
173
 
hatchet_sdk/labels.py CHANGED
@@ -1,7 +1,7 @@
1
1
  from typing import TypedDict
2
2
 
3
3
 
4
- class DesiredWorkerLabel(TypedDict):
4
+ class DesiredWorkerLabel(TypedDict, total=False):
5
5
  value: str | int
6
6
  required: bool | None = None
7
7
  weight: int | None = None
@@ -1,10 +1,13 @@
1
1
  import asyncio
2
2
  import inspect
3
+ from concurrent.futures import Executor
3
4
  from functools import partial, wraps
4
5
  from threading import Thread
6
+ from typing import Any
5
7
 
6
8
 
7
- def sync_to_async(func):
9
+ ## TODO: Stricter typing here
10
+ def sync_to_async(func: Any) -> Any:
8
11
  """
9
12
  A decorator to run a synchronous function or coroutine in an asynchronous context with added
10
13
  asyncio loop safety.
@@ -40,8 +43,14 @@ def sync_to_async(func):
40
43
  asyncio.run(main())
41
44
  """
42
45
 
46
+ ## TODO: Stricter typing here
43
47
  @wraps(func)
44
- async def run(*args, loop=None, executor=None, **kwargs):
48
+ async def run(
49
+ *args: Any,
50
+ loop: asyncio.AbstractEventLoop | None = None,
51
+ executor: Executor | None = None,
52
+ **kwargs: Any
53
+ ) -> Any:
45
54
  """
46
55
  The asynchronous wrapper function that runs the given function in an executor.
47
56
 
@@ -59,7 +68,7 @@ def sync_to_async(func):
59
68
 
60
69
  if inspect.iscoroutinefunction(func):
61
70
  # Wrap the coroutine to run it in an executor
62
- async def wrapper():
71
+ async def wrapper() -> Any:
63
72
  return await func(*args, **kwargs)
64
73
 
65
74
  pfunc = partial(asyncio.run, wrapper())
@@ -75,7 +84,7 @@ def sync_to_async(func):
75
84
  class EventLoopThread:
76
85
  """A class that manages an asyncio event loop running in a separate thread."""
77
86
 
78
- def __init__(self):
87
+ def __init__(self) -> None:
79
88
  """
80
89
  Initializes the EventLoopThread by creating an event loop
81
90
  and setting up a thread to run the loop.
@@ -6,4 +6,7 @@ T = TypeVar("T", bound=BaseModel)
6
6
 
7
7
 
8
8
  def is_basemodel_subclass(model: Any) -> bool:
9
- return isinstance(model, type) and issubclass(model, BaseModel)
9
+ try:
10
+ return issubclass(model, BaseModel)
11
+ except TypeError:
12
+ return False
@@ -1,8 +1,19 @@
1
1
  import asyncio
2
- from typing import Callable, Dict, Generic, List, Optional, TypedDict, TypeVar, Union
2
+ from typing import (
3
+ Any,
4
+ Callable,
5
+ Dict,
6
+ Generic,
7
+ List,
8
+ Optional,
9
+ TypedDict,
10
+ TypeVar,
11
+ Union,
12
+ )
3
13
 
4
- from hatchet_sdk.context import Context
5
- from hatchet_sdk.contracts.workflows_pb2 import (
14
+ from hatchet_sdk.clients.admin import ChildTriggerWorkflowOptions
15
+ from hatchet_sdk.context.context import Context
16
+ from hatchet_sdk.contracts.workflows_pb2 import ( # type: ignore[attr-defined]
6
17
  CreateStepRateLimit,
7
18
  CreateWorkflowJobOpts,
8
19
  CreateWorkflowStepOpts,
@@ -28,8 +39,8 @@ class HatchetCallable(Generic[T]):
28
39
  durable: bool = False,
29
40
  name: str = "",
30
41
  auto_register: bool = True,
31
- on_events: list | None = None,
32
- on_crons: list | None = None,
42
+ on_events: list[str] | None = None,
43
+ on_crons: list[str] | None = None,
33
44
  version: str = "",
34
45
  timeout: str = "60m",
35
46
  schedule_timeout: str = "5m",
@@ -37,8 +48,8 @@ class HatchetCallable(Generic[T]):
37
48
  retries: int = 0,
38
49
  rate_limits: List[RateLimit] | None = None,
39
50
  concurrency: ConcurrencyFunction | None = None,
40
- on_failure: Optional["HatchetCallable"] = None,
41
- desired_worker_labels: dict[str:DesiredWorkerLabel] = {},
51
+ on_failure: Union["HatchetCallable[T]", None] = None,
52
+ desired_worker_labels: dict[str, DesiredWorkerLabel] = {},
42
53
  default_priority: int | None = None,
43
54
  ):
44
55
  self.func = func
@@ -85,7 +96,7 @@ class HatchetCallable(Generic[T]):
85
96
  def __call__(self, context: Context) -> T:
86
97
  return self.func(context)
87
98
 
88
- def with_namespace(self, namespace: str):
99
+ def with_namespace(self, namespace: str) -> None:
89
100
  if namespace is not None and namespace != "":
90
101
  self.function_namespace = namespace
91
102
  self.function_name = namespace + self.function_name
@@ -161,21 +172,13 @@ class HatchetCallable(Generic[T]):
161
172
  return self.function_namespace + ":" + self.function_name
162
173
 
163
174
 
164
- T = TypeVar("T")
165
-
166
-
167
- class TriggerOptions(TypedDict):
168
- additional_metadata: Dict[str, str] | None = None
169
- sticky: bool | None = None
170
-
171
-
172
175
  class DurableContext(Context):
173
176
  def run(
174
177
  self,
175
- function: Union[str, HatchetCallable[T]],
176
- input: dict = {},
177
- key: str = None,
178
- options: TriggerOptions = None,
178
+ function: str | Callable[[Context], Any],
179
+ input: dict[Any, Any] = {},
180
+ key: str | None = None,
181
+ options: ChildTriggerWorkflowOptions | None = None,
179
182
  ) -> "RunRef[T]":
180
183
  worker_id = self.worker.id()
181
184