prefect-client 3.8.1.dev5__tar.gz → 3.8.2.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/PKG-INFO +2 -2
  2. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/pyproject.toml +1 -1
  3. prefect_client-3.8.2.dev2/src/prefect/_build_info.py +5 -0
  4. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/control_listener.py +4 -2
  5. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/core.py +8 -0
  6. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/runner.py +67 -7
  7. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/engine.py +6 -8
  8. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/flow_engine.py +16 -22
  9. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/AGENTS.md +2 -2
  10. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_control_channel.py +9 -8
  11. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_process_manager.py +33 -2
  12. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_starter_engine.py +5 -0
  13. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_workspace_starter.py +3 -0
  14. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/processutils/__init__.py +24 -3
  15. prefect_client-3.8.1.dev5/src/prefect/_build_info.py +0 -5
  16. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/.gitignore +0 -0
  17. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/LICENSE +0 -0
  18. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/README.md +0 -0
  19. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/hatch_build.py +0 -0
  20. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/.prefectignore +0 -0
  21. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/AGENTS.md +0 -0
  22. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/__init__.py +0 -0
  23. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/__main__.py +0 -0
  24. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/__init__.py +0 -0
  25. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/_launchers.py +0 -0
  26. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/bundles/__init__.py +0 -0
  27. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/bundles/execute.py +0 -0
  28. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/__init__.py +0 -0
  29. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/apply.py +0 -0
  30. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  31. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/manager.py +0 -0
  32. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/plugins/spec.py +0 -0
  33. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/sla/__init__.py +0 -0
  34. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/sla/client.py +0 -0
  35. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_experimental/sla/objects.py +0 -0
  36. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_flow_run_suspension.py +0 -0
  37. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/__init__.py +0 -0
  38. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/_logging.py +0 -0
  39. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/__init__.py +0 -0
  40. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  41. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/client.py +0 -0
  42. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/device_id.py +0 -0
  43. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/emit.py +0 -0
  44. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/enabled.py +0 -0
  45. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/events.py +0 -0
  46. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/milestones.py +0 -0
  47. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/notice.py +0 -0
  48. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/analytics/service.py +0 -0
  49. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/ast_utils.py +0 -0
  50. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/buildx.py +0 -0
  51. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/__init__.py +0 -0
  52. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  53. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/backports.py +0 -0
  54. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/blocks.py +0 -0
  55. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  56. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  57. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/migration.py +0 -0
  58. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/compatibility/starlette.py +0 -0
  59. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/__init__.py +0 -0
  60. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/api.py +0 -0
  61. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/calls.py +0 -0
  62. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  63. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  64. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/inspection.py +0 -0
  65. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/primitives.py +0 -0
  66. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/services.py +0 -0
  67. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/threads.py +0 -0
  68. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/concurrency/waiters.py +0 -0
  69. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/deprecated.py +0 -0
  70. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/engine.py +0 -0
  71. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/git.py +0 -0
  72. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  73. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/installation.py +0 -0
  74. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/integrations.py +0 -0
  75. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/launchers.py +0 -0
  76. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/lazy.py +0 -0
  77. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/metrics.py +0 -0
  78. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/observability.py +0 -0
  79. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/observers.py +0 -0
  80. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/__init__.py +0 -0
  81. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/apply.py +0 -0
  82. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/collections.py +0 -0
  83. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  84. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/manager.py +0 -0
  85. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/spec.py +0 -0
  86. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/plugins/startup.py +0 -0
  87. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pydantic/__init__.py +0 -0
  88. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pydantic/schemas.py +0 -0
  89. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  90. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  91. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  92. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/pytz.py +0 -0
  93. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/result_records.py +0 -0
  94. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/retries.py +0 -0
  95. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schema.py +0 -0
  96. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/__init__.py +0 -0
  97. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/_registry.py +0 -0
  98. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/bases.py +0 -0
  99. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/fields.py +0 -0
  100. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/serializers.py +0 -0
  101. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/schemas/validators.py +0 -0
  102. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  103. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/states.py +0 -0
  104. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/testing.py +0 -0
  105. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/urls.py +0 -0
  106. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/uuid7.py +0 -0
  107. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/version_checking.py +0 -0
  108. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/versioning.py +0 -0
  109. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/waiters.py +0 -0
  110. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_internal/websockets.py +0 -0
  111. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/__init__.py +0 -0
  112. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/fetcher.py +0 -0
  113. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/generator.py +0 -0
  114. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/models.py +0 -0
  115. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/naming.py +0 -0
  116. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/renderer.py +0 -0
  117. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/schema_converter.py +0 -0
  118. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/templates/__init__.py +0 -0
  119. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  120. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/types.py +0 -0
  121. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_sdk/unions.py +0 -0
  122. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_vendor/croniter/__init__.py +0 -0
  123. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/_vendor/croniter/croniter.py +0 -0
  124. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/agent.py +0 -0
  125. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/analytics/__init__.py +0 -0
  126. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/artifacts.py +0 -0
  127. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/assets/__init__.py +0 -0
  128. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/assets/core.py +0 -0
  129. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/assets/materialize.py +0 -0
  130. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/automations.py +0 -0
  131. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/AGENTS.md +0 -0
  132. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/__init__.py +0 -0
  133. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/abstract.py +0 -0
  134. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/fields.py +0 -0
  135. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/notifications.py +0 -0
  136. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/redis.py +0 -0
  137. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/system.py +0 -0
  138. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/blocks/webhook.py +0 -0
  139. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/__init__.py +0 -0
  140. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/_file_collector.py +0 -0
  141. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/_ignore_filter.py +0 -0
  142. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/_path_resolver.py +0 -0
  143. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/_zip_builder.py +0 -0
  144. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/_zip_extractor.py +0 -0
  145. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/bundles/execute.py +0 -0
  146. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/cache_policies.py +0 -0
  147. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/AGENTS.md +0 -0
  148. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/__init__.py +0 -0
  149. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/attribution.py +0 -0
  150. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/base.py +0 -0
  151. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/cloud.py +0 -0
  152. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/collections.py +0 -0
  153. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/constants.py +0 -0
  154. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/__init__.py +0 -0
  155. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  156. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  157. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  158. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_automations/client.py +0 -0
  159. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  160. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  161. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  162. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  163. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  164. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  165. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  166. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  167. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  168. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  169. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  170. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_events/client.py +0 -0
  171. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  172. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  173. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  174. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_flows/client.py +0 -0
  175. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  176. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_logs/client.py +0 -0
  177. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  178. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_variables/client.py +0 -0
  179. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  180. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  181. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/base.py +0 -0
  182. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/orchestration/routes.py +0 -0
  183. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/__init__.py +0 -0
  184. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/actions.py +0 -0
  185. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/events.py +0 -0
  186. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/filters.py +0 -0
  187. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/objects.py +0 -0
  188. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/responses.py +0 -0
  189. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/schedules.py +0 -0
  190. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/sorting.py +0 -0
  191. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/schemas/worker_channel.py +0 -0
  192. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/subscriptions.py +0 -0
  193. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/types/__init__.py +0 -0
  194. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  195. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/client/utilities.py +0 -0
  196. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/AGENTS.md +0 -0
  197. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/__init__.py +0 -0
  198. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/_asyncio.py +0 -0
  199. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/_events.py +0 -0
  200. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/_leases.py +0 -0
  201. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/_sync.py +0 -0
  202. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/asyncio.py +0 -0
  203. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/context.py +0 -0
  204. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/services.py +0 -0
  205. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/sync.py +0 -0
  206. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/__init__.py +0 -0
  207. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  208. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/_events.py +0 -0
  209. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/asyncio.py +0 -0
  210. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/context.py +0 -0
  211. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/services.py +0 -0
  212. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/concurrency/v1/sync.py +0 -0
  213. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/context.py +0 -0
  214. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/AGENTS.md +0 -0
  215. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/__init__.py +0 -0
  216. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/base.py +0 -0
  217. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/deployments.py +0 -0
  218. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/flow_runs.py +0 -0
  219. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/schedules.py +0 -0
  220. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/steps/__init__.py +0 -0
  221. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/steps/core.py +0 -0
  222. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/steps/pull.py +0 -0
  223. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/deployments/steps/utility.py +0 -0
  224. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/docker/__init__.py +0 -0
  225. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/docker/_buildx.py +0 -0
  226. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/docker/docker_image.py +0 -0
  227. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/AGENTS.md +0 -0
  228. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/__init__.py +0 -0
  229. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/actions.py +0 -0
  230. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/clients.py +0 -0
  231. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/filters.py +0 -0
  232. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/related.py +0 -0
  233. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/schemas/__init__.py +0 -0
  234. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/schemas/automations.py +0 -0
  235. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  236. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/schemas/events.py +0 -0
  237. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/schemas/labelling.py +0 -0
  238. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/subscribers.py +0 -0
  239. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/utilities.py +0 -0
  240. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/events/worker.py +0 -0
  241. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/exceptions.py +0 -0
  242. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/filesystems.py +0 -0
  243. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/flow_runs.py +0 -0
  244. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/flows.py +0 -0
  245. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/futures.py +0 -0
  246. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/__init__.py +0 -0
  247. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/base.py +0 -0
  248. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  249. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  250. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  251. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  252. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  253. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  254. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/input/__init__.py +0 -0
  255. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/input/actions.py +0 -0
  256. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/input/run_input.py +0 -0
  257. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/locking/__init__.py +0 -0
  258. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/locking/_filelock.py +0 -0
  259. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/locking/filesystem.py +0 -0
  260. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/locking/memory.py +0 -0
  261. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/locking/protocol.py +0 -0
  262. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/AGENTS.md +0 -0
  263. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/__init__.py +0 -0
  264. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/clients.py +0 -0
  265. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/configuration.py +0 -0
  266. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/filters.py +0 -0
  267. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/formatters.py +0 -0
  268. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/handlers.py +0 -0
  269. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/highlighters.py +0 -0
  270. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/loggers.py +0 -0
  271. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/logging/logging.yml +0 -0
  272. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/main.py +0 -0
  273. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/plugins.py +0 -0
  274. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/py.typed +0 -0
  275. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/results.py +0 -0
  276. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/__init__.py +0 -0
  277. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_cancel_finalizer.py +0 -0
  278. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_cancellation_manager.py +0 -0
  279. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_deployment_registry.py +0 -0
  280. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_event_emitter.py +0 -0
  281. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_flow_resolver.py +0 -0
  282. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_flow_run_executor.py +0 -0
  283. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_hook_runner.py +0 -0
  284. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_limit_manager.py +0 -0
  285. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  286. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_starter_bundle.py +0 -0
  287. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_starter_direct.py +0 -0
  288. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_state_proposer.py +0 -0
  289. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/_workspace_resolver.py +0 -0
  290. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/runner.py +0 -0
  291. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/server.py +0 -0
  292. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runner/storage.py +0 -0
  293. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runtime/__init__.py +0 -0
  294. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runtime/deployment.py +0 -0
  295. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runtime/flow_run.py +0 -0
  296. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/runtime/task_run.py +0 -0
  297. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/schedules.py +0 -0
  298. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/serializers.py +0 -0
  299. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/__init__.py +0 -0
  300. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/_ui_static.py +0 -0
  301. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/admin.py +0 -0
  302. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/artifacts.py +0 -0
  303. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/automations.py +0 -0
  304. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/background_workers.py +0 -0
  305. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/block_capabilities.py +0 -0
  306. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/block_documents.py +0 -0
  307. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/block_schemas.py +0 -0
  308. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/block_types.py +0 -0
  309. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/clients.py +0 -0
  310. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/collections.py +0 -0
  311. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  312. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/concurrency_limits.py +0 -0
  313. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  314. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/csrf_token.py +0 -0
  315. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/dependencies.py +0 -0
  316. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/deployments.py +0 -0
  317. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/events.py +0 -0
  318. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/flow_run_states.py +0 -0
  319. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/flow_runs.py +0 -0
  320. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/flows.py +0 -0
  321. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/logs.py +0 -0
  322. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/middleware.py +0 -0
  323. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/root.py +0 -0
  324. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/run_history.py +0 -0
  325. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/saved_searches.py +0 -0
  326. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/server.py +0 -0
  327. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  328. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/task_run_states.py +0 -0
  329. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/task_runs.py +0 -0
  330. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/task_workers.py +0 -0
  331. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/templates.py +0 -0
  332. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/ui/__init__.py +0 -0
  333. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/ui/flow_runs.py +0 -0
  334. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/ui/flows.py +0 -0
  335. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/ui/schemas.py +0 -0
  336. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/ui/task_runs.py +0 -0
  337. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/validation.py +0 -0
  338. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/variables.py +0 -0
  339. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/work_queues.py +0 -0
  340. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/server/api/workers.py +0 -0
  341. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/AGENTS.md +0 -0
  342. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/__init__.py +0 -0
  343. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/_types.py +0 -0
  344. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/base.py +0 -0
  345. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/constants.py +0 -0
  346. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/context.py +0 -0
  347. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/legacy.py +0 -0
  348. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/__init__.py +0 -0
  349. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/_defaults.py +0 -0
  350. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/api.py +0 -0
  351. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/cli.py +0 -0
  352. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/client.py +0 -0
  353. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/cloud.py +0 -0
  354. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/deployments.py +0 -0
  355. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/events.py +0 -0
  356. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/experiments.py +0 -0
  357. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/flows.py +0 -0
  358. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/internal.py +0 -0
  359. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/logging.py +0 -0
  360. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/plugins.py +0 -0
  361. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/results.py +0 -0
  362. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/root.py +0 -0
  363. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/runner.py +0 -0
  364. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/__init__.py +0 -0
  365. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/api.py +0 -0
  366. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/concurrency.py +0 -0
  367. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/database.py +0 -0
  368. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/deployments.py +0 -0
  369. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/docket.py +0 -0
  370. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/ephemeral.py +0 -0
  371. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/events.py +0 -0
  372. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  373. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/logs.py +0 -0
  374. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/root.py +0 -0
  375. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/services.py +0 -0
  376. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/tasks.py +0 -0
  377. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/ui.py +0 -0
  378. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/server/worker_channel.py +0 -0
  379. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/tasks.py +0 -0
  380. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/telemetry.py +0 -0
  381. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/testing.py +0 -0
  382. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/models/worker.py +0 -0
  383. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/profiles.py +0 -0
  384. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/profiles.toml +0 -0
  385. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/settings/sources.py +0 -0
  386. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/states.py +0 -0
  387. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/task_engine.py +0 -0
  388. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/task_runners.py +0 -0
  389. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/task_runs.py +0 -0
  390. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/task_worker.py +0 -0
  391. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/tasks.py +0 -0
  392. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/telemetry/__init__.py +0 -0
  393. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/telemetry/run_telemetry.py +0 -0
  394. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/transactions.py +0 -0
  395. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/types/__init__.py +0 -0
  396. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/types/_concurrency.py +0 -0
  397. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/types/_datetime.py +0 -0
  398. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/types/entrypoint.py +0 -0
  399. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/types/names.py +0 -0
  400. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/AGENTS.md +0 -0
  401. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/__init__.py +0 -0
  402. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/annotations.py +0 -0
  403. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  404. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  405. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/callables/AGENTS.md +0 -0
  406. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/callables/__init__.py +0 -0
  407. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/collections.py +0 -0
  408. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/compat.py +0 -0
  409. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/context.py +0 -0
  410. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/dispatch.py +0 -0
  411. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/dockerutils.py +0 -0
  412. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/engine/AGENTS.md +0 -0
  413. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/engine/__init__.py +0 -0
  414. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  415. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/filesystem/__init__.py +0 -0
  416. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/generics.py +0 -0
  417. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/hashing.py +0 -0
  418. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/importtools.py +0 -0
  419. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/math.py +0 -0
  420. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/names.py +0 -0
  421. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  422. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/pydantic.py +0 -0
  423. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/render_swagger.py +0 -0
  424. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  425. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  426. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  427. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/schema_tools/validation.py +0 -0
  428. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/services.py +0 -0
  429. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/slugify.py +0 -0
  430. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/templating/AGENTS.md +0 -0
  431. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/templating/__init__.py +0 -0
  432. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/text.py +0 -0
  433. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/timeout.py +0 -0
  434. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/urls.py +0 -0
  435. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/utilities/visualization.py +0 -0
  436. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/variables.py +0 -0
  437. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/AGENTS.md +0 -0
  438. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/__init__.py +0 -0
  439. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_cleanup.py +0 -0
  440. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_cleanup_handlers.py +0 -0
  441. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  442. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  443. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_worker_channel/_state.py +0 -0
  444. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  445. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  446. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/base.py +0 -0
  447. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/block.py +0 -0
  448. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/cloud.py +0 -0
  449. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/process.py +0 -0
  450. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/server.py +0 -0
  451. {prefect_client-3.8.1.dev5 → prefect_client-3.8.2.dev2}/src/prefect/workers/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prefect-client
