hatchet-sdk 0.46.1__py3-none-any.whl → 1.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hatchet_sdk/__init__.py +25 -16
- hatchet_sdk/client.py +14 -39
- hatchet_sdk/clients/admin.py +203 -362
- hatchet_sdk/clients/dispatcher/action_listener.py +106 -84
- hatchet_sdk/clients/dispatcher/dispatcher.py +21 -21
- hatchet_sdk/clients/event_ts.py +23 -10
- hatchet_sdk/clients/events.py +96 -99
- hatchet_sdk/clients/rest/__init__.py +24 -0
- hatchet_sdk/clients/rest/api/__init__.py +2 -0
- hatchet_sdk/clients/rest/api/task_api.py +2174 -0
- hatchet_sdk/clients/rest/api/workflow_runs_api.py +638 -106
- hatchet_sdk/clients/rest/api_client.py +1 -1
- hatchet_sdk/clients/rest/configuration.py +8 -1
- hatchet_sdk/clients/rest/exceptions.py +21 -0
- hatchet_sdk/clients/rest/models/__init__.py +22 -0
- hatchet_sdk/clients/rest/models/tenant.py +4 -0
- hatchet_sdk/clients/rest/models/tenant_version.py +37 -0
- hatchet_sdk/clients/rest/models/update_tenant_request.py +7 -0
- hatchet_sdk/clients/rest/models/v1_cancel_task_request.py +104 -0
- hatchet_sdk/clients/rest/models/v1_dag_children.py +102 -0
- hatchet_sdk/clients/rest/models/v1_replay_task_request.py +104 -0
- hatchet_sdk/clients/rest/models/v1_task.py +174 -0
- hatchet_sdk/clients/rest/models/v1_task_event.py +118 -0
- hatchet_sdk/clients/rest/models/v1_task_event_list.py +110 -0
- hatchet_sdk/clients/rest/models/v1_task_event_type.py +55 -0
- hatchet_sdk/clients/rest/models/v1_task_filter.py +106 -0
- hatchet_sdk/clients/rest/models/v1_task_point_metric.py +92 -0
- hatchet_sdk/clients/rest/models/v1_task_point_metrics.py +100 -0
- hatchet_sdk/clients/rest/models/v1_task_run_metric.py +88 -0
- hatchet_sdk/clients/rest/models/v1_task_run_status.py +40 -0
- hatchet_sdk/clients/rest/models/v1_task_status.py +40 -0
- hatchet_sdk/clients/rest/models/v1_task_summary.py +212 -0
- hatchet_sdk/clients/rest/models/v1_task_summary_list.py +110 -0
- hatchet_sdk/clients/rest/models/v1_workflow_run.py +171 -0
- hatchet_sdk/clients/rest/models/v1_workflow_run_details.py +145 -0
- hatchet_sdk/clients/rest/models/v1_workflow_type.py +37 -0
- hatchet_sdk/clients/rest/models/workflow_run_shape_item_for_workflow_run_details.py +99 -0
- hatchet_sdk/clients/rest/rest.py +37 -26
- hatchet_sdk/clients/rest/tenacity_utils.py +1 -1
- hatchet_sdk/clients/rest_client.py +141 -116
- hatchet_sdk/clients/run_event_listener.py +66 -60
- hatchet_sdk/clients/workflow_listener.py +77 -64
- hatchet_sdk/config.py +117 -0
- hatchet_sdk/connection.py +27 -13
- hatchet_sdk/context/__init__.py +0 -1
- hatchet_sdk/context/context.py +143 -202
- hatchet_sdk/features/cron.py +43 -57
- hatchet_sdk/features/scheduled.py +60 -74
- hatchet_sdk/hatchet.py +192 -195
- hatchet_sdk/labels.py +4 -6
- hatchet_sdk/metadata.py +1 -1
- hatchet_sdk/opentelemetry/instrumentor.py +112 -35
- hatchet_sdk/rate_limit.py +9 -18
- hatchet_sdk/token.py +13 -9
- hatchet_sdk/utils/aio_utils.py +0 -40
- hatchet_sdk/utils/proto_enums.py +54 -0
- hatchet_sdk/utils/typing.py +9 -1
- hatchet_sdk/v0/__init__.py +251 -0
- hatchet_sdk/v0/client.py +119 -0
- hatchet_sdk/v0/clients/admin.py +541 -0
- hatchet_sdk/v0/clients/dispatcher/action_listener.py +422 -0
- hatchet_sdk/v0/clients/dispatcher/dispatcher.py +204 -0
- hatchet_sdk/v0/clients/event_ts.py +28 -0
- hatchet_sdk/v0/clients/events.py +182 -0
- hatchet_sdk/v0/clients/rest/__init__.py +307 -0
- hatchet_sdk/v0/clients/rest/api/__init__.py +19 -0
- hatchet_sdk/v0/clients/rest/api/api_token_api.py +858 -0
- hatchet_sdk/v0/clients/rest/api/default_api.py +2259 -0
- hatchet_sdk/v0/clients/rest/api/event_api.py +2548 -0
- hatchet_sdk/v0/clients/rest/api/github_api.py +331 -0
- hatchet_sdk/v0/clients/rest/api/healthcheck_api.py +483 -0
- hatchet_sdk/v0/clients/rest/api/log_api.py +449 -0
- hatchet_sdk/v0/clients/rest/api/metadata_api.py +728 -0
- hatchet_sdk/v0/clients/rest/api/rate_limits_api.py +423 -0
- hatchet_sdk/v0/clients/rest/api/slack_api.py +577 -0
- hatchet_sdk/v0/clients/rest/api/sns_api.py +872 -0
- hatchet_sdk/v0/clients/rest/api/step_run_api.py +2202 -0
- hatchet_sdk/v0/clients/rest/api/tenant_api.py +4430 -0
- hatchet_sdk/v0/clients/rest/api/user_api.py +2888 -0
- hatchet_sdk/v0/clients/rest/api/worker_api.py +858 -0
- hatchet_sdk/v0/clients/rest/api/workflow_api.py +6312 -0
- hatchet_sdk/v0/clients/rest/api/workflow_run_api.py +1932 -0
- hatchet_sdk/v0/clients/rest/api/workflow_runs_api.py +610 -0
- hatchet_sdk/v0/clients/rest/api_client.py +759 -0
- hatchet_sdk/v0/clients/rest/api_response.py +22 -0
- hatchet_sdk/v0/clients/rest/configuration.py +611 -0
- hatchet_sdk/v0/clients/rest/exceptions.py +200 -0
- hatchet_sdk/v0/clients/rest/models/__init__.py +274 -0
- hatchet_sdk/v0/clients/rest/models/accept_invite_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/api_error.py +102 -0
- hatchet_sdk/v0/clients/rest/models/api_errors.py +100 -0
- hatchet_sdk/v0/clients/rest/models/api_meta.py +144 -0
- hatchet_sdk/v0/clients/rest/models/api_meta_auth.py +85 -0
- hatchet_sdk/v0/clients/rest/models/api_meta_integration.py +88 -0
- hatchet_sdk/v0/clients/rest/models/api_meta_posthog.py +90 -0
- hatchet_sdk/v0/clients/rest/models/api_resource_meta.py +98 -0
- hatchet_sdk/v0/clients/rest/models/api_token.py +105 -0
- hatchet_sdk/v0/clients/rest/models/bulk_create_event_request.py +100 -0
- hatchet_sdk/v0/clients/rest/models/bulk_create_event_response.py +110 -0
- hatchet_sdk/v0/clients/rest/models/cancel_event_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/cancel_step_run_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/concurrency_limit_strategy.py +39 -0
- hatchet_sdk/v0/clients/rest/models/create_api_token_request.py +92 -0
- hatchet_sdk/v0/clients/rest/models/create_api_token_response.py +83 -0
- hatchet_sdk/v0/clients/rest/models/create_cron_workflow_trigger_request.py +98 -0
- hatchet_sdk/v0/clients/rest/models/create_event_request.py +95 -0
- hatchet_sdk/v0/clients/rest/models/create_pull_request_from_step_run.py +83 -0
- hatchet_sdk/v0/clients/rest/models/create_sns_integration_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/create_tenant_alert_email_group_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/create_tenant_invite_request.py +86 -0
- hatchet_sdk/v0/clients/rest/models/create_tenant_request.py +84 -0
- hatchet_sdk/v0/clients/rest/models/cron_workflows.py +131 -0
- hatchet_sdk/v0/clients/rest/models/cron_workflows_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/cron_workflows_method.py +37 -0
- hatchet_sdk/v0/clients/rest/models/cron_workflows_order_by_field.py +37 -0
- hatchet_sdk/v0/clients/rest/models/event.py +143 -0
- hatchet_sdk/v0/clients/rest/models/event_data.py +83 -0
- hatchet_sdk/v0/clients/rest/models/event_key_list.py +98 -0
- hatchet_sdk/v0/clients/rest/models/event_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/event_order_by_direction.py +37 -0
- hatchet_sdk/v0/clients/rest/models/event_order_by_field.py +36 -0
- hatchet_sdk/v0/clients/rest/models/event_update_cancel200_response.py +85 -0
- hatchet_sdk/v0/clients/rest/models/event_workflow_run_summary.py +116 -0
- hatchet_sdk/v0/clients/rest/models/events.py +110 -0
- hatchet_sdk/v0/clients/rest/models/get_step_run_diff_response.py +100 -0
- hatchet_sdk/v0/clients/rest/models/github_app_installation.py +107 -0
- hatchet_sdk/v0/clients/rest/models/github_branch.py +86 -0
- hatchet_sdk/v0/clients/rest/models/github_repo.py +86 -0
- hatchet_sdk/v0/clients/rest/models/info_get_version200_response.py +83 -0
- hatchet_sdk/v0/clients/rest/models/job.py +132 -0
- hatchet_sdk/v0/clients/rest/models/job_run.py +176 -0
- hatchet_sdk/v0/clients/rest/models/job_run_status.py +41 -0
- hatchet_sdk/v0/clients/rest/models/link_github_repository_request.py +106 -0
- hatchet_sdk/v0/clients/rest/models/list_api_tokens_response.py +110 -0
- hatchet_sdk/v0/clients/rest/models/list_github_app_installations_response.py +112 -0
- hatchet_sdk/v0/clients/rest/models/list_pull_requests_response.py +100 -0
- hatchet_sdk/v0/clients/rest/models/list_slack_webhooks.py +110 -0
- hatchet_sdk/v0/clients/rest/models/list_sns_integrations.py +110 -0
- hatchet_sdk/v0/clients/rest/models/log_line.py +94 -0
- hatchet_sdk/v0/clients/rest/models/log_line_level.py +39 -0
- hatchet_sdk/v0/clients/rest/models/log_line_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/log_line_order_by_direction.py +37 -0
- hatchet_sdk/v0/clients/rest/models/log_line_order_by_field.py +36 -0
- hatchet_sdk/v0/clients/rest/models/pagination_response.py +95 -0
- hatchet_sdk/v0/clients/rest/models/pull_request.py +112 -0
- hatchet_sdk/v0/clients/rest/models/pull_request_state.py +37 -0
- hatchet_sdk/v0/clients/rest/models/queue_metrics.py +97 -0
- hatchet_sdk/v0/clients/rest/models/rate_limit.py +117 -0
- hatchet_sdk/v0/clients/rest/models/rate_limit_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/rate_limit_order_by_direction.py +37 -0
- hatchet_sdk/v0/clients/rest/models/rate_limit_order_by_field.py +38 -0
- hatchet_sdk/v0/clients/rest/models/recent_step_runs.py +118 -0
- hatchet_sdk/v0/clients/rest/models/reject_invite_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/replay_event_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/replay_workflow_runs_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/replay_workflow_runs_response.py +100 -0
- hatchet_sdk/v0/clients/rest/models/rerun_step_run_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/schedule_workflow_run_request.py +92 -0
- hatchet_sdk/v0/clients/rest/models/scheduled_run_status.py +42 -0
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows.py +149 -0
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows_method.py +37 -0
- hatchet_sdk/v0/clients/rest/models/scheduled_workflows_order_by_field.py +37 -0
- hatchet_sdk/v0/clients/rest/models/semaphore_slots.py +113 -0
- hatchet_sdk/v0/clients/rest/models/slack_webhook.py +127 -0
- hatchet_sdk/v0/clients/rest/models/sns_integration.py +114 -0
- hatchet_sdk/v0/clients/rest/models/step.py +123 -0
- hatchet_sdk/v0/clients/rest/models/step_run.py +202 -0
- hatchet_sdk/v0/clients/rest/models/step_run_archive.py +142 -0
- hatchet_sdk/v0/clients/rest/models/step_run_archive_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/step_run_diff.py +91 -0
- hatchet_sdk/v0/clients/rest/models/step_run_event.py +122 -0
- hatchet_sdk/v0/clients/rest/models/step_run_event_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/step_run_event_reason.py +52 -0
- hatchet_sdk/v0/clients/rest/models/step_run_event_severity.py +38 -0
- hatchet_sdk/v0/clients/rest/models/step_run_status.py +44 -0
- hatchet_sdk/v0/clients/rest/models/tenant.py +118 -0
- hatchet_sdk/v0/clients/rest/models/tenant_alert_email_group.py +98 -0
- hatchet_sdk/v0/clients/rest/models/tenant_alert_email_group_list.py +112 -0
- hatchet_sdk/v0/clients/rest/models/tenant_alerting_settings.py +143 -0
- hatchet_sdk/v0/clients/rest/models/tenant_invite.py +120 -0
- hatchet_sdk/v0/clients/rest/models/tenant_invite_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/tenant_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/tenant_member.py +123 -0
- hatchet_sdk/v0/clients/rest/models/tenant_member_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/tenant_member_role.py +38 -0
- hatchet_sdk/v0/clients/rest/models/tenant_queue_metrics.py +116 -0
- hatchet_sdk/v0/clients/rest/models/tenant_resource.py +40 -0
- hatchet_sdk/v0/clients/rest/models/tenant_resource_limit.py +135 -0
- hatchet_sdk/v0/clients/rest/models/tenant_resource_policy.py +102 -0
- hatchet_sdk/v0/clients/rest/models/tenant_step_run_queue_metrics.py +83 -0
- hatchet_sdk/v0/clients/rest/models/trigger_workflow_run_request.py +91 -0
- hatchet_sdk/v0/clients/rest/models/update_tenant_alert_email_group_request.py +83 -0
- hatchet_sdk/v0/clients/rest/models/update_tenant_invite_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/update_tenant_request.py +137 -0
- hatchet_sdk/v0/clients/rest/models/update_worker_request.py +87 -0
- hatchet_sdk/v0/clients/rest/models/user.py +126 -0
- hatchet_sdk/v0/clients/rest/models/user_change_password_request.py +88 -0
- hatchet_sdk/v0/clients/rest/models/user_login_request.py +86 -0
- hatchet_sdk/v0/clients/rest/models/user_register_request.py +91 -0
- hatchet_sdk/v0/clients/rest/models/user_tenant_memberships_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/user_tenant_public.py +86 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker.py +100 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_create_request.py +94 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_create_response.py +98 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_created.py +102 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_list_response.py +110 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_request.py +102 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_request_list_response.py +104 -0
- hatchet_sdk/v0/clients/rest/models/webhook_worker_request_method.py +38 -0
- hatchet_sdk/v0/clients/rest/models/worker.py +239 -0
- hatchet_sdk/v0/clients/rest/models/worker_label.py +102 -0
- hatchet_sdk/v0/clients/rest/models/worker_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/worker_runtime_info.py +103 -0
- hatchet_sdk/v0/clients/rest/models/worker_runtime_sdks.py +38 -0
- hatchet_sdk/v0/clients/rest/models/worker_type.py +38 -0
- hatchet_sdk/v0/clients/rest/models/workflow.py +165 -0
- hatchet_sdk/v0/clients/rest/models/workflow_concurrency.py +107 -0
- hatchet_sdk/v0/clients/rest/models/workflow_deployment_config.py +136 -0
- hatchet_sdk/v0/clients/rest/models/workflow_kind.py +38 -0
- hatchet_sdk/v0/clients/rest/models/workflow_list.py +120 -0
- hatchet_sdk/v0/clients/rest/models/workflow_metrics.py +97 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run.py +188 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_cancel200_response.py +85 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_list.py +110 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_order_by_direction.py +37 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_order_by_field.py +39 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_shape.py +186 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_status.py +42 -0
- hatchet_sdk/v0/clients/rest/models/workflow_run_triggered_by.py +112 -0
- hatchet_sdk/v0/clients/rest/models/workflow_runs_cancel_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/workflow_runs_metrics.py +94 -0
- hatchet_sdk/v0/clients/rest/models/workflow_runs_metrics_counts.py +104 -0
- hatchet_sdk/v0/clients/rest/models/workflow_tag.py +84 -0
- hatchet_sdk/v0/clients/rest/models/workflow_trigger_cron_ref.py +86 -0
- hatchet_sdk/v0/clients/rest/models/workflow_trigger_event_ref.py +86 -0
- hatchet_sdk/v0/clients/rest/models/workflow_triggers.py +141 -0
- hatchet_sdk/v0/clients/rest/models/workflow_update_request.py +85 -0
- hatchet_sdk/v0/clients/rest/models/workflow_version.py +170 -0
- hatchet_sdk/v0/clients/rest/models/workflow_version_concurrency.py +114 -0
- hatchet_sdk/v0/clients/rest/models/workflow_version_definition.py +85 -0
- hatchet_sdk/v0/clients/rest/models/workflow_version_meta.py +123 -0
- hatchet_sdk/v0/clients/rest/models/workflow_workers_count.py +95 -0
- hatchet_sdk/v0/clients/rest/rest.py +187 -0
- hatchet_sdk/v0/clients/rest/tenacity_utils.py +39 -0
- hatchet_sdk/v0/clients/rest_client.py +613 -0
- hatchet_sdk/v0/clients/run_event_listener.py +260 -0
- hatchet_sdk/v0/clients/workflow_listener.py +277 -0
- hatchet_sdk/v0/connection.py +63 -0
- hatchet_sdk/v0/context/__init__.py +1 -0
- hatchet_sdk/v0/context/context.py +446 -0
- hatchet_sdk/v0/context/worker_context.py +28 -0
- hatchet_sdk/v0/contracts/dispatcher_pb2.py +102 -0
- hatchet_sdk/v0/contracts/dispatcher_pb2.pyi +387 -0
- hatchet_sdk/v0/contracts/dispatcher_pb2_grpc.py +621 -0
- hatchet_sdk/v0/contracts/events_pb2.py +46 -0
- hatchet_sdk/v0/contracts/events_pb2.pyi +87 -0
- hatchet_sdk/v0/contracts/events_pb2_grpc.py +274 -0
- hatchet_sdk/v0/contracts/workflows_pb2.py +80 -0
- hatchet_sdk/v0/contracts/workflows_pb2.pyi +312 -0
- hatchet_sdk/v0/contracts/workflows_pb2_grpc.py +277 -0
- hatchet_sdk/v0/features/cron.py +286 -0
- hatchet_sdk/v0/features/scheduled.py +248 -0
- hatchet_sdk/v0/hatchet.py +310 -0
- hatchet_sdk/v0/labels.py +10 -0
- hatchet_sdk/{loader.py → v0/loader.py} +11 -0
- hatchet_sdk/v0/logger.py +13 -0
- hatchet_sdk/v0/metadata.py +2 -0
- hatchet_sdk/v0/opentelemetry/instrumentor.py +396 -0
- hatchet_sdk/v0/rate_limit.py +126 -0
- hatchet_sdk/v0/semver.py +30 -0
- hatchet_sdk/v0/token.py +27 -0
- hatchet_sdk/v0/utils/aio_utils.py +137 -0
- hatchet_sdk/v0/utils/backoff.py +9 -0
- hatchet_sdk/v0/utils/typing.py +12 -0
- hatchet_sdk/{v2 → v0/v2}/callable.py +8 -8
- hatchet_sdk/{v2 → v0/v2}/concurrency.py +2 -2
- hatchet_sdk/{v2 → v0/v2}/hatchet.py +10 -10
- hatchet_sdk/v0/worker/__init__.py +1 -0
- hatchet_sdk/v0/worker/action_listener_process.py +278 -0
- hatchet_sdk/v0/worker/runner/run_loop_manager.py +112 -0
- hatchet_sdk/v0/worker/runner/runner.py +460 -0
- hatchet_sdk/v0/worker/runner/utils/capture_logs.py +81 -0
- hatchet_sdk/v0/worker/runner/utils/error_with_traceback.py +6 -0
- hatchet_sdk/v0/worker/worker.py +391 -0
- hatchet_sdk/v0/workflow.py +261 -0
- hatchet_sdk/v0/workflow_run.py +59 -0
- hatchet_sdk/worker/__init__.py +0 -1
- hatchet_sdk/worker/action_listener_process.py +36 -33
- hatchet_sdk/worker/runner/run_loop_manager.py +18 -16
- hatchet_sdk/worker/runner/runner.py +37 -59
- hatchet_sdk/worker/runner/utils/capture_logs.py +25 -14
- hatchet_sdk/worker/runner/utils/error_with_traceback.py +1 -1
- hatchet_sdk/worker/worker.py +61 -75
- hatchet_sdk/workflow.py +473 -207
- hatchet_sdk/workflow_run.py +14 -25
- {hatchet_sdk-0.46.1.dist-info → hatchet_sdk-1.0.0.dist-info}/METADATA +3 -2
- hatchet_sdk-1.0.0.dist-info/RECORD +485 -0
- {hatchet_sdk-0.46.1.dist-info → hatchet_sdk-1.0.0.dist-info}/entry_points.txt +1 -0
- hatchet_sdk/utils/serialization.py +0 -18
- hatchet_sdk-0.46.1.dist-info/RECORD +0 -237
- /hatchet_sdk/{utils → v0/utils}/types.py +0 -0
- {hatchet_sdk-0.46.1.dist-info → hatchet_sdk-1.0.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
import inspect
|
|
2
|
+
import json
|
|
3
|
+
import traceback
|
|
4
|
+
from concurrent.futures import Future, ThreadPoolExecutor
|
|
5
|
+
from typing import Any, Generic, Type, TypeVar, cast, overload
|
|
6
|
+
from warnings import warn
|
|
7
|
+
|
|
8
|
+
from pydantic import BaseModel, StrictStr
|
|
9
|
+
|
|
10
|
+
from hatchet_sdk.v0.clients.events import EventClient
|
|
11
|
+
from hatchet_sdk.v0.clients.rest.tenacity_utils import tenacity_retry
|
|
12
|
+
from hatchet_sdk.v0.clients.rest_client import RestApi
|
|
13
|
+
from hatchet_sdk.v0.clients.run_event_listener import RunEventListenerClient
|
|
14
|
+
from hatchet_sdk.v0.clients.workflow_listener import PooledWorkflowRunListener
|
|
15
|
+
from hatchet_sdk.v0.context.worker_context import WorkerContext
|
|
16
|
+
from hatchet_sdk.v0.contracts.dispatcher_pb2 import OverridesData
|
|
17
|
+
from hatchet_sdk.v0.contracts.workflows_pb2 import (
|
|
18
|
+
BulkTriggerWorkflowRequest,
|
|
19
|
+
TriggerWorkflowRequest,
|
|
20
|
+
)
|
|
21
|
+
from hatchet_sdk.v0.utils.types import WorkflowValidator
|
|
22
|
+
from hatchet_sdk.v0.utils.typing import is_basemodel_subclass
|
|
23
|
+
from hatchet_sdk.v0.workflow_run import WorkflowRunRef
|
|
24
|
+
|
|
25
|
+
from ..clients.admin import (
|
|
26
|
+
AdminClient,
|
|
27
|
+
ChildTriggerWorkflowOptions,
|
|
28
|
+
ChildWorkflowRunDict,
|
|
29
|
+
TriggerWorkflowOptions,
|
|
30
|
+
WorkflowRunDict,
|
|
31
|
+
)
|
|
32
|
+
from ..clients.dispatcher.dispatcher import ( # type: ignore[attr-defined]
|
|
33
|
+
Action,
|
|
34
|
+
DispatcherClient,
|
|
35
|
+
)
|
|
36
|
+
from ..logger import logger
|
|
37
|
+
|
|
38
|
+
DEFAULT_WORKFLOW_POLLING_INTERVAL = 5 # Seconds
|
|
39
|
+
|
|
40
|
+
T = TypeVar("T", bound=BaseModel)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def get_caller_file_path() -> str:
|
|
44
|
+
caller_frame = inspect.stack()[2]
|
|
45
|
+
|
|
46
|
+
return caller_frame.filename
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class BaseContext:
|
|
50
|
+
|
|
51
|
+
action: Action
|
|
52
|
+
spawn_index: int
|
|
53
|
+
|
|
54
|
+
def _prepare_workflow_options(
|
|
55
|
+
self,
|
|
56
|
+
key: str | None = None,
|
|
57
|
+
options: ChildTriggerWorkflowOptions | None = None,
|
|
58
|
+
worker_id: str | None = None,
|
|
59
|
+
) -> TriggerWorkflowOptions:
|
|
60
|
+
workflow_run_id = self.action.workflow_run_id
|
|
61
|
+
step_run_id = self.action.step_run_id
|
|
62
|
+
|
|
63
|
+
desired_worker_id = None
|
|
64
|
+
if options is not None and "sticky" in options and options["sticky"] == True:
|
|
65
|
+
desired_worker_id = worker_id
|
|
66
|
+
|
|
67
|
+
meta = None
|
|
68
|
+
if options is not None and "additional_metadata" in options:
|
|
69
|
+
meta = options["additional_metadata"]
|
|
70
|
+
|
|
71
|
+
## TODO: Pydantic here to simplify this
|
|
72
|
+
trigger_options: TriggerWorkflowOptions = {
|
|
73
|
+
"parent_id": workflow_run_id,
|
|
74
|
+
"parent_step_run_id": step_run_id,
|
|
75
|
+
"child_key": key,
|
|
76
|
+
"child_index": self.spawn_index,
|
|
77
|
+
"additional_metadata": meta,
|
|
78
|
+
"desired_worker_id": desired_worker_id,
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
self.spawn_index += 1
|
|
82
|
+
return trigger_options
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class ContextAioImpl(BaseContext):
|
|
86
|
+
def __init__(
|
|
87
|
+
self,
|
|
88
|
+
action: Action,
|
|
89
|
+
dispatcher_client: DispatcherClient,
|
|
90
|
+
admin_client: AdminClient,
|
|
91
|
+
event_client: EventClient,
|
|
92
|
+
rest_client: RestApi,
|
|
93
|
+
workflow_listener: PooledWorkflowRunListener,
|
|
94
|
+
workflow_run_event_listener: RunEventListenerClient,
|
|
95
|
+
worker: WorkerContext,
|
|
96
|
+
namespace: str = "",
|
|
97
|
+
):
|
|
98
|
+
self.action = action
|
|
99
|
+
self.dispatcher_client = dispatcher_client
|
|
100
|
+
self.admin_client = admin_client
|
|
101
|
+
self.event_client = event_client
|
|
102
|
+
self.rest_client = rest_client
|
|
103
|
+
self.workflow_listener = workflow_listener
|
|
104
|
+
self.workflow_run_event_listener = workflow_run_event_listener
|
|
105
|
+
self.namespace = namespace
|
|
106
|
+
self.spawn_index = -1
|
|
107
|
+
self.worker = worker
|
|
108
|
+
|
|
109
|
+
@tenacity_retry
|
|
110
|
+
async def spawn_workflow(
|
|
111
|
+
self,
|
|
112
|
+
workflow_name: str,
|
|
113
|
+
input: dict[str, Any] = {},
|
|
114
|
+
key: str | None = None,
|
|
115
|
+
options: ChildTriggerWorkflowOptions | None = None,
|
|
116
|
+
) -> WorkflowRunRef:
|
|
117
|
+
worker_id = self.worker.id()
|
|
118
|
+
# if (
|
|
119
|
+
# options is not None
|
|
120
|
+
# and "sticky" in options
|
|
121
|
+
# and options["sticky"] == True
|
|
122
|
+
# and not self.worker.has_workflow(workflow_name)
|
|
123
|
+
# ):
|
|
124
|
+
# raise Exception(
|
|
125
|
+
# f"cannot run with sticky: workflow {workflow_name} is not registered on the worker"
|
|
126
|
+
# )
|
|
127
|
+
|
|
128
|
+
trigger_options = self._prepare_workflow_options(key, options, worker_id)
|
|
129
|
+
|
|
130
|
+
return await self.admin_client.aio.run_workflow(
|
|
131
|
+
workflow_name, input, trigger_options
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
@tenacity_retry
|
|
135
|
+
async def spawn_workflows(
|
|
136
|
+
self, child_workflow_runs: list[ChildWorkflowRunDict]
|
|
137
|
+
) -> list[WorkflowRunRef]:
|
|
138
|
+
|
|
139
|
+
if len(child_workflow_runs) == 0:
|
|
140
|
+
raise Exception("no child workflows to spawn")
|
|
141
|
+
|
|
142
|
+
worker_id = self.worker.id()
|
|
143
|
+
|
|
144
|
+
bulk_trigger_workflow_runs: list[WorkflowRunDict] = []
|
|
145
|
+
for child_workflow_run in child_workflow_runs:
|
|
146
|
+
workflow_name = child_workflow_run["workflow_name"]
|
|
147
|
+
input = child_workflow_run["input"]
|
|
148
|
+
|
|
149
|
+
key = child_workflow_run.get("key")
|
|
150
|
+
options = child_workflow_run.get("options", {})
|
|
151
|
+
|
|
152
|
+
trigger_options = self._prepare_workflow_options(key, options, worker_id)
|
|
153
|
+
|
|
154
|
+
bulk_trigger_workflow_runs.append(
|
|
155
|
+
WorkflowRunDict(
|
|
156
|
+
workflow_name=workflow_name, input=input, options=trigger_options
|
|
157
|
+
)
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
return await self.admin_client.aio.run_workflows(bulk_trigger_workflow_runs)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
class Context(BaseContext):
|
|
164
|
+
spawn_index = -1
|
|
165
|
+
|
|
166
|
+
worker: WorkerContext
|
|
167
|
+
|
|
168
|
+
def __init__(
|
|
169
|
+
self,
|
|
170
|
+
action: Action,
|
|
171
|
+
dispatcher_client: DispatcherClient,
|
|
172
|
+
admin_client: AdminClient,
|
|
173
|
+
event_client: EventClient,
|
|
174
|
+
rest_client: RestApi,
|
|
175
|
+
workflow_listener: PooledWorkflowRunListener,
|
|
176
|
+
workflow_run_event_listener: RunEventListenerClient,
|
|
177
|
+
worker: WorkerContext,
|
|
178
|
+
namespace: str = "",
|
|
179
|
+
validator_registry: dict[str, WorkflowValidator] = {},
|
|
180
|
+
):
|
|
181
|
+
self.worker = worker
|
|
182
|
+
self.validator_registry = validator_registry
|
|
183
|
+
|
|
184
|
+
self.aio = ContextAioImpl(
|
|
185
|
+
action,
|
|
186
|
+
dispatcher_client,
|
|
187
|
+
admin_client,
|
|
188
|
+
event_client,
|
|
189
|
+
rest_client,
|
|
190
|
+
workflow_listener,
|
|
191
|
+
workflow_run_event_listener,
|
|
192
|
+
worker,
|
|
193
|
+
namespace,
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
# Check the type of action.action_payload before attempting to load it as JSON
|
|
197
|
+
if isinstance(action.action_payload, (str, bytes, bytearray)):
|
|
198
|
+
try:
|
|
199
|
+
self.data = cast(dict[str, Any], json.loads(action.action_payload))
|
|
200
|
+
except Exception as e:
|
|
201
|
+
logger.error(f"Error parsing action payload: {e}")
|
|
202
|
+
# Assign an empty dictionary if parsing fails
|
|
203
|
+
self.data: dict[str, Any] = {} # type: ignore[no-redef]
|
|
204
|
+
else:
|
|
205
|
+
# Directly assign the payload to self.data if it's already a dict
|
|
206
|
+
self.data = (
|
|
207
|
+
action.action_payload if isinstance(action.action_payload, dict) else {}
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
self.action = action
|
|
211
|
+
|
|
212
|
+
# FIXME: stepRunId is a legacy field, we should remove it
|
|
213
|
+
self.stepRunId = action.step_run_id
|
|
214
|
+
|
|
215
|
+
self.step_run_id = action.step_run_id
|
|
216
|
+
self.exit_flag = False
|
|
217
|
+
self.dispatcher_client = dispatcher_client
|
|
218
|
+
self.admin_client = admin_client
|
|
219
|
+
self.event_client = event_client
|
|
220
|
+
self.rest_client = rest_client
|
|
221
|
+
self.workflow_listener = workflow_listener
|
|
222
|
+
self.workflow_run_event_listener = workflow_run_event_listener
|
|
223
|
+
self.namespace = namespace
|
|
224
|
+
|
|
225
|
+
# FIXME: this limits the number of concurrent log requests to 1, which means we can do about
|
|
226
|
+
# 100 log lines per second but this depends on network.
|
|
227
|
+
self.logger_thread_pool = ThreadPoolExecutor(max_workers=1)
|
|
228
|
+
self.stream_event_thread_pool = ThreadPoolExecutor(max_workers=1)
|
|
229
|
+
|
|
230
|
+
# store each key in the overrides field in a lookup table
|
|
231
|
+
# overrides_data is a dictionary of key-value pairs
|
|
232
|
+
self.overrides_data = self.data.get("overrides", {})
|
|
233
|
+
|
|
234
|
+
if action.get_group_key_run_id != "":
|
|
235
|
+
self.input = self.data
|
|
236
|
+
else:
|
|
237
|
+
self.input = self.data.get("input", {})
|
|
238
|
+
|
|
239
|
+
def step_output(self, step: str) -> dict[str, Any] | BaseModel:
|
|
240
|
+
workflow_validator = next(
|
|
241
|
+
(v for k, v in self.validator_registry.items() if k.split(":")[-1] == step),
|
|
242
|
+
None,
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
try:
|
|
246
|
+
parent_step_data = cast(dict[str, Any], self.data["parents"][step])
|
|
247
|
+
except KeyError:
|
|
248
|
+
raise ValueError(f"Step output for '{step}' not found")
|
|
249
|
+
|
|
250
|
+
if workflow_validator and (v := workflow_validator.step_output):
|
|
251
|
+
return v.model_validate(parent_step_data)
|
|
252
|
+
|
|
253
|
+
return parent_step_data
|
|
254
|
+
|
|
255
|
+
def triggered_by_event(self) -> bool:
|
|
256
|
+
return cast(str, self.data.get("triggered_by", "")) == "event"
|
|
257
|
+
|
|
258
|
+
def workflow_input(self) -> dict[str, Any] | T:
|
|
259
|
+
if (r := self.validator_registry.get(self.action.action_id)) and (
|
|
260
|
+
i := r.workflow_input
|
|
261
|
+
):
|
|
262
|
+
return cast(
|
|
263
|
+
T,
|
|
264
|
+
i.model_validate(self.input),
|
|
265
|
+
)
|
|
266
|
+
|
|
267
|
+
return self.input
|
|
268
|
+
|
|
269
|
+
def workflow_run_id(self) -> str:
|
|
270
|
+
return self.action.workflow_run_id
|
|
271
|
+
|
|
272
|
+
def cancel(self) -> None:
|
|
273
|
+
logger.debug("cancelling step...")
|
|
274
|
+
self.exit_flag = True
|
|
275
|
+
|
|
276
|
+
# done returns true if the context has been cancelled
|
|
277
|
+
def done(self) -> bool:
|
|
278
|
+
return self.exit_flag
|
|
279
|
+
|
|
280
|
+
def playground(self, name: str, default: str | None = None) -> str | None:
|
|
281
|
+
# if the key exists in the overrides_data field, return the value
|
|
282
|
+
if name in self.overrides_data:
|
|
283
|
+
warn(
|
|
284
|
+
"Use of `overrides_data` is deprecated.",
|
|
285
|
+
DeprecationWarning,
|
|
286
|
+
stacklevel=1,
|
|
287
|
+
)
|
|
288
|
+
return str(self.overrides_data[name])
|
|
289
|
+
|
|
290
|
+
caller_file = get_caller_file_path()
|
|
291
|
+
|
|
292
|
+
self.dispatcher_client.put_overrides_data(
|
|
293
|
+
OverridesData(
|
|
294
|
+
stepRunId=self.stepRunId,
|
|
295
|
+
path=name,
|
|
296
|
+
value=json.dumps(default),
|
|
297
|
+
callerFilename=caller_file,
|
|
298
|
+
)
|
|
299
|
+
)
|
|
300
|
+
|
|
301
|
+
return default
|
|
302
|
+
|
|
303
|
+
def _log(self, line: str) -> tuple[bool, Exception | None]:
|
|
304
|
+
try:
|
|
305
|
+
self.event_client.log(message=line, step_run_id=self.stepRunId)
|
|
306
|
+
return True, None
|
|
307
|
+
except Exception as e:
|
|
308
|
+
# we don't want to raise an exception here, as it will kill the log thread
|
|
309
|
+
return False, e
|
|
310
|
+
|
|
311
|
+
def log(self, line: Any, raise_on_error: bool = False) -> None:
|
|
312
|
+
if self.stepRunId == "":
|
|
313
|
+
return
|
|
314
|
+
|
|
315
|
+
if not isinstance(line, str):
|
|
316
|
+
try:
|
|
317
|
+
line = json.dumps(line)
|
|
318
|
+
except Exception:
|
|
319
|
+
line = str(line)
|
|
320
|
+
|
|
321
|
+
future = self.logger_thread_pool.submit(self._log, line)
|
|
322
|
+
|
|
323
|
+
def handle_result(future: Future[tuple[bool, Exception | None]]) -> None:
|
|
324
|
+
success, exception = future.result()
|
|
325
|
+
if not success and exception:
|
|
326
|
+
if raise_on_error:
|
|
327
|
+
raise exception
|
|
328
|
+
else:
|
|
329
|
+
thread_trace = "".join(
|
|
330
|
+
traceback.format_exception(
|
|
331
|
+
type(exception), exception, exception.__traceback__
|
|
332
|
+
)
|
|
333
|
+
)
|
|
334
|
+
call_site_trace = "".join(traceback.format_stack())
|
|
335
|
+
logger.error(
|
|
336
|
+
f"Error in log thread: {exception}\n{thread_trace}\nCalled from:\n{call_site_trace}"
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
future.add_done_callback(handle_result)
|
|
340
|
+
|
|
341
|
+
def release_slot(self) -> None:
|
|
342
|
+
return self.dispatcher_client.release_slot(self.stepRunId)
|
|
343
|
+
|
|
344
|
+
def _put_stream(self, data: str | bytes) -> None:
|
|
345
|
+
try:
|
|
346
|
+
self.event_client.stream(data=data, step_run_id=self.stepRunId)
|
|
347
|
+
except Exception as e:
|
|
348
|
+
logger.error(f"Error putting stream event: {e}")
|
|
349
|
+
|
|
350
|
+
def put_stream(self, data: str | bytes) -> None:
|
|
351
|
+
if self.stepRunId == "":
|
|
352
|
+
return
|
|
353
|
+
|
|
354
|
+
self.stream_event_thread_pool.submit(self._put_stream, data)
|
|
355
|
+
|
|
356
|
+
def refresh_timeout(self, increment_by: str) -> None:
|
|
357
|
+
try:
|
|
358
|
+
return self.dispatcher_client.refresh_timeout(
|
|
359
|
+
step_run_id=self.stepRunId, increment_by=increment_by
|
|
360
|
+
)
|
|
361
|
+
except Exception as e:
|
|
362
|
+
logger.error(f"Error refreshing timeout: {e}")
|
|
363
|
+
|
|
364
|
+
def retry_count(self) -> int:
|
|
365
|
+
return self.action.retry_count
|
|
366
|
+
|
|
367
|
+
def additional_metadata(self) -> dict[str, Any] | None:
|
|
368
|
+
return self.action.additional_metadata
|
|
369
|
+
|
|
370
|
+
def child_index(self) -> int | None:
|
|
371
|
+
return self.action.child_workflow_index
|
|
372
|
+
|
|
373
|
+
def child_key(self) -> str | None:
|
|
374
|
+
return self.action.child_workflow_key
|
|
375
|
+
|
|
376
|
+
def parent_workflow_run_id(self) -> str | None:
|
|
377
|
+
return self.action.parent_workflow_run_id
|
|
378
|
+
|
|
379
|
+
def step_run_errors(self) -> dict[str, str]:
|
|
380
|
+
errors = cast(dict[str, str], self.data.get("step_run_errors", {}))
|
|
381
|
+
|
|
382
|
+
if not errors:
|
|
383
|
+
logger.error(
|
|
384
|
+
"No step run errors found. `context.step_run_errors` is intended to be run in an on-failure step, and will only work on engine versions more recent than v0.53.10"
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
return errors
|
|
388
|
+
|
|
389
|
+
def fetch_run_failures(self) -> list[dict[str, StrictStr]]:
|
|
390
|
+
data = self.rest_client.workflow_run_get(self.action.workflow_run_id)
|
|
391
|
+
other_job_runs = [
|
|
392
|
+
run for run in (data.job_runs or []) if run.job_id != self.action.job_id
|
|
393
|
+
]
|
|
394
|
+
# TODO: Parse Step Runs using a Pydantic Model rather than a hand crafted dictionary
|
|
395
|
+
return [
|
|
396
|
+
{
|
|
397
|
+
"step_id": step_run.step_id,
|
|
398
|
+
"step_run_action_name": step_run.step.action,
|
|
399
|
+
"error": step_run.error,
|
|
400
|
+
}
|
|
401
|
+
for job_run in other_job_runs
|
|
402
|
+
if job_run.step_runs
|
|
403
|
+
for step_run in job_run.step_runs
|
|
404
|
+
if step_run.error and step_run.step
|
|
405
|
+
]
|
|
406
|
+
|
|
407
|
+
@tenacity_retry
|
|
408
|
+
def spawn_workflow(
|
|
409
|
+
self,
|
|
410
|
+
workflow_name: str,
|
|
411
|
+
input: dict[str, Any] = {},
|
|
412
|
+
key: str | None = None,
|
|
413
|
+
options: ChildTriggerWorkflowOptions | None = None,
|
|
414
|
+
) -> WorkflowRunRef:
|
|
415
|
+
worker_id = self.worker.id()
|
|
416
|
+
trigger_options = self._prepare_workflow_options(key, options, worker_id)
|
|
417
|
+
|
|
418
|
+
return self.admin_client.run_workflow(workflow_name, input, trigger_options)
|
|
419
|
+
|
|
420
|
+
@tenacity_retry
|
|
421
|
+
def spawn_workflows(
|
|
422
|
+
self, child_workflow_runs: list[ChildWorkflowRunDict]
|
|
423
|
+
) -> list[WorkflowRunRef]:
|
|
424
|
+
|
|
425
|
+
if len(child_workflow_runs) == 0:
|
|
426
|
+
raise Exception("no child workflows to spawn")
|
|
427
|
+
|
|
428
|
+
worker_id = self.worker.id()
|
|
429
|
+
|
|
430
|
+
bulk_trigger_workflow_runs: list[WorkflowRunDict] = []
|
|
431
|
+
for child_workflow_run in child_workflow_runs:
|
|
432
|
+
workflow_name = child_workflow_run["workflow_name"]
|
|
433
|
+
input = child_workflow_run["input"]
|
|
434
|
+
|
|
435
|
+
key = child_workflow_run.get("key")
|
|
436
|
+
options = child_workflow_run.get("options", {})
|
|
437
|
+
|
|
438
|
+
trigger_options = self._prepare_workflow_options(key, options, worker_id)
|
|
439
|
+
|
|
440
|
+
bulk_trigger_workflow_runs.append(
|
|
441
|
+
WorkflowRunDict(
|
|
442
|
+
workflow_name=workflow_name, input=input, options=trigger_options
|
|
443
|
+
)
|
|
444
|
+
)
|
|
445
|
+
|
|
446
|
+
return self.admin_client.run_workflows(bulk_trigger_workflow_runs)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from hatchet_sdk.v0.clients.dispatcher.dispatcher import DispatcherClient
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class WorkerContext:
|
|
5
|
+
_worker_id: str | None = None
|
|
6
|
+
_registered_workflow_names: list[str] = []
|
|
7
|
+
_labels: dict[str, str | int] = {}
|
|
8
|
+
|
|
9
|
+
def __init__(self, labels: dict[str, str | int], client: DispatcherClient):
|
|
10
|
+
self._labels = labels
|
|
11
|
+
self.client = client
|
|
12
|
+
|
|
13
|
+
def labels(self) -> dict[str, str | int]:
|
|
14
|
+
return self._labels
|
|
15
|
+
|
|
16
|
+
def upsert_labels(self, labels: dict[str, str | int]) -> None:
|
|
17
|
+
self.client.upsert_worker_labels(self._worker_id, labels)
|
|
18
|
+
self._labels.update(labels)
|
|
19
|
+
|
|
20
|
+
async def async_upsert_labels(self, labels: dict[str, str | int]) -> None:
|
|
21
|
+
await self.client.async_upsert_worker_labels(self._worker_id, labels)
|
|
22
|
+
self._labels.update(labels)
|
|
23
|
+
|
|
24
|
+
def id(self) -> str | None:
|
|
25
|
+
return self._worker_id
|
|
26
|
+
|
|
27
|
+
# def has_workflow(self, workflow_name: str):
|
|
28
|
+
# return workflow_name in self._registered_workflow_names
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
|
3
|
+
# source: dispatcher.proto
|
|
4
|
+
# Protobuf Python Version: 5.26.1
|
|
5
|
+
"""Generated protocol buffer code."""
|
|
6
|
+
from google.protobuf import descriptor as _descriptor
|
|
7
|
+
from google.protobuf import descriptor_pool as _descriptor_pool
|
|
8
|
+
from google.protobuf import symbol_database as _symbol_database
|
|
9
|
+
from google.protobuf.internal import builder as _builder
|
|
10
|
+
# @@protoc_insertion_point(imports)
|
|
11
|
+
|
|
12
|
+
_sym_db = _symbol_database.Default()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10\x64ispatcher.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"V\n\x0cWorkerLabels\x12\x15\n\x08strValue\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x15\n\x08intValue\x18\x02 \x01(\x05H\x01\x88\x01\x01\x42\x0b\n\t_strValueB\x0b\n\t_intValue\"\xc8\x01\n\x0bRuntimeInfo\x12\x17\n\nsdkVersion\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1c\n\x08language\x18\x02 \x01(\x0e\x32\x05.SDKSH\x01\x88\x01\x01\x12\x1c\n\x0flanguageVersion\x18\x03 \x01(\tH\x02\x88\x01\x01\x12\x0f\n\x02os\x18\x04 \x01(\tH\x03\x88\x01\x01\x12\x12\n\x05\x65xtra\x18\x05 \x01(\tH\x04\x88\x01\x01\x42\r\n\x0b_sdkVersionB\x0b\n\t_languageB\x12\n\x10_languageVersionB\x05\n\x03_osB\x08\n\x06_extra\"\xc0\x02\n\x15WorkerRegisterRequest\x12\x12\n\nworkerName\x18\x01 \x01(\t\x12\x0f\n\x07\x61\x63tions\x18\x02 \x03(\t\x12\x10\n\x08services\x18\x03 \x03(\t\x12\x14\n\x07maxRuns\x18\x04 \x01(\x05H\x00\x88\x01\x01\x12\x32\n\x06labels\x18\x05 \x03(\x0b\x32\".WorkerRegisterRequest.LabelsEntry\x12\x16\n\twebhookId\x18\x06 \x01(\tH\x01\x88\x01\x01\x12&\n\x0bruntimeInfo\x18\x07 \x01(\x0b\x32\x0c.RuntimeInfoH\x02\x88\x01\x01\x1a<\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.WorkerLabels:\x02\x38\x01\x42\n\n\x08_maxRunsB\x0c\n\n_webhookIdB\x0e\n\x0c_runtimeInfo\"P\n\x16WorkerRegisterResponse\x12\x10\n\x08tenantId\x18\x01 \x01(\t\x12\x10\n\x08workerId\x18\x02 \x01(\t\x12\x12\n\nworkerName\x18\x03 \x01(\t\"\xa3\x01\n\x19UpsertWorkerLabelsRequest\x12\x10\n\x08workerId\x18\x01 \x01(\t\x12\x36\n\x06labels\x18\x02 \x03(\x0b\x32&.UpsertWorkerLabelsRequest.LabelsEntry\x1a<\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\x1c\n\x05value\x18\x02 \x01(\x0b\x32\r.WorkerLabels:\x02\x38\x01\"@\n\x1aUpsertWorkerLabelsResponse\x12\x10\n\x08tenantId\x18\x01 \x01(\t\x12\x10\n\x08workerId\x18\x02 \x01(\t\"\x86\x04\n\x0e\x41ssignedAction\x12\x10\n\x08tenantId\x18\x01 \x01(\t\x12\x15\n\rworkflowRunId\x18\x02 \x01(\t\x12\x18\n\x10getGroupKeyRunId\x18\x03 \x01(\t\x12\r\n\x05jobId\x18\x04 \x01(\t\x12\x0f\n\x07jobName\x18\x05 \x01(\t\x12\x10\n\x08jobRunId\x18\x06 \x01(\t\x12\x0e\n\x06stepId\x18\x07 \x01(\t\x12\x11\n\tstepRunId\x18\x08 \x01(\t\x12\x10\n\x08\x61\x63tionId\x18\t \x01(\t\x12\x1f\n\nactionType\x18\n \x01(\x0e\x32\x0b.ActionType\x12\x15\n\ractionPayload\x18\x0b \x01(\t\x12\x10\n\x08stepName\x18\x0c \x01(\t\x12\x12\n\nretryCount\x18\r \x01(\x05\x12 \n\x13\x61\x64\x64itional_metadata\x18\x0e \x01(\tH\x00\x88\x01\x01\x12!\n\x14\x63hild_workflow_index\x18\x0f \x01(\x05H\x01\x88\x01\x01\x12\x1f\n\x12\x63hild_workflow_key\x18\x10 \x01(\tH\x02\x88\x01\x01\x12#\n\x16parent_workflow_run_id\x18\x11 \x01(\tH\x03\x88\x01\x01\x42\x16\n\x14_additional_metadataB\x17\n\x15_child_workflow_indexB\x15\n\x13_child_workflow_keyB\x19\n\x17_parent_workflow_run_id\"\'\n\x13WorkerListenRequest\x12\x10\n\x08workerId\x18\x01 \x01(\t\",\n\x18WorkerUnsubscribeRequest\x12\x10\n\x08workerId\x18\x01 \x01(\t\"?\n\x19WorkerUnsubscribeResponse\x12\x10\n\x08tenantId\x18\x01 \x01(\t\x12\x10\n\x08workerId\x18\x02 \x01(\t\"\xe1\x01\n\x13GroupKeyActionEvent\x12\x10\n\x08workerId\x18\x01 \x01(\t\x12\x15\n\rworkflowRunId\x18\x02 \x01(\t\x12\x18\n\x10getGroupKeyRunId\x18\x03 \x01(\t\x12\x10\n\x08\x61\x63tionId\x18\x04 \x01(\t\x12\x32\n\x0e\x65ventTimestamp\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12+\n\teventType\x18\x06 \x01(\x0e\x32\x18.GroupKeyActionEventType\x12\x14\n\x0c\x65ventPayload\x18\x07 \x01(\t\"\x94\x02\n\x0fStepActionEvent\x12\x10\n\x08workerId\x18\x01 \x01(\t\x12\r\n\x05jobId\x18\x02 \x01(\t\x12\x10\n\x08jobRunId\x18\x03 \x01(\t\x12\x0e\n\x06stepId\x18\x04 \x01(\t\x12\x11\n\tstepRunId\x18\x05 \x01(\t\x12\x10\n\x08\x61\x63tionId\x18\x06 \x01(\t\x12\x32\n\x0e\x65ventTimestamp\x18\x07 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\'\n\teventType\x18\x08 \x01(\x0e\x32\x14.StepActionEventType\x12\x14\n\x0c\x65ventPayload\x18\t \x01(\t\x12\x17\n\nretryCount\x18\n \x01(\x05H\x00\x88\x01\x01\x42\r\n\x0b_retryCount\"9\n\x13\x41\x63tionEventResponse\x12\x10\n\x08tenantId\x18\x01 \x01(\t\x12\x10\n\x08workerId\x18\x02 \x01(\t\"\xc0\x01\n SubscribeToWorkflowEventsRequest\x12\x1a\n\rworkflowRunId\x18\x01 \x01(\tH\x00\x88\x01\x01\x12\x1e\n\x11\x61\x64\x64itionalMetaKey\x18\x02 \x01(\tH\x01\x88\x01\x01\x12 \n\x13\x61\x64\x64itionalMetaValue\x18\x03 \x01(\tH\x02\x88\x01\x01\x42\x10\n\x0e_workflowRunIdB\x14\n\x12_additionalMetaKeyB\x16\n\x14_additionalMetaValue\"7\n\x1eSubscribeToWorkflowRunsRequest\x12\x15\n\rworkflowRunId\x18\x01 \x01(\t\"\xb2\x02\n\rWorkflowEvent\x12\x15\n\rworkflowRunId\x18\x01 \x01(\t\x12#\n\x0cresourceType\x18\x02 \x01(\x0e\x32\r.ResourceType\x12%\n\teventType\x18\x03 \x01(\x0e\x32\x12.ResourceEventType\x12\x12\n\nresourceId\x18\x04 \x01(\t\x12\x32\n\x0e\x65ventTimestamp\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x14\n\x0c\x65ventPayload\x18\x06 \x01(\t\x12\x0e\n\x06hangup\x18\x07 \x01(\x08\x12\x18\n\x0bstepRetries\x18\x08 \x01(\x05H\x00\x88\x01\x01\x12\x17\n\nretryCount\x18\t \x01(\x05H\x01\x88\x01\x01\x42\x0e\n\x0c_stepRetriesB\r\n\x0b_retryCount\"\xa8\x01\n\x10WorkflowRunEvent\x12\x15\n\rworkflowRunId\x18\x01 \x01(\t\x12(\n\teventType\x18\x02 \x01(\x0e\x32\x15.WorkflowRunEventType\x12\x32\n\x0e\x65ventTimestamp\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x1f\n\x07results\x18\x04 \x03(\x0b\x32\x0e.StepRunResult\"\x8a\x01\n\rStepRunResult\x12\x11\n\tstepRunId\x18\x01 \x01(\t\x12\x16\n\x0estepReadableId\x18\x02 \x01(\t\x12\x10\n\x08jobRunId\x18\x03 \x01(\t\x12\x12\n\x05\x65rror\x18\x04 \x01(\tH\x00\x88\x01\x01\x12\x13\n\x06output\x18\x05 \x01(\tH\x01\x88\x01\x01\x42\x08\n\x06_errorB\t\n\x07_output\"W\n\rOverridesData\x12\x11\n\tstepRunId\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x12\x16\n\x0e\x63\x61llerFilename\x18\x04 \x01(\t\"\x17\n\x15OverridesDataResponse\"U\n\x10HeartbeatRequest\x12\x10\n\x08workerId\x18\x01 \x01(\t\x12/\n\x0bheartbeatAt\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\x13\n\x11HeartbeatResponse\"F\n\x15RefreshTimeoutRequest\x12\x11\n\tstepRunId\x18\x01 \x01(\t\x12\x1a\n\x12incrementTimeoutBy\x18\x02 \x01(\t\"G\n\x16RefreshTimeoutResponse\x12-\n\ttimeoutAt\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\"\'\n\x12ReleaseSlotRequest\x12\x11\n\tstepRunId\x18\x01 \x01(\t\"\x15\n\x13ReleaseSlotResponse*7\n\x04SDKS\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x06\n\x02GO\x10\x01\x12\n\n\x06PYTHON\x10\x02\x12\x0e\n\nTYPESCRIPT\x10\x03*N\n\nActionType\x12\x12\n\x0eSTART_STEP_RUN\x10\x00\x12\x13\n\x0f\x43\x41NCEL_STEP_RUN\x10\x01\x12\x17\n\x13START_GET_GROUP_KEY\x10\x02*\xa2\x01\n\x17GroupKeyActionEventType\x12 \n\x1cGROUP_KEY_EVENT_TYPE_UNKNOWN\x10\x00\x12 \n\x1cGROUP_KEY_EVENT_TYPE_STARTED\x10\x01\x12\"\n\x1eGROUP_KEY_EVENT_TYPE_COMPLETED\x10\x02\x12\x1f\n\x1bGROUP_KEY_EVENT_TYPE_FAILED\x10\x03*\xac\x01\n\x13StepActionEventType\x12\x1b\n\x17STEP_EVENT_TYPE_UNKNOWN\x10\x00\x12\x1b\n\x17STEP_EVENT_TYPE_STARTED\x10\x01\x12\x1d\n\x19STEP_EVENT_TYPE_COMPLETED\x10\x02\x12\x1a\n\x16STEP_EVENT_TYPE_FAILED\x10\x03\x12 \n\x1cSTEP_EVENT_TYPE_ACKNOWLEDGED\x10\x04*e\n\x0cResourceType\x12\x19\n\x15RESOURCE_TYPE_UNKNOWN\x10\x00\x12\x1a\n\x16RESOURCE_TYPE_STEP_RUN\x10\x01\x12\x1e\n\x1aRESOURCE_TYPE_WORKFLOW_RUN\x10\x02*\xfe\x01\n\x11ResourceEventType\x12\x1f\n\x1bRESOURCE_EVENT_TYPE_UNKNOWN\x10\x00\x12\x1f\n\x1bRESOURCE_EVENT_TYPE_STARTED\x10\x01\x12!\n\x1dRESOURCE_EVENT_TYPE_COMPLETED\x10\x02\x12\x1e\n\x1aRESOURCE_EVENT_TYPE_FAILED\x10\x03\x12!\n\x1dRESOURCE_EVENT_TYPE_CANCELLED\x10\x04\x12!\n\x1dRESOURCE_EVENT_TYPE_TIMED_OUT\x10\x05\x12\x1e\n\x1aRESOURCE_EVENT_TYPE_STREAM\x10\x06*<\n\x14WorkflowRunEventType\x12$\n WORKFLOW_RUN_EVENT_TYPE_FINISHED\x10\x00\x32\xf8\x06\n\nDispatcher\x12=\n\x08Register\x12\x16.WorkerRegisterRequest\x1a\x17.WorkerRegisterResponse\"\x00\x12\x33\n\x06Listen\x12\x14.WorkerListenRequest\x1a\x0f.AssignedAction\"\x00\x30\x01\x12\x35\n\x08ListenV2\x12\x14.WorkerListenRequest\x1a\x0f.AssignedAction\"\x00\x30\x01\x12\x34\n\tHeartbeat\x12\x11.HeartbeatRequest\x1a\x12.HeartbeatResponse\"\x00\x12R\n\x19SubscribeToWorkflowEvents\x12!.SubscribeToWorkflowEventsRequest\x1a\x0e.WorkflowEvent\"\x00\x30\x01\x12S\n\x17SubscribeToWorkflowRuns\x12\x1f.SubscribeToWorkflowRunsRequest\x1a\x11.WorkflowRunEvent\"\x00(\x01\x30\x01\x12?\n\x13SendStepActionEvent\x12\x10.StepActionEvent\x1a\x14.ActionEventResponse\"\x00\x12G\n\x17SendGroupKeyActionEvent\x12\x14.GroupKeyActionEvent\x1a\x14.ActionEventResponse\"\x00\x12<\n\x10PutOverridesData\x12\x0e.OverridesData\x1a\x16.OverridesDataResponse\"\x00\x12\x46\n\x0bUnsubscribe\x12\x19.WorkerUnsubscribeRequest\x1a\x1a.WorkerUnsubscribeResponse\"\x00\x12\x43\n\x0eRefreshTimeout\x12\x16.RefreshTimeoutRequest\x1a\x17.RefreshTimeoutResponse\"\x00\x12:\n\x0bReleaseSlot\x12\x13.ReleaseSlotRequest\x1a\x14.ReleaseSlotResponse\"\x00\x12O\n\x12UpsertWorkerLabels\x12\x1a.UpsertWorkerLabelsRequest\x1a\x1b.UpsertWorkerLabelsResponse\"\x00\x42GZEgithub.com/hatchet-dev/hatchet/internal/services/dispatcher/contractsb\x06proto3')
|
|
19
|
+
|
|
20
|
+
_globals = globals()
|
|
21
|
+
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
22
|
+
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'dispatcher_pb2', _globals)
|
|
23
|
+
if not _descriptor._USE_C_DESCRIPTORS:
|
|
24
|
+
_globals['DESCRIPTOR']._loaded_options = None
|
|
25
|
+
_globals['DESCRIPTOR']._serialized_options = b'ZEgithub.com/hatchet-dev/hatchet/internal/services/dispatcher/contracts'
|
|
26
|
+
_globals['_WORKERREGISTERREQUEST_LABELSENTRY']._loaded_options = None
|
|
27
|
+
_globals['_WORKERREGISTERREQUEST_LABELSENTRY']._serialized_options = b'8\001'
|
|
28
|
+
_globals['_UPSERTWORKERLABELSREQUEST_LABELSENTRY']._loaded_options = None
|
|
29
|
+
_globals['_UPSERTWORKERLABELSREQUEST_LABELSENTRY']._serialized_options = b'8\001'
|
|
30
|
+
_globals['_SDKS']._serialized_start=3524
|
|
31
|
+
_globals['_SDKS']._serialized_end=3579
|
|
32
|
+
_globals['_ACTIONTYPE']._serialized_start=3581
|
|
33
|
+
_globals['_ACTIONTYPE']._serialized_end=3659
|
|
34
|
+
_globals['_GROUPKEYACTIONEVENTTYPE']._serialized_start=3662
|
|
35
|
+
_globals['_GROUPKEYACTIONEVENTTYPE']._serialized_end=3824
|
|
36
|
+
_globals['_STEPACTIONEVENTTYPE']._serialized_start=3827
|
|
37
|
+
_globals['_STEPACTIONEVENTTYPE']._serialized_end=3999
|
|
38
|
+
_globals['_RESOURCETYPE']._serialized_start=4001
|
|
39
|
+
_globals['_RESOURCETYPE']._serialized_end=4102
|
|
40
|
+
_globals['_RESOURCEEVENTTYPE']._serialized_start=4105
|
|
41
|
+
_globals['_RESOURCEEVENTTYPE']._serialized_end=4359
|
|
42
|
+
_globals['_WORKFLOWRUNEVENTTYPE']._serialized_start=4361
|
|
43
|
+
_globals['_WORKFLOWRUNEVENTTYPE']._serialized_end=4421
|
|
44
|
+
_globals['_WORKERLABELS']._serialized_start=53
|
|
45
|
+
_globals['_WORKERLABELS']._serialized_end=139
|
|
46
|
+
_globals['_RUNTIMEINFO']._serialized_start=142
|
|
47
|
+
_globals['_RUNTIMEINFO']._serialized_end=342
|
|
48
|
+
_globals['_WORKERREGISTERREQUEST']._serialized_start=345
|
|
49
|
+
_globals['_WORKERREGISTERREQUEST']._serialized_end=665
|
|
50
|
+
_globals['_WORKERREGISTERREQUEST_LABELSENTRY']._serialized_start=563
|
|
51
|
+
_globals['_WORKERREGISTERREQUEST_LABELSENTRY']._serialized_end=623
|
|
52
|
+
_globals['_WORKERREGISTERRESPONSE']._serialized_start=667
|
|
53
|
+
_globals['_WORKERREGISTERRESPONSE']._serialized_end=747
|
|
54
|
+
_globals['_UPSERTWORKERLABELSREQUEST']._serialized_start=750
|
|
55
|
+
_globals['_UPSERTWORKERLABELSREQUEST']._serialized_end=913
|
|
56
|
+
_globals['_UPSERTWORKERLABELSREQUEST_LABELSENTRY']._serialized_start=563
|
|
57
|
+
_globals['_UPSERTWORKERLABELSREQUEST_LABELSENTRY']._serialized_end=623
|
|
58
|
+
_globals['_UPSERTWORKERLABELSRESPONSE']._serialized_start=915
|
|
59
|
+
_globals['_UPSERTWORKERLABELSRESPONSE']._serialized_end=979
|
|
60
|
+
_globals['_ASSIGNEDACTION']._serialized_start=982
|
|
61
|
+
_globals['_ASSIGNEDACTION']._serialized_end=1500
|
|
62
|
+
_globals['_WORKERLISTENREQUEST']._serialized_start=1502
|
|
63
|
+
_globals['_WORKERLISTENREQUEST']._serialized_end=1541
|
|
64
|
+
_globals['_WORKERUNSUBSCRIBEREQUEST']._serialized_start=1543
|
|
65
|
+
_globals['_WORKERUNSUBSCRIBEREQUEST']._serialized_end=1587
|
|
66
|
+
_globals['_WORKERUNSUBSCRIBERESPONSE']._serialized_start=1589
|
|
67
|
+
_globals['_WORKERUNSUBSCRIBERESPONSE']._serialized_end=1652
|
|
68
|
+
_globals['_GROUPKEYACTIONEVENT']._serialized_start=1655
|
|
69
|
+
_globals['_GROUPKEYACTIONEVENT']._serialized_end=1880
|
|
70
|
+
_globals['_STEPACTIONEVENT']._serialized_start=1883
|
|
71
|
+
_globals['_STEPACTIONEVENT']._serialized_end=2159
|
|
72
|
+
_globals['_ACTIONEVENTRESPONSE']._serialized_start=2161
|
|
73
|
+
_globals['_ACTIONEVENTRESPONSE']._serialized_end=2218
|
|
74
|
+
_globals['_SUBSCRIBETOWORKFLOWEVENTSREQUEST']._serialized_start=2221
|
|
75
|
+
_globals['_SUBSCRIBETOWORKFLOWEVENTSREQUEST']._serialized_end=2413
|
|
76
|
+
_globals['_SUBSCRIBETOWORKFLOWRUNSREQUEST']._serialized_start=2415
|
|
77
|
+
_globals['_SUBSCRIBETOWORKFLOWRUNSREQUEST']._serialized_end=2470
|
|
78
|
+
_globals['_WORKFLOWEVENT']._serialized_start=2473
|
|
79
|
+
_globals['_WORKFLOWEVENT']._serialized_end=2779
|
|
80
|
+
_globals['_WORKFLOWRUNEVENT']._serialized_start=2782
|
|
81
|
+
_globals['_WORKFLOWRUNEVENT']._serialized_end=2950
|
|
82
|
+
_globals['_STEPRUNRESULT']._serialized_start=2953
|
|
83
|
+
_globals['_STEPRUNRESULT']._serialized_end=3091
|
|
84
|
+
_globals['_OVERRIDESDATA']._serialized_start=3093
|
|
85
|
+
_globals['_OVERRIDESDATA']._serialized_end=3180
|
|
86
|
+
_globals['_OVERRIDESDATARESPONSE']._serialized_start=3182
|
|
87
|
+
_globals['_OVERRIDESDATARESPONSE']._serialized_end=3205
|
|
88
|
+
_globals['_HEARTBEATREQUEST']._serialized_start=3207
|
|
89
|
+
_globals['_HEARTBEATREQUEST']._serialized_end=3292
|
|
90
|
+
_globals['_HEARTBEATRESPONSE']._serialized_start=3294
|
|
91
|
+
_globals['_HEARTBEATRESPONSE']._serialized_end=3313
|
|
92
|
+
_globals['_REFRESHTIMEOUTREQUEST']._serialized_start=3315
|
|
93
|
+
_globals['_REFRESHTIMEOUTREQUEST']._serialized_end=3385
|
|
94
|
+
_globals['_REFRESHTIMEOUTRESPONSE']._serialized_start=3387
|
|
95
|
+
_globals['_REFRESHTIMEOUTRESPONSE']._serialized_end=3458
|
|
96
|
+
_globals['_RELEASESLOTREQUEST']._serialized_start=3460
|
|
97
|
+
_globals['_RELEASESLOTREQUEST']._serialized_end=3499
|
|
98
|
+
_globals['_RELEASESLOTRESPONSE']._serialized_start=3501
|
|
99
|
+
_globals['_RELEASESLOTRESPONSE']._serialized_end=3522
|
|
100
|
+
_globals['_DISPATCHER']._serialized_start=4424
|
|
101
|
+
_globals['_DISPATCHER']._serialized_end=5312
|
|
102
|
+
# @@protoc_insertion_point(module_scope)
|