3
- Version: 3.8.1.dev5
3
+ Version: 3.8.2.dev2
4
4
  Summary: Workflow orchestration and management.
5
5
  Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
6
6
  Project-URL: Documentation, https://docs.prefect.io
@@ -22,7 +22,7 @@ Classifier: Programming Language :: Python :: 3.14
22
22
  Classifier: Topic :: Software Development :: Libraries
23
23
  Requires-Python: <3.15,>=3.10
24
24
  Requires-Dist: amplitude-analytics<2.0.0,>=1.2.1
25
- Requires-Dist: anyio!=4.14.2,<5.0.0,>=4.4.0
25
+ Requires-Dist: anyio<5.0.0,>=4.4.0
26
26
  Requires-Dist: asgi-lifespan<3.0,>=1.0
27
27
  Requires-Dist: cachetools<8.0,>=5.3
28
28
  Requires-Dist: cloudpickle<4.0,>=2.0
@@ -26,7 +26,7 @@ classifiers = [
26
26
  dependencies = [
27
27
  # Client dependencies
28
28
  "amplitude-analytics>=1.2.1,<2.0.0",
29
- "anyio>=4.4.0,<5.0.0,!=4.14.2",
29
+ "anyio>=4.4.0,<5.0.0",
30
30
  "asgi-lifespan>=1.0,<3.0",
31
31
  "cachetools>=5.3,<8.0",
32
32
  "cloudpickle>=2.0,<4.0",
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.8.2.dev2"
3
+ __build_date__ = "2026-08-03 09:15:43.484194+00:00"
4
+ __git_commit__ = "05c045c68360e723560d61d5231824b55b811db1"
5
+ __dirty__ = False
@@ -13,7 +13,7 @@ Protocol:
13
13
  one-shot env vars without connecting yet.
14
14
  3. The outermost `capture_sigterm()` calls `start()`, which connects back to
15
15
  the runner and spawns a daemon thread blocked on the socket.
16
- 4. The runner writes a single-byte intent (`b"c"` today).
16
+ 4. The runner writes a single-byte intent (`b"c"`, `b"r"` or `b"q"`).
17
17
  5. If Prefect still owns the live SIGTERM bridge, the child writes `b"a"`,
18
18
  commits the intent for engine dispatch, and on Windows triggers
19
19
  `_thread.interrupt_main(SIGTERM)`.
@@ -37,10 +37,12 @@ from typing import Literal
37
37
 
38
38
  from prefect.utilities.engine import commit_control_intent_and_ack
39
39
 
40
- Intent = Literal["cancel"]
40
+ Intent = Literal["cancel", "reschedule", "relinquish"]
41
41
 
42
42
  _INTENT_FOR_BYTE: dict[bytes, Intent] = {
43
43
  b"c": "cancel",
44
+ b"r": "reschedule",
45
+ b"q": "relinquish",
44
46
  }
45
47
 
46
48
  _intent: Intent | None = None
@@ -424,6 +424,14 @@ class Block(BaseModel, ABC):
424
424
  def ser_model(
425
425
  self, handler: SerializerFunctionWrapHandler, info: SerializationInfo
426
426
  ) -> Any:
427
+ if info.context and info.context.get("serialize_blocks_as_references"):
428
+ if self._block_document_id is None:
429
+ raise BlockNotSavedError(
430
+ "Block must be saved with `.save()` before it can be used as a "
431
+ "deployment parameter."
432
+ )
433
+ return {"$ref": {"block_document_id": str(self._block_document_id)}}
434
+
427
435
  jsonable_self = handler(self)
428
436
  if (ctx := info.context) and ctx.get("include_secrets") is True:
429
437
  # Add serialization mode to context so handle_secret_render knows how to process nested models
@@ -53,6 +53,8 @@ from pydantic import (
53
53
  ConfigDict,
54
54
  Field,
55
55
  PrivateAttr,
56
+ TypeAdapter,
57
+ field_serializer,
56
58
  field_validator,
57
59
  model_validator,
58
60
  )
@@ -69,6 +71,7 @@ from prefect._internal.schemas.validators import (
69
71
  reconcile_schedules_runner,
70
72
  )
71
73
  from prefect._internal.versioning import VersionType, get_inferred_version_info
74
+ from prefect.blocks.core import Block, BlockNotSavedError
72
75
  from prefect.client.base import ServerType
73
76
  from prefect.client.orchestration import PrefectClient, SyncPrefectClient, get_client
74
77
  from prefect.client.schemas.actions import (
@@ -106,7 +109,12 @@ from prefect.types.entrypoint import EntrypointType
106
109
  from prefect.utilities.annotations import freeze
107
110
  from prefect.utilities.asyncutils import run_coro_as_sync
108
111
  from prefect.utilities.callables import ParameterSchema, parameter_schema
109
- from prefect.utilities.collections import get_from_dict, isiterable
112
+ from prefect.utilities.collections import (
113
+ StopVisiting,
114
+ get_from_dict,
115
+ isiterable,
116
+ visit_collection,
117
+ )
110
118
  from prefect.utilities.dockerutils import (
111
119
  parse_image_tag,
112
120
  )
@@ -117,6 +125,11 @@ if TYPE_CHECKING:
117
125
 
118
126
  __all__ = ["RunnerDeployment"]
119
127
 
128
+ _DEPLOYMENT_PARAMETER_SERIALIZER = TypeAdapter(
129
+ dict[str, Any],
130
+ config=ConfigDict(ser_json_timedelta="float"),
131
+ )
132
+
120
133
 
121
134
  def _extract_concurrency_options(
122
135
  concurrency_limit: Union[int, ConcurrencyLimitConfig, None],
@@ -296,6 +309,47 @@ class RunnerDeployment(BaseModel):
296
309
  def full_name(self) -> str:
297
310
  return f"{self.flow_name}/{self.name}"
298
311
 
312
+ @field_validator("parameters", "schedules", mode="before")
313
+ @classmethod
314
+ def validate_block_parameters(cls, value: Any) -> Any:
315
+ def ensure_block_is_saved(value: Any) -> Any:
316
+ if isinstance(value, Block):
317
+ if value._block_document_id is None:
318
+ raise BlockNotSavedError(
319
+ "Block must be saved with `.save()` before it can be used as a "
320
+ "deployment parameter."
321
+ )
322
+ raise StopVisiting()
323
+ return value
324
+
325
+ visit_collection(value, ensure_block_is_saved)
326
+ return value
327
+
328
+ @field_serializer("parameters", when_used="json")
329
+ def serialize_block_parameters(self, parameters: dict[str, Any]) -> dict[str, Any]:
330
+ return _DEPLOYMENT_PARAMETER_SERIALIZER.dump_python(
331
+ parameters,
332
+ mode="json",
333
+ context={"serialize_blocks_as_references": True},
334
+ )
335
+
336
+ def _schedules_with_serialized_block_parameters(
337
+ self,
338
+ ) -> Optional[List[Union[DeploymentScheduleCreate, DeploymentScheduleUpdate]]]:
339
+ if self.schedules is None:
340
+ return None
341
+
342
+ return [
343
+ schedule.model_copy(
344
+ update={
345
+ "parameters": self.serialize_block_parameters(schedule.parameters)
346
+ }
347
+ )
348
+ if schedule.parameters
349
+ else schedule
350
+ for schedule in self.schedules
351
+ ]
352
+
299
353
  def _get_deployment_version_info(
300
354
  self, version_type: Optional[VersionType] = None
301
355
  ) -> VersionInfo:
@@ -378,6 +432,9 @@ class RunnerDeployment(BaseModel):
378
432
  " with a work pool."
379
433
  )
380
434
 
435
+ parameters = self.model_dump(mode="json", include={"parameters"})["parameters"]
436
+ schedules = self._schedules_with_serialized_block_parameters()
437
+
381
438
  async with get_client() as client:
382
439
  flow_id = await client.create_flow_from_name(self.flow_name)
383
440
 
@@ -389,10 +446,10 @@ class RunnerDeployment(BaseModel):
389
446
  version=self.version,
390
447
  version_info=version_info,
391
448
  paused=self.paused,
392
- schedules=self.schedules,
449
+ schedules=schedules,
393
450
  concurrency_limit=self.concurrency_limit,
394
451
  concurrency_options=self.concurrency_options,
395
- parameters=self.parameters,
452
+ parameters=parameters,
396
453
  description=self.description,
397
454
  tags=self.tags,
398
455
  path=self._path,
@@ -481,6 +538,9 @@ class RunnerDeployment(BaseModel):
481
538
  " with a work pool."
482
539
  )
483
540
 
541
+ parameters = self.model_dump(mode="json", include={"parameters"})["parameters"]
542
+ schedules = self._schedules_with_serialized_block_parameters()
543
+
484
544
  with get_client(sync_client=True) as client:
485
545
  flow_id = client.create_flow_from_name(self.flow_name)
486
546
 
@@ -492,10 +552,10 @@ class RunnerDeployment(BaseModel):
492
552
  version=self.version,
493
553
  version_info=version_info,
494
554
  paused=self.paused,
495
- schedules=self.schedules,
555
+ schedules=schedules,
496
556
  concurrency_limit=self.concurrency_limit,
497
557
  concurrency_options=self.concurrency_options,
498
- parameters=self.parameters,
558
+ parameters=parameters,
499
559
  description=self.description,
500
560
  tags=self.tags,
501
561
  path=self._path,
@@ -579,7 +639,7 @@ class RunnerDeployment(BaseModel):
579
639
  if self.schedules:
580
640
  update_payload["schedules"] = [
581
641
  schedule.model_dump(mode="json", exclude_unset=True)
582
- for schedule in self.schedules
642
+ for schedule in self._schedules_with_serialized_block_parameters() or []
583
643
  ]
584
644
 
585
645
  await client.update_deployment(
@@ -631,7 +691,7 @@ class RunnerDeployment(BaseModel):
631
691
  if self.schedules:
632
692
  update_payload["schedules"] = [
633
693
  schedule.model_dump(mode="json", exclude_unset=True)
634
- for schedule in self.schedules
694
+ for schedule in self._schedules_with_serialized_block_parameters() or []
635
695
  ]
636
696
 
637
697
  client.update_deployment(
@@ -100,16 +100,14 @@ def handle_engine_signals(flow_run_id: UUID | None = None):
100
100
  engine_logger.info(msg)
101
101
  exit(0)
102
102
  except TerminationSignal:
103
- # A TerminationSignal can mean either:
104
- # - an expected runner-driven control action (today: cancel intent),
105
- # - or a raw external termination with no runner intent attached.
106
- #
107
- # Only the first case should translate to a clean process exit.
108
- if get_intent() == "cancel":
103
+ # An intent means the runner or the `prefect flow-run execute` supervisor
104
+ # drove this termination and owns the flow run's next state, so exit cleanly.
105
+ # A raw external termination has no intent and must keep propagating.
106
+ if get_intent() is not None:
109
107
  if flow_run_id:
110
- msg = f"Execution of flow run '{flow_run_id}' was cancelled."
108
+ msg = f"Execution of flow run '{flow_run_id}' was terminated."
111
109
  else:
112
- msg = "Execution was cancelled."
110
+ msg = "Execution was terminated."
113
111
  engine_logger.info(msg)
114
112
  clear_intent()
115
113
  exit(0)
@@ -195,26 +195,17 @@ def _termination_intent() -> Intent | None:
195
195
  for the outermost flow run as well as nested subflows running in the
196
196
  same process.
197
197
 
198
- Today the only non-None value returned is `"cancel"`. A follow-up PR
199
- will add `"suspend"` by extending
200
- `Intent` in `prefect._internal.control_listener`; the engine's
201
- `except TerminationSignal` dispatch below will gain a matching branch.
198
+ Adding an intent means extending `Intent` in
199
+ `prefect._internal.control_listener` and the `except TerminationSignal`
200
+ dispatch below with a matching branch.
202
201
  """
203
202
  return get_intent()
204
203
 
205
204
 
206
- def _should_bubble_raw_sigterm_for_reschedule() -> bool:
207
- """Return whether raw SIGTERM should bypass crash handling.
208
-
209
- `prefect flow-run execute` supports a reschedule mode where the parent
210
- process proposes `AwaitingRetry` and then sends a plain SIGTERM to the
211
- child. That path does not use the control channel, so the child must not
212
- reinterpret the resulting `TerminationSignal` as a crash.
213
- """
214
- return (
215
- os.environ.get("PREFECT_FLOW_RUN_EXECUTE_SIGTERM_BEHAVIOR", "").lower()
216
- == "reschedule"
217
- )
205
+ # Intents where the `prefect flow-run execute` supervisor owns the run's next state
206
+ # (`reschedule` proposes it; `relinquish` leaves it to retrying infrastructure), so
207
+ # the engine must exit without proposing one.
208
+ _SUPERVISOR_OWNED_INTENTS: frozenset[Intent] = frozenset({"reschedule", "relinquish"})
218
209
 
219
210
 
220
211
  def _is_async_runtime_cancellation(exc: BaseException) -> bool:
@@ -1198,10 +1189,8 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
1198
1189
  if intent == "cancel":
1199
1190
  self.handle_cancellation(exc)
1200
1191
  elif intent is None:
1201
- if _should_bubble_raw_sigterm_for_reschedule():
1202
- raise
1203
1192
  self.handle_crash(exc)
1204
- else:
1193
+ elif intent not in _SUPERVISOR_OWNED_INTENTS:
1205
1194
  # Defensive: an unknown intent means the control
1206
1195
  # listener was extended (e.g. "suspend" in a
1207
1196
  # follow-up PR) without extending this dispatch.
@@ -1896,10 +1885,8 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1896
1885
  if intent == "cancel":
1897
1886
  await self.handle_cancellation(exc)
1898
1887
  elif intent is None:
1899
- if _should_bubble_raw_sigterm_for_reschedule():
1900
- raise
1901
1888
  await self.handle_crash(exc)
1902
- else:
1889
+ elif intent not in _SUPERVISOR_OWNED_INTENTS:
1903
1890
  # Defensive: see sync engine's dispatch for why.
1904
1891
  self.logger.error(
1905
1892
  "Unhandled termination intent %r; treating as"
@@ -1936,6 +1923,13 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1936
1923
  exc_info=exc,
1937
1924
  )
1938
1925
  raise
1926
+ if (
1927
+ _is_async_runtime_cancellation(exc)
1928
+ and _termination_intent() in _SUPERVISOR_OWNED_INTENTS
1929
+ ):
1930
+ # A supervisor-driven SIGTERM can surface here as a cancellation
1931
+ # rather than a TerminationSignal.
1932
+ raise TerminationSignal(signal.SIGTERM) from exc
1939
1933
  # We don't want to crash a flow run if the user code finished executing
1940
1934
  if self.flow_run.state and not self.flow_run.state.is_final():
1941
1935
  # BaseExceptions are caught and handled as crashes
@@ -77,9 +77,9 @@ This ordering is a hard constraint. Getting it wrong causes ClosedResourceError
77
77
  - POSIX: ack only means "SIGTERM bridge is armed and intent is seeded." The runner's real `SIGTERM` is still the only trigger that interrupts blocking code. Kill happens immediately after ack.
78
78
  - Windows: ack means the child has queued `_thread.interrupt_main(SIGTERM)`. The runner gives the child a 30 s grace window to self-exit before falling back to an external kill.
79
79
 
80
- **Failure modes:** If the child never connects or never acks within 1 s, `signal()` returns `False` and the runner falls through to the normal kill path the engine treats the termination as a crash, same as today.
80
+ **Failure modes:** If the child never connects or never acks within 1 s, `signal()` returns `False`. `CancellationManager` falls through to the normal graceful kill and the engine treats the termination as a crash. The `prefect flow-run execute` supervisor instead calls `ProcessManager.kill(force=True)` (SIGKILL, no grace), because an unacked engine would propose `Crashed` and undo a `reschedule`/`relinquish`.
81
81
 
82
- **Extending intents:** The only intent today is `"cancel"`. The byte map (`_BYTE_FOR_INTENT` in `_control_channel.py` and `_INTENT_FOR_BYTE` in `_internal/control_listener.py`) must stay in sync when adding new intents.
82
+ **Extending intents:** The intents today are `"cancel"`, `"reschedule"` and `"relinquish"`. The byte map (`_BYTE_FOR_INTENT` in `_control_channel.py` and `_INTENT_FOR_BYTE` in `_internal/control_listener.py`) must stay in sync when adding new intents.
83
83
 
84
84
  ## ProcessStarter Strategy Pattern
85
85
 
@@ -29,13 +29,13 @@ period. What the channel adds is a pre-seeded intent on the child side: by
29
29
  the time the child's `SIGTERM` handler runs, `control_listener.get_intent()`
30
30
  already returns the pre-seeded intent, so the engine's
31
31
  `except TerminationSignal` block can dispatch on it (`on_cancellation` vs
32
- `on_crashed` today, with room for a third `"suspend"` branch in a follow-up).
32
+ `on_crashed`, or leaving the state alone for `"reschedule"`/`"relinquish"`).
33
33
 
34
34
  The channel is loopback-only, per-token authenticated, and best-effort: if
35
- the child never connects or never acks, `signal` returns `False` and the
36
- runner falls through to the kill path anyway, where the engine will treat
37
- the resulting termination as a crash the same behavior as today for
38
- unresponsive children.
35
+ the child never connects or never acks, `signal` returns `False`. Callers
36
+ decide what that means: cancellation falls through to a graceful kill and lets
37
+ the engine crash the run, while `prefect flow-run execute` kills without a
38
+ grace period so an unacked engine cannot crash a run it is about to retry.
39
39
 
40
40
  This module is deliberately generic. The set of valid intents lives in
41
41
  `prefect._internal.control_listener` as `Intent`; the wire
@@ -68,6 +68,8 @@ _DEFAULT_ACK_TIMEOUT = 1.0
68
68
  # intent is a matched one-line change on each side.
69
69
  _BYTE_FOR_INTENT: dict[Intent, bytes] = {
70
70
  "cancel": b"c",
71
+ "reschedule": b"r",
72
+ "relinquish": b"q",
71
73
  }
72
74
 
73
75
 
@@ -92,9 +94,8 @@ class ControlChannel:
92
94
  Use as an async context manager. Inside the context, `port` is the
93
95
  listener's bound port (suitable for injecting into child env vars).
94
96
 
95
- The only intent exposed today is `"cancel"`. A future PR will add
96
- `"suspend"` by extending the `Intent` literal, the byte map, and
97
- the engine's `except TerminationSignal` dispatch.
97
+ Adding an intent means extending the `Intent` literal, the byte map, and the
98
+ engine's `except TerminationSignal` dispatch.
98
99
  """
99
100
 
100
101
  def __init__(
@@ -69,6 +69,18 @@ def _pid_is_alive(pid: int) -> bool:
69
69
  kernel32.CloseHandle(handle)
70
70
 
71
71
 
72
+ def _hard_kill(pid: int) -> None:
73
+ """Stop `pid` immediately, taking its process group when it leads one so a
74
+ wrapper command cannot leave the real process running orphaned."""
75
+ if sys.platform == "win32":
76
+ # Any signal other than the CTRL_* events is a TerminateProcess here.
77
+ os.kill(pid, signal.SIGTERM)
78
+ elif os.getpgid(pid) == pid:
79
+ os.killpg(pid, signal.SIGKILL)
80
+ else:
81
+ os.kill(pid, signal.SIGKILL)
82
+
83
+
72
84
  @dataclass
73
85
  class ProcessHandle:
74
86
  _process: anyio.abc.Process | multiprocessing.context.SpawnProcess
@@ -197,7 +209,14 @@ class ProcessManager:
197
209
 
198
210
  await anyio.sleep(min(check_interval, remaining))
199
211
 
200
- async def kill(self, flow_run_id: UUID, grace_seconds: float = 30) -> None:
212
+ async def kill(
213
+ self, flow_run_id: UUID, grace_seconds: float = 30, *, force: bool = False
214
+ ) -> None:
215
+ """Stop the process for `flow_run_id`.
216
+
217
+ `force` skips the graceful signal, for callers that must not let the process
218
+ run any more code; `grace_seconds` is unused in that case.
219
+ """
201
220
  handle = self._process_map.get(flow_run_id)
202
221
  if handle is None:
203
222
  self._logger.warning(
@@ -214,10 +233,22 @@ class ProcessManager:
214
233
  )
215
234
  return
216
235
 
236
+ if force:
237
+ try:
238
+ _hard_kill(pid)
239
+ except ProcessLookupError:
240
+ pass
241
+ return
242
+
217
243
  if sys.platform == "win32":
218
244
  os.kill(pid, signal.CTRL_BREAK_EVENT)
219
245
  else:
220
- os.kill(pid, signal.SIGTERM)
246
+ try:
247
+ os.kill(pid, signal.SIGTERM)
248
+ except ProcessLookupError:
249
+ # Already reaped, e.g. re-killed from `__aexit__` after a cancelled
250
+ # executor skipped its cleanup.
251
+ return
221
252
 
222
253
  check_interval = max(grace_seconds / 10, 1)
223
254
  with anyio.move_on_after(grace_seconds):
@@ -47,6 +47,7 @@ class EngineCommandStarter:
47
47
  stream_output: bool = True,
48
48
  heartbeat_seconds: int | None = None,
49
49
  control_channel: ControlChannel | None = None,
50
+ isolate_process_group: bool = False,
50
51
  ) -> None:
51
52
  self._tmp_dir = tmp_dir
52
53
  self._storage = storage
@@ -58,6 +59,7 @@ class EngineCommandStarter:
58
59
  self._stream_output = stream_output
59
60
  self._heartbeat_seconds = heartbeat_seconds
60
61
  self._control_channel = control_channel
62
+ self._isolate_process_group = isolate_process_group
61
63
 
62
64
  async def start(
63
65
  self,
@@ -76,6 +78,9 @@ class EngineCommandStarter:
76
78
  kwargs: dict[str, object] = {}
77
79
  if sys.platform == "win32":
78
80
  kwargs["creationflags"] = subprocess.CREATE_NEW_PROCESS_GROUP
81
+ elif self._isolate_process_group:
82
+ # So a group-wide SIGTERM cannot beat the caller's intent to the child.
83
+ kwargs["start_new_session"] = True
79
84
 
80
85
  # Register the flow run with the control channel before spawning so
81
86
  # the child can connect back as soon as it starts. Returned port +
@@ -333,6 +333,7 @@ class WorkspaceResolvingEngineCommandStarter:
333
333
  heartbeat_seconds: int | None = None,
334
334
  deployment_name: str | None = None,
335
335
  control_channel: ControlChannel | None = None,
336
+ isolate_process_group: bool = False,
336
337
  ) -> None:
337
338
  self._workspace_root = workspace_root
338
339
  self._command = command
@@ -340,6 +341,7 @@ class WorkspaceResolvingEngineCommandStarter:
340
341
  self._heartbeat_seconds = heartbeat_seconds
341
342
  self._deployment_name = deployment_name
342
343
  self._control_channel = control_channel
344
+ self._isolate_process_group = isolate_process_group
343
345
  self._workspace: PreparedWorkspace | None = None
344
346
 
345
347
  @property
@@ -368,6 +370,7 @@ class WorkspaceResolvingEngineCommandStarter:
368
370
  heartbeat_seconds=self._heartbeat_seconds,
369
371
  deployment_name=self._deployment_name,
370
372
  control_channel=self._control_channel,
373
+ isolate_process_group=self._isolate_process_group,
371
374
  )
372
375
  await starter.start(flow_run, task_status=task_status)
373
376
 
@@ -423,15 +423,36 @@ async def run_process(
423
423
  task_status.started(value)
424
424
 
425
425
  if stream_output:
426
- await consume_process_output(
427
- process, stdout_sink=stream_output[0], stderr_sink=stream_output[1]
428
- )
426
+ try:
427
+ await consume_process_output(
428
+ process, stdout_sink=stream_output[0], stderr_sink=stream_output[1]
429
+ )
430
+ except Exception:
431
+ # Keep draining both pipes after an output sink fails so the process
432
+ # can finish without blocking on a full stdout or stderr buffer.
433
+ await _drain_process_output(process)
434
+ await process.wait()
435
+ raise
429
436
 
430
437
  await process.wait()
431
438
 
432
439
  return process
433
440
 
434
441
 
442
+ async def _drain_process_output(process: anyio.abc.Process) -> None:
443
+ async with anyio.create_task_group() as tg:
444
+ if process.stdout is not None:
445
+ tg.start_soon(
446
+ stream_text,
447
+ TextReceiveStream(process.stdout, errors="replace"),
448
+ )
449
+ if process.stderr is not None:
450
+ tg.start_soon(
451
+ stream_text,
452
+ TextReceiveStream(process.stderr, errors="replace"),
453
+ )
454
+
455
+
435
456
  async def consume_process_output(
436
457
  process: anyio.abc.Process,
437
458
  stdout_sink: Optional[TextSink[str]] = None,
@@ -1,5 +0,0 @@
1
- # Generated by versioningit
2
- __version__ = "3.8.1.dev5"
3
- __build_date__ = "2026-07-30 08:59:46.957198+00:00"
4
- __git_commit__ = "5343882dac86146bccebbd38ce41794cef134a7c"
5
- __dirty__ = False