prefect-client 3.9.2.dev4__tar.gz → 3.9.2.dev5__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 (461) hide show
  1. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/PKG-INFO +1 -1
  2. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/AGENTS.md +1 -0
  3. prefect_client-3.9.2.dev5/src/prefect/_build_info.py +5 -0
  4. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/engine.py +59 -0
  5. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/schemas/objects.py +2 -2
  6. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/flow_engine.py +9 -3
  7. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/flows.py +35 -10
  8. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/infrastructure/provisioners/coiled.py +1 -1
  9. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/infrastructure/provisioners/modal.py +1 -1
  10. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/input/actions.py +3 -2
  11. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/locking/filesystem.py +9 -4
  12. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/locking/memory.py +10 -5
  13. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/locking/protocol.py +6 -0
  14. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/AGENTS.md +2 -0
  15. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_hook_runner.py +4 -5
  16. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_workspace_runtime_bootstrap.py +48 -8
  17. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/storage.py +18 -3
  18. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/deployments.py +3 -0
  19. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/flow_runs.py +3 -1
  20. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/server.py +3 -0
  21. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/work_queues.py +19 -12
  22. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/workers.py +17 -14
  23. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/task_runners.py +10 -1
  24. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/callables/__init__.py +6 -3
  25. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/collections.py +10 -1
  26. prefect_client-3.9.2.dev4/src/prefect/_build_info.py +0 -5
  27. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/.gitignore +0 -0
  28. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/LICENSE +0 -0
  29. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/README.md +0 -0
  30. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/hatch_build.py +0 -0
  31. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/pyproject.toml +0 -0
  32. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/.prefectignore +0 -0
  33. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/__init__.py +0 -0
  34. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/__main__.py +0 -0
  35. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/__init__.py +0 -0
  36. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/_launchers.py +0 -0
  37. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/bundles/__init__.py +0 -0
  38. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/bundles/execute.py +0 -0
  39. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/plugins/__init__.py +0 -0
  40. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/plugins/apply.py +0 -0
  41. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  42. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/plugins/manager.py +0 -0
  43. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/plugins/spec.py +0 -0
  44. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/sla/__init__.py +0 -0
  45. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/sla/client.py +0 -0
  46. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_experimental/sla/objects.py +0 -0
  47. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_flow_run_suspension.py +0 -0
  48. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/__init__.py +0 -0
  49. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/_logging.py +0 -0
  50. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/_observation_delivery.py +0 -0
  51. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/analytics/__init__.py +0 -0
  52. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  53. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/analytics/client.py +0 -0
  54. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/analytics/device_id.py +0 -0
  55. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/analytics/emit.py +0 -0
  56. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/analytics/enabled.py +0 -0
  57. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/analytics/events.py +0 -0
  58. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/analytics/milestones.py +0 -0
  59. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/analytics/notice.py +0 -0
  60. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/analytics/service.py +0 -0
  61. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/ast_utils.py +0 -0
  62. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/attempt_control.py +0 -0
  63. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/buildx.py +0 -0
  64. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/compatibility/__init__.py +0 -0
  65. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  66. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/compatibility/backports.py +0 -0
  67. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/compatibility/blocks.py +0 -0
  68. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  69. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  70. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/compatibility/migration.py +0 -0
  71. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/compatibility/starlette.py +0 -0
  72. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/concurrency/__init__.py +0 -0
  73. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/concurrency/api.py +0 -0
  74. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/concurrency/calls.py +0 -0
  75. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  76. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  77. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/concurrency/inspection.py +0 -0
  78. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/concurrency/primitives.py +0 -0
  79. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/concurrency/services.py +0 -0
  80. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/concurrency/threads.py +0 -0
  81. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/concurrency/waiters.py +0 -0
  82. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/control_listener.py +0 -0
  83. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/deprecated.py +0 -0
  84. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/git.py +0 -0
  85. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  86. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/installation.py +0 -0
  87. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/integrations.py +0 -0
  88. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/launchers.py +0 -0
  89. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/lazy.py +0 -0
  90. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/metrics.py +0 -0
  91. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/observability.py +0 -0
  92. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/observers.py +0 -0
  93. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/plugins/__init__.py +0 -0
  94. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/plugins/apply.py +0 -0
  95. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/plugins/collections.py +0 -0
  96. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  97. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/plugins/manager.py +0 -0
  98. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/plugins/spec.py +0 -0
  99. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/plugins/startup.py +0 -0
  100. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/pydantic/__init__.py +0 -0
  101. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/pydantic/schemas.py +0 -0
  102. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  103. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  104. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  105. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/pytz.py +0 -0
  106. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/result_records.py +0 -0
  107. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/retries.py +0 -0
  108. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/schema.py +0 -0
  109. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/schemas/__init__.py +0 -0
  110. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/schemas/_registry.py +0 -0
  111. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/schemas/bases.py +0 -0
  112. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/schemas/fields.py +0 -0
  113. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/schemas/serializers.py +0 -0
  114. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/schemas/validators.py +0 -0
  115. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  116. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/server_maintenance.py +0 -0
  117. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/states.py +0 -0
  118. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/testing.py +0 -0
  119. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/urls.py +0 -0
  120. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/uuid7.py +0 -0
  121. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/version_checking.py +0 -0
  122. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/versioning.py +0 -0
  123. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/waiters.py +0 -0
  124. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_internal/websockets.py +0 -0
  125. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/__init__.py +0 -0
  126. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/fetcher.py +0 -0
  127. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/generator.py +0 -0
  128. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/models.py +0 -0
  129. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/naming.py +0 -0
  130. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/renderer.py +0 -0
  131. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/schema_converter.py +0 -0
  132. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/templates/__init__.py +0 -0
  133. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  134. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/types.py +0 -0
  135. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_sdk/unions.py +0 -0
  136. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_vendor/croniter/__init__.py +0 -0
  137. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/_vendor/croniter/croniter.py +0 -0
  138. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/agent.py +0 -0
  139. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/analytics/__init__.py +0 -0
  140. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/artifacts.py +0 -0
  141. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/assets/__init__.py +0 -0
  142. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/assets/core.py +0 -0
  143. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/assets/materialize.py +0 -0
  144. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/automations.py +0 -0
  145. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/blocks/AGENTS.md +0 -0
  146. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/blocks/__init__.py +0 -0
  147. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/blocks/abstract.py +0 -0
  148. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/blocks/core.py +0 -0
  149. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/blocks/fields.py +0 -0
  150. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/blocks/notifications.py +0 -0
  151. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/blocks/redis.py +0 -0
  152. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/blocks/system.py +0 -0
  153. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/blocks/webhook.py +0 -0
  154. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/bundles/__init__.py +0 -0
  155. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/bundles/_file_collector.py +0 -0
  156. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/bundles/_ignore_filter.py +0 -0
  157. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/bundles/_path_resolver.py +0 -0
  158. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/bundles/_zip_builder.py +0 -0
  159. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/bundles/_zip_extractor.py +0 -0
  160. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/bundles/execute.py +0 -0
  161. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/cache_policies.py +0 -0
  162. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/AGENTS.md +0 -0
  163. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/__init__.py +0 -0
  164. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/attribution.py +0 -0
  165. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/base.py +0 -0
  166. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/cloud.py +0 -0
  167. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/collections.py +0 -0
  168. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/constants.py +0 -0
  169. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/__init__.py +0 -0
  170. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  171. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  172. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  173. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_automations/client.py +0 -0
  174. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  175. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  176. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  177. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  178. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  179. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  180. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  181. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  182. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  183. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  184. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  185. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_events/client.py +0 -0
  186. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  187. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  188. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  189. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_flows/client.py +0 -0
  190. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  191. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_logs/client.py +0 -0
  192. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  193. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_variables/client.py +0 -0
  194. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  195. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  196. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/base.py +0 -0
  197. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/orchestration/routes.py +0 -0
  198. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/schemas/__init__.py +0 -0
  199. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/schemas/actions.py +0 -0
  200. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/schemas/events.py +0 -0
  201. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/schemas/filters.py +0 -0
  202. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/schemas/responses.py +0 -0
  203. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/schemas/schedules.py +0 -0
  204. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/schemas/sorting.py +0 -0
  205. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/schemas/worker_channel.py +0 -0
  206. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/subscriptions.py +0 -0
  207. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/types/__init__.py +0 -0
  208. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  209. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/client/utilities.py +0 -0
  210. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/AGENTS.md +0 -0
  211. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/__init__.py +0 -0
  212. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/_asyncio.py +0 -0
  213. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/_events.py +0 -0
  214. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/_leases.py +0 -0
  215. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/_sync.py +0 -0
  216. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/asyncio.py +0 -0
  217. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/context.py +0 -0
  218. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/services.py +0 -0
  219. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/sync.py +0 -0
  220. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/v1/__init__.py +0 -0
  221. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  222. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/v1/_events.py +0 -0
  223. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/v1/asyncio.py +0 -0
  224. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/v1/context.py +0 -0
  225. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/v1/services.py +0 -0
  226. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/concurrency/v1/sync.py +0 -0
  227. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/context.py +0 -0
  228. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/AGENTS.md +0 -0
  229. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/__init__.py +0 -0
  230. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/base.py +0 -0
  231. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/deployments.py +0 -0
  232. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/flow_runs.py +0 -0
  233. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/runner.py +0 -0
  234. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/schedules.py +0 -0
  235. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/steps/__init__.py +0 -0
  236. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/steps/core.py +0 -0
  237. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/steps/pull.py +0 -0
  238. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/deployments/steps/utility.py +0 -0
  239. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/docker/__init__.py +0 -0
  240. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/docker/_buildx.py +0 -0
  241. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/docker/docker_image.py +0 -0
  242. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/engine.py +0 -0
  243. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/AGENTS.md +0 -0
  244. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/__init__.py +0 -0
  245. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/actions.py +0 -0
  246. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/clients.py +0 -0
  247. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/filters.py +0 -0
  248. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/related.py +0 -0
  249. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/schemas/__init__.py +0 -0
  250. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/schemas/automations.py +0 -0
  251. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  252. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/schemas/events.py +0 -0
  253. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/schemas/labelling.py +0 -0
  254. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/subscribers.py +0 -0
  255. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/utilities.py +0 -0
  256. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/events/worker.py +0 -0
  257. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/exceptions.py +0 -0
  258. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/filesystems.py +0 -0
  259. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/flow_runs.py +0 -0
  260. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/futures.py +0 -0
  261. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/infrastructure/__init__.py +0 -0
  262. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/infrastructure/base.py +0 -0
  263. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  264. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  265. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  266. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  267. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/input/__init__.py +0 -0
  268. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/input/run_input.py +0 -0
  269. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/locking/__init__.py +0 -0
  270. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/locking/_filelock.py +0 -0
  271. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/logging/AGENTS.md +0 -0
  272. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/logging/__init__.py +0 -0
  273. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/logging/clients.py +0 -0
  274. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/logging/configuration.py +0 -0
  275. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/logging/filters.py +0 -0
  276. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/logging/formatters.py +0 -0
  277. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/logging/handlers.py +0 -0
  278. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/logging/highlighters.py +0 -0
  279. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/logging/loggers.py +0 -0
  280. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/logging/logging.yml +0 -0
  281. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/main.py +0 -0
  282. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/plugins.py +0 -0
  283. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/py.typed +0 -0
  284. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/results.py +0 -0
  285. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/__init__.py +0 -0
  286. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_cancel_finalizer.py +0 -0
  287. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_cancellation_manager.py +0 -0
  288. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_control_channel.py +0 -0
  289. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_deployment_registry.py +0 -0
  290. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_event_emitter.py +0 -0
  291. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_flow_resolver.py +0 -0
  292. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_flow_run_executor.py +0 -0
  293. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_limit_manager.py +0 -0
  294. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_process_manager.py +0 -0
  295. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  296. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_starter_bundle.py +0 -0
  297. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_starter_direct.py +0 -0
  298. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_starter_engine.py +0 -0
  299. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_state_proposer.py +0 -0
  300. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_uv_command.py +0 -0
  301. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_workspace_hook_runner.py +0 -0
  302. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_workspace_resolver.py +0 -0
  303. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_workspace_runtime.py +0 -0
  304. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_workspace_starter.py +0 -0
  305. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/_workspace_supervisor.py +0 -0
  306. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/runner.py +0 -0
  307. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runner/server.py +0 -0
  308. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runtime/__init__.py +0 -0
  309. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runtime/deployment.py +0 -0
  310. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runtime/flow_run.py +0 -0
  311. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/runtime/task_run.py +0 -0
  312. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/schedules.py +0 -0
  313. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/serializers.py +0 -0
  314. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/__init__.py +0 -0
  315. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/_ui_static.py +0 -0
  316. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/admin.py +0 -0
  317. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/artifacts.py +0 -0
  318. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/automations.py +0 -0
  319. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/background_workers.py +0 -0
  320. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/block_capabilities.py +0 -0
  321. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/block_documents.py +0 -0
  322. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/block_schemas.py +0 -0
  323. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/block_types.py +0 -0
  324. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/clients.py +0 -0
  325. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/collections.py +0 -0
  326. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  327. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/concurrency_limits.py +0 -0
  328. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  329. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/csrf_token.py +0 -0
  330. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/dependencies.py +0 -0
  331. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/events.py +0 -0
  332. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/flow_run_states.py +0 -0
  333. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/flows.py +0 -0
  334. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/logs.py +0 -0
  335. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/middleware.py +0 -0
  336. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/observed_states.py +0 -0
  337. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/root.py +0 -0
  338. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/run_history.py +0 -0
  339. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/saved_searches.py +0 -0
  340. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  341. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/task_run_states.py +0 -0
  342. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/task_runs.py +0 -0
  343. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/task_workers.py +0 -0
  344. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/templates.py +0 -0
  345. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/ui/__init__.py +0 -0
  346. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/ui/flow_runs.py +0 -0
  347. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/ui/flows.py +0 -0
  348. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/ui/schemas.py +0 -0
  349. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/ui/task_runs.py +0 -0
  350. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/validation.py +0 -0
  351. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/server/api/variables.py +0 -0
  352. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/AGENTS.md +0 -0
  353. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/__init__.py +0 -0
  354. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/_types.py +0 -0
  355. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/base.py +0 -0
  356. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/constants.py +0 -0
  357. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/context.py +0 -0
  358. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/legacy.py +0 -0
  359. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/__init__.py +0 -0
  360. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/_defaults.py +0 -0
  361. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/api.py +0 -0
  362. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/cli.py +0 -0
  363. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/client.py +0 -0
  364. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/cloud.py +0 -0
  365. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/deployments.py +0 -0
  366. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/events.py +0 -0
  367. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/experiments.py +0 -0
  368. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/flows.py +0 -0
  369. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/internal.py +0 -0
  370. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/logging.py +0 -0
  371. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/plugins.py +0 -0
  372. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/results.py +0 -0
  373. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/root.py +0 -0
  374. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/runner.py +0 -0
  375. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/__init__.py +0 -0
  376. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/api.py +0 -0
  377. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/concurrency.py +0 -0
  378. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/database.py +0 -0
  379. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/deployments.py +0 -0
  380. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/docket.py +0 -0
  381. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/ephemeral.py +0 -0
  382. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/events.py +0 -0
  383. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  384. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/logs.py +0 -0
  385. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/root.py +0 -0
  386. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/services.py +0 -0
  387. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/tasks.py +0 -0
  388. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/ui.py +0 -0
  389. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/server/worker_channel.py +0 -0
  390. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/tasks.py +0 -0
  391. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/telemetry.py +0 -0
  392. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/testing.py +0 -0
  393. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/models/worker.py +0 -0
  394. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/profiles.py +0 -0
  395. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/profiles.toml +0 -0
  396. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/settings/sources.py +0 -0
  397. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/states.py +0 -0
  398. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/task_engine.py +0 -0
  399. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/task_runs.py +0 -0
  400. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/task_worker.py +0 -0
  401. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/tasks.py +0 -0
  402. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/telemetry/__init__.py +0 -0
  403. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/telemetry/run_telemetry.py +0 -0
  404. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/transactions.py +0 -0
  405. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/types/__init__.py +0 -0
  406. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/types/_concurrency.py +0 -0
  407. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/types/_datetime.py +0 -0
  408. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/types/_datetime_deprecations.py +0 -0
  409. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/types/entrypoint.py +0 -0
  410. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/types/names.py +0 -0
  411. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/AGENTS.md +0 -0
  412. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/__init__.py +0 -0
  413. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/annotations.py +0 -0
  414. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  415. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  416. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/callables/AGENTS.md +0 -0
  417. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/compat.py +0 -0
  418. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/context.py +0 -0
  419. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/dispatch.py +0 -0
  420. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/dockerutils.py +0 -0
  421. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/engine/AGENTS.md +0 -0
  422. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/engine/__init__.py +0 -0
  423. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  424. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/filesystem/__init__.py +0 -0
  425. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/generics.py +0 -0
  426. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/hashing.py +0 -0
  427. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/importtools.py +0 -0
  428. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/math.py +0 -0
  429. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/names.py +0 -0
  430. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  431. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/processutils/__init__.py +0 -0
  432. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/pydantic.py +0 -0
  433. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/render_swagger.py +0 -0
  434. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  435. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  436. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  437. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/schema_tools/validation.py +0 -0
  438. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/services.py +0 -0
  439. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/slugify.py +0 -0
  440. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/templating/AGENTS.md +0 -0
  441. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/templating/__init__.py +0 -0
  442. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/text.py +0 -0
  443. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/timeout.py +0 -0
  444. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/urls.py +0 -0
  445. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/utilities/visualization.py +0 -0
  446. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/variables.py +0 -0
  447. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/AGENTS.md +0 -0
  448. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/__init__.py +0 -0
  449. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/_cleanup.py +0 -0
  450. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/_cleanup_handlers.py +0 -0
  451. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  452. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  453. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/_worker_channel/_state.py +0 -0
  454. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  455. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  456. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/base.py +0 -0
  457. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/block.py +0 -0
  458. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/cloud.py +0 -0
  459. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/process.py +0 -0
  460. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/server.py +0 -0
  461. {prefect_client-3.9.2.dev4 → prefect_client-3.9.2.dev5}/src/prefect/workers/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: prefect-client
3
- Version: 3.9.2.dev4
3
+ Version: 3.9.2.dev5
4
4
  Summary: Workflow orchestration and management.
5
5
  Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
6
6
  Project-URL: Documentation, https://www.prefect.io/docs
@@ -41,6 +41,7 @@ Runtime flow/task parameter values must come from `utilities.callables.get_call_
41
41
  - **`ResultRecordMetadata` tolerates unknown serializer types.** When loading persisted metadata, an unrecognized serializer `type` is converted to an `UnknownSerializer` placeholder rather than raising `ValidationError`. This allows inspecting result metadata when the serializer implementation is unavailable in the current environment. However, known serializer types with invalid fields still raise `ValidationError`. `UnknownSerializer.dumps()` and `UnknownSerializer.loads()` raise `RuntimeError` — the tolerance is for inspection only, not actual serialization/deserialization.
42
42
  - **`ResultRecord` must be marked persisted after every storage write.** `ResultStore` calls `mark_persisted()` on every record it writes; `to_state_create` in `states.py` consults `is_persisted` as a fallback when `should_persist_result()` returns `False` (e.g., after run context teardown). Any new sync or async persist path that omits `mark_persisted()` will silently drop state metadata for already-written results.
43
43
  - **Flow-run suspension is enforced at orchestration boundaries.** Suspension is delivered via `FlowRunSuspensionRequest` and raised with `raise_if_flow_run_suspension_requested()`. When changing engines, futures, task runners, or generator execution, check before returning control to flow user code or proposing a flow state that could leave `Suspended`; keep sync/async paths aligned and avoid per-boundary API reads.
44
+ - **Flow state hooks accept the same signatures on every execution path.** The sync and async flow engines and `runner/_hook_runner.py` share `_internal/engine.py::resolve_flow_hook_arguments`; `runner/_workspace_runtime_bootstrap.py` keeps its own copy because it may run under an older Prefect. Change the shared function and the copy together.
44
45
  - **Subflow tracking tasks use UUID dynamic keys when called from within a submitted task.** `flow_engine.py` marks the synthetic tracking `Task` with `_is_subflow_tracking_task=True`; `tasks.py` checks this flag to assign UUID-based (unstable) `dynamic_key` values when the tracking task runs inside a submitted task context. This prevents key collisions between concurrent sibling subflows on parent-flow retry. Direct subflow calls (no enclosing task context) keep stable sequential keys to preserve the retry optimization that reuses completed subflow results.
45
46
 
46
47
  ## Logging
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.9.2.dev5"
3
+ __build_date__ = "2026-11-05 08:13:39.580235+00:00"
4
+ __git_commit__ = "7d8cf20e30b8d22e4fdc99bef3a99050ad0d7cf8"
5
+ __dirty__ = False
@@ -1,5 +1,6 @@
1
1
  """Internal engine utilities"""
2
2
 
3
+ import inspect
3
4
  from collections.abc import Callable
4
5
  from functools import partial
5
6
  from typing import TYPE_CHECKING, Any, Union
@@ -9,6 +10,9 @@ from prefect.context import FlowRunContext
9
10
  from prefect.flows import Flow
10
11
  from prefect.tasks import Task, TaskRunNameCallbackWithParameters
11
12
 
13
+ if TYPE_CHECKING:
14
+ from prefect.client.schemas.objects import FlowRun, State
15
+
12
16
 
13
17
  def dynamic_key_for_task_run(
14
18
  context: FlowRunContext, task: "Task[..., Any]", stable: bool = True
@@ -93,3 +97,58 @@ def get_hook_name(hook: Callable[..., Any]) -> str:
93
97
  hook.func.__name__ if isinstance(hook, partial) else hook.__class__.__name__
94
98
  )
95
99
  )
100
+
101
+
102
+ def resolve_flow_hook_arguments(
103
+ hook: Callable[..., Any],
104
+ flow: "Flow[..., Any]",
105
+ flow_run: "FlowRun",
106
+ state: "State",
107
+ ) -> tuple[tuple[Any, ...], dict[str, Any]]:
108
+ """
109
+ Return the positional and keyword arguments to call a flow state hook with,
110
+ checking its signature without calling it.
111
+
112
+ A hook that names its parameters `flow`, `flow_run` (or `run`) and `state`
113
+ gets them by name, in any order and including keyword-only parameters.
114
+ Otherwise, a hook that takes three positional arguments gets them in that
115
+ order, whatever their names, and a hook that only takes keyword arguments
116
+ gets them by name.
117
+
118
+ Raises:
119
+ TypeError: if the hook accepts none of these forms.
120
+ """
121
+ try:
122
+ signature = inspect.signature(hook)
123
+ except (TypeError, ValueError):
124
+ return (flow, flow_run, state), {}
125
+
126
+ def binds(*args: Any, **kwargs: Any) -> bool:
127
+ try:
128
+ signature.bind(*args, **kwargs)
129
+ except TypeError:
130
+ return False
131
+ return True
132
+
133
+ named = (inspect.Parameter.POSITIONAL_OR_KEYWORD, inspect.Parameter.KEYWORD_ONLY)
134
+ for flow_run_name in ("flow_run", "run"):
135
+ kwargs = {"flow": flow, flow_run_name: flow_run, "state": state}
136
+ declared = all(
137
+ name in signature.parameters and signature.parameters[name].kind in named
138
+ for name in kwargs
139
+ )
140
+ if declared and binds(**kwargs):
141
+ return (), kwargs
142
+
143
+ if binds(flow, flow_run, state):
144
+ return (flow, flow_run, state), {}
145
+
146
+ kwargs = {"flow": flow, "flow_run": flow_run, "state": state}
147
+ if binds(**kwargs):
148
+ return (), kwargs
149
+
150
+ raise TypeError(
151
+ f"Hook {get_hook_name(hook)!r} must accept the flow, the flow run and the"
152
+ " state as three positional arguments or as parameters named `flow`,"
153
+ " `flow_run` (or `run`) and `state`"
154
+ )
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import datetime
4
+ import json
4
5
  import warnings
5
6
  from collections.abc import Callable, Mapping
6
7
  from enum import Enum
@@ -17,7 +18,6 @@ from typing import (
17
18
  )
18
19
  from uuid import UUID
19
20
 
20
- import orjson
21
21
  from pydantic import (
22
22
  AfterValidator,
23
23
  ConfigDict,
@@ -1768,7 +1768,7 @@ class FlowRunInput(ObjectBaseModel):
1768
1768
  Returns:
1769
1769
  Any: the decoded value
1770
1770
  """
1771
- return orjson.loads(self.value)
1771
+ return json.loads(self.value)
1772
1772
 
1773
1773
 
1774
1774
  class GlobalConcurrencyLimit(ObjectBaseModel):
@@ -59,7 +59,11 @@ from prefect._internal.control_listener import (
59
59
  get_intent,
60
60
  report_engine_outcome,
61
61
  )
62
- from prefect._internal.engine import get_hook_name, resolve_custom_flow_run_name
62
+ from prefect._internal.engine import (
63
+ get_hook_name,
64
+ resolve_custom_flow_run_name,
65
+ resolve_flow_hook_arguments,
66
+ )
63
67
  from prefect._internal.metrics import RunMetrics
64
68
  from prefect.client.orchestration import PrefectClient, SyncPrefectClient, get_client
65
69
  from prefect.client.schemas import FlowRun, TaskRun
@@ -1072,7 +1076,8 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
1072
1076
  f"Running hook {hook_name!r} in response to entering state"
1073
1077
  f" {state.name!r}"
1074
1078
  )
1075
- result = hook(flow, flow_run, state)
1079
+ args, kwargs = resolve_flow_hook_arguments(hook, flow, flow_run, state)
1080
+ result = hook(*args, **kwargs)
1076
1081
  if asyncio.iscoroutine(result):
1077
1082
  run_coro_as_sync(result)
1078
1083
  except Exception:
@@ -1803,7 +1808,8 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1803
1808
  f"Running hook {hook_name!r} in response to entering state"
1804
1809
  f" {state.name!r}"
1805
1810
  )
1806
- result = hook(flow, flow_run, state)
1811
+ args, kwargs = resolve_flow_hook_arguments(hook, flow, flow_run, state)
1812
+ result = hook(*args, **kwargs)
1807
1813
  if asyncio.iscoroutine(result):
1808
1814
  await result
1809
1815
  except Exception:
@@ -121,15 +121,22 @@ F = TypeVar("F", bound="Flow[Any, Any]") # The type of the flow
121
121
  class FlowStateHook(Protocol, Generic[P, R]):
122
122
  """
123
123
  A callable that is invoked when a flow enters a given state.
124
+
125
+ It receives the flow, the flow run, and the state as its first three
126
+ parameters, whatever their names. A hook whose parameters are named `flow`,
127
+ `flow_run` (or `run`), and `state` receives them by name instead.
124
128
  """
125
129
 
126
130
  __name__: str
127
131
 
128
132
  def __call__(
129
- self, flow: Flow[P, R], flow_run: FlowRun, state: State
133
+ self, flow: Flow[P, R], flow_run: FlowRun, state: State, /
130
134
  ) -> Awaitable[None] | None: ...
131
135
 
132
136
 
137
+ _FlowStateHookT = TypeVar("_FlowStateHookT", bound="FlowStateHook[..., Any]")
138
+
139
+
133
140
  if TYPE_CHECKING:
134
141
  import logging
135
142
 
@@ -593,6 +600,11 @@ class Flow(Generic[P, R]):
593
600
  Validate parameters for compatibility with the flow by attempting to cast the inputs to the
594
601
  associated types specified by the function's type annotations.
595
602
 
603
+ Resolve saved block references by UUID or by a dictionary containing
604
+ `block_document_id` or `block_document_slug`. UUID strings, including UUID
605
+ URNs, retain their block-reference meaning. Other `$ref` values, such as
606
+ JSON Schema paths and URLs, are preserved as parameter data.
607
+
596
608
  Returns:
597
609
  A new dict of parameters that have been cast to the appropriate types
598
610
 
@@ -601,11 +613,24 @@ class Flow(Generic[P, R]):
601
613
  """
602
614
 
603
615
  def resolve_block_reference(data: Any | dict[str, Any]) -> Any:
604
- if isinstance(data, dict) and "$ref" in data:
605
- from prefect.blocks.core import Block
616
+ if not isinstance(data, dict) or "$ref" not in data:
617
+ return data
618
+
619
+ ref = data["$ref"]
620
+ if isinstance(ref, str):
621
+ try:
622
+ UUID(ref)
623
+ except ValueError:
624
+ return data
625
+ elif not isinstance(ref, UUID) and not (
626
+ isinstance(ref, dict)
627
+ and ("block_document_id" in ref or "block_document_slug" in ref)
628
+ ):
629
+ return data
630
+
631
+ from prefect.blocks.core import Block
606
632
 
607
- return Block.load_from_ref(data["$ref"], _sync=True)
608
- return data
633
+ return Block.load_from_ref(ref, _sync=True)
609
634
 
610
635
  try:
611
636
  parameters = visit_collection(
@@ -1004,23 +1029,23 @@ class Flow(Generic[P, R]):
1004
1029
  _sla=_sla,
1005
1030
  )
1006
1031
 
1007
- def on_completion(self, fn: FlowStateHook[P, R]) -> FlowStateHook[P, R]:
1032
+ def on_completion(self, fn: _FlowStateHookT) -> _FlowStateHookT:
1008
1033
  self.on_completion_hooks.append(fn)
1009
1034
  return fn
1010
1035
 
1011
- def on_cancellation(self, fn: FlowStateHook[P, R]) -> FlowStateHook[P, R]:
1036
+ def on_cancellation(self, fn: _FlowStateHookT) -> _FlowStateHookT:
1012
1037
  self.on_cancellation_hooks.append(fn)
1013
1038
  return fn
1014
1039
 
1015
- def on_crashed(self, fn: FlowStateHook[P, R]) -> FlowStateHook[P, R]:
1040
+ def on_crashed(self, fn: _FlowStateHookT) -> _FlowStateHookT:
1016
1041
  self.on_crashed_hooks.append(fn)
1017
1042
  return fn
1018
1043
 
1019
- def on_running(self, fn: FlowStateHook[P, R]) -> FlowStateHook[P, R]:
1044
+ def on_running(self, fn: _FlowStateHookT) -> _FlowStateHookT:
1020
1045
  self.on_running_hooks.append(fn)
1021
1046
  return fn
1022
1047
 
1023
- def on_failure(self, fn: FlowStateHook[P, R]) -> FlowStateHook[P, R]:
1048
+ def on_failure(self, fn: _FlowStateHookT) -> _FlowStateHookT:
1024
1049
  self.on_failure_hooks.append(fn)
1025
1050
  return fn
1026
1051
 
@@ -215,7 +215,7 @@ class CoiledPushProvisioner:
215
215
  else:
216
216
  raise RuntimeError(
217
217
  "Coiled credentials not found. Please create a new token by"
218
- " running [blue]coiled login[/] and try again."
218
+ " running `coiled login` and try again."
219
219
  )
220
220
 
221
221
  # Create the credentials block
@@ -220,7 +220,7 @@ class ModalPushProvisioner:
220
220
  else:
221
221
  raise RuntimeError(
222
222
  "Modal credentials not found. Please create a new token by"
223
- " running [blue]modal token new[/] and try again."
223
+ " running `modal token new` and try again."
224
224
  )
225
225
 
226
226
  # Create the credentials block
@@ -1,3 +1,4 @@
1
+ import json
1
2
  from typing import TYPE_CHECKING, Any, Optional, Set
2
3
  from uuid import UUID
3
4
 
@@ -236,7 +237,7 @@ async def aread_flow_run_input(
236
237
  return None
237
238
  raise
238
239
  else:
239
- return orjson.loads(value)
240
+ return json.loads(value)
240
241
 
241
242
 
242
243
  @async_dispatch(aread_flow_run_input)
@@ -261,7 +262,7 @@ def read_flow_run_input(key: str, flow_run_id: Optional[UUID] = None) -> Any:
261
262
  return None
262
263
  raise
263
264
  else:
264
- return orjson.loads(value)
265
+ return json.loads(value)
265
266
 
266
267
 
267
268
  @client_injector
@@ -194,13 +194,18 @@ class FileSystemLockManager(LockManager):
194
194
 
195
195
  def release_lock(self, key: str, holder: str) -> None:
196
196
  lock_path = self._lock_path_for_key(key)
197
- if not self.is_locked(key):
198
- raise ValueError(f"No lock for transaction with key {key}")
199
197
  if self.is_lock_holder(key, holder):
200
198
  Path(lock_path).unlink(missing_ok=True)
201
199
  self._locks.pop(key, None)
202
- else:
203
- raise ValueError(f"No lock held by {holder} for transaction with key {key}")
200
+ return
201
+ if not self.is_locked(key):
202
+ # The lock was already released or expired (e.g. its hold timeout
203
+ # elapsed or it was released during a task retry) — including
204
+ # between the checks above — so releasing it is a no-op, matching
205
+ # RedisLockManager.
206
+ self._locks.pop(key, None)
207
+ return
208
+ raise ValueError(f"No lock held by {holder} for transaction with key {key}")
204
209
 
205
210
  def is_locked(self, key: str, use_cache: bool = False) -> bool:
206
211
  if (lock_info := self._get_lock_info(key, use_cache=use_cache)) is None:
@@ -180,13 +180,18 @@ class MemoryLockManager(LockManager):
180
180
 
181
181
  def release_lock(self, key: str, holder: str) -> None:
182
182
  with self._locks_dict_lock:
183
- if key in self._locks and self._locks[key]["holder"] == holder:
184
- if (
185
- expiration_timer := self._locks[key]["expiration_timer"]
186
- ) is not None:
183
+ lock_info = self._locks.get(key)
184
+ if lock_info is not None and lock_info["holder"] == holder:
185
+ if (expiration_timer := lock_info["expiration_timer"]) is not None:
187
186
  expiration_timer.cancel()
188
- self._locks[key]["lock"].release()
187
+ if lock_info["lock"].locked():
188
+ lock_info["lock"].release()
189
189
  del self._locks[key]
190
+ elif lock_info is None or not lock_info["lock"].locked():
191
+ # The lock was already released or expired (e.g. its hold
192
+ # timeout elapsed or it was released during a task retry);
193
+ # releasing it is a no-op, matching RedisLockManager.
194
+ return
190
195
  else:
191
196
  raise ValueError(
192
197
  f"No lock held by {holder} for transaction with key {key}"
@@ -61,10 +61,16 @@ class LockManager(Protocol):
61
61
  """
62
62
  Releases the lock on the corresponding transaction record.
63
63
 
64
+ If the lock no longer exists (e.g. it expired or was already released),
65
+ this method is a no-op.
66
+
64
67
  Args:
65
68
  key: Unique identifier for the transaction record.
66
69
  holder: Unique identifier for the holder of the lock. Must match the
67
70
  holder provided when acquiring the lock.
71
+
72
+ Raises:
73
+ ValueError: If the lock is held by a different holder.
68
74
  """
69
75
  ...
70
76
 
@@ -142,6 +142,8 @@ These validations exist to prevent git argument injection. Do not bypass them wh
142
142
 
143
143
  **Automatic dependency installation:** By default, `WorkspaceResolvingEngineCommandStarter` does not install dependencies before starting a flow run. When no explicit command is passed and `PREFECT_RUNNER_AUTO_INSTALL_DEPENDENCIES` is true, it auto-selects `uv run --no-default-groups --project <project_root>` with the worker-supplied workspace bootstrap — but only when all three conditions hold: `pyproject.toml` exists at `project_root`, the `project.dependencies` list includes `prefect`, and `uv` is found via the workspace's `PATH` env var (not the system PATH). The bootstrap uses the prepared entrypoint with `prefect.flow_engine` when that module exposes its executable `_main`; older selected runtimes fall back to `prefect.engine` with `PREFECT__FLOW_ENTRYPOINT`, preserving the prepared workspace. If the setting is false or any condition fails, the command falls back to `None`. Explicit commands always take precedence.
144
144
 
145
+ **Version skew in the runtime bootstrap:** `_workspace_runtime_bootstrap.py` runs inside the flow's selected runtime, which may ship an older Prefect than the worker. Do not make it depend on Prefect internals newer than that runtime; it keeps local copies instead. Its flow hook argument resolution is one such copy (see the hook-parity contract in `src/prefect/AGENTS.md`).
146
+
145
147
  ## Reference
146
148
 
147
149
  Full refactor design and rationale: plans/completed/2026-02-18-runner-refactor.md
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from typing import TYPE_CHECKING, Any, Awaitable, Callable, Protocol
4
4
 
5
5
  from prefect._internal.concurrency.api import create_call, from_async
6
- from prefect._internal.engine import get_hook_name
6
+ from prefect._internal.engine import get_hook_name, resolve_flow_hook_arguments
7
7
  from prefect.logging.loggers import flow_run_logger
8
8
  from prefect.utilities.asyncutils import is_async_fn
9
9
 
@@ -35,12 +35,11 @@ async def _run_hooks(
35
35
  hook_name,
36
36
  state.name,
37
37
  )
38
+ args, kwargs = resolve_flow_hook_arguments(hook, flow, flow_run, state)
38
39
  if is_async_fn(hook):
39
- await hook(flow=flow, flow_run=flow_run, state=state)
40
+ await hook(*args, **kwargs)
40
41
  else:
41
- await from_async.call_in_new_thread(
42
- create_call(hook, flow=flow, flow_run=flow_run, state=state)
43
- )
42
+ await from_async.call_in_new_thread(create_call(hook, *args, **kwargs))
44
43
  except Exception:
45
44
  logger.error(
46
45
  "An error was encountered while running hook %r",
@@ -109,6 +109,52 @@ async def _load_flow(manifest: dict[str, Any]) -> Flow[Any, Any]:
109
109
  return await _run_sync(load_function_and_convert_to_flow, entrypoint)
110
110
 
111
111
 
112
+ def _flow_hook_arguments(
113
+ hook: Callable[..., Any],
114
+ flow: Flow[Any, Any],
115
+ flow_run: FlowRun,
116
+ state: State,
117
+ ) -> tuple[tuple[Any, ...], dict[str, Any]]:
118
+ # Same rule as `prefect._internal.engine.resolve_flow_hook_arguments`. This
119
+ # module runs with the flow's runtime, which may have an older Prefect
120
+ # without that function, so it keeps its own copy.
121
+ try:
122
+ signature = inspect.signature(hook)
123
+ except (TypeError, ValueError):
124
+ return (flow, flow_run, state), {}
125
+
126
+ def binds(*args: Any, **kwargs: Any) -> bool:
127
+ try:
128
+ signature.bind(*args, **kwargs)
129
+ except TypeError:
130
+ return False
131
+ return True
132
+
133
+ named = (inspect.Parameter.POSITIONAL_OR_KEYWORD, inspect.Parameter.KEYWORD_ONLY)
134
+ for flow_run_name in ("flow_run", "run"):
135
+ kwargs = {"flow": flow, flow_run_name: flow_run, "state": state}
136
+ declared = all(
137
+ name in signature.parameters and signature.parameters[name].kind in named
138
+ for name in kwargs
139
+ )
140
+ if declared and binds(**kwargs):
141
+ return (), kwargs
142
+
143
+ if binds(flow, flow_run, state):
144
+ return (flow, flow_run, state), {}
145
+
146
+ kwargs = {"flow": flow, "flow_run": flow_run, "state": state}
147
+ if binds(**kwargs):
148
+ return (), kwargs
149
+
150
+ hook_name = getattr(hook, "__name__", type(hook).__name__)
151
+ raise TypeError(
152
+ f"Hook {hook_name!r} must accept the flow, the flow run and the state as"
153
+ " three positional arguments or as parameters named `flow`, `flow_run`"
154
+ " (or `run`) and `state`"
155
+ )
156
+
157
+
112
158
  async def _run_hooks(
113
159
  hooks: list[Callable[..., Any]],
114
160
  flow_run: FlowRun,
@@ -121,14 +167,8 @@ async def _run_hooks(
121
167
  for hook in hooks:
122
168
  hook_name = getattr(hook, "__name__", type(hook).__name__)
123
169
  try:
124
- result = await _run_sync(
125
- functools.partial(
126
- hook,
127
- flow=flow,
128
- flow_run=flow_run,
129
- state=state,
130
- )
131
- )
170
+ args, kwargs = _flow_hook_arguments(hook, flow, flow_run, state)
171
+ result = await _run_sync(functools.partial(hook, *args, **kwargs))
132
172
  if inspect.isawaitable(result):
133
173
  await result
134
174
  except Exception:
@@ -459,12 +459,27 @@ class GitRepository:
459
459
  # read-only attribute first to avoid `[WinError 5] Access is denied`.
460
460
  _clear_read_only_attributes(git_dir)
461
461
 
462
- # Sparsely checkout the repository if directories are specified and the repo is not in sparse-checkout mode already
463
- if self._directories and not await self.is_sparsely_checked_out():
462
+ # Make the checkout match the configured directories. The destination
463
+ # can be reused by runs whose `directories` differ (a redeploy that
464
+ # changed the list, or deployments sharing a working directory), so
465
+ # an existing sparse checkout only grows: narrowing it would remove
466
+ # files that another run may still be using.
467
+ is_sparse = await self.is_sparsely_checked_out()
468
+ if self._directories:
464
469
  await run_process(
465
- ["git", "sparse-checkout", "set", "--", *self._directories],
470
+ [
471
+ "git",
472
+ "sparse-checkout",
473
+ "add" if is_sparse else "set",
474
+ "--",
475
+ *self._directories,
476
+ ],
466
477
  cwd=self.destination,
467
478
  )
479
+ elif is_sparse:
480
+ await run_process(
481
+ ["git", "sparse-checkout", "disable"], cwd=self.destination
482
+ )
468
483
 
469
484
  self._logger.debug("Pulling latest changes from origin/%s", self._branch)
470
485
  # Update the existing repository
@@ -440,6 +440,9 @@ async def update_deployment(
440
440
  # Phase 2: Apply the actual updates. Renamed schedules use
441
441
  # their row ID (slug is now NULL); others use slug as before.
442
442
  for schedule in schedules_to_patch:
443
+ # A schedule sent with the deployment carries its full overrides, and
444
+ # `prefect deploy` leaves `parameters` out when there are none
445
+ schedule = schedule.model_copy(update={"parameters": schedule.parameters})
443
446
  if schedule.replaces:
444
447
  await models.deployments.update_deployment_schedule(
445
448
  session=session,
@@ -581,7 +581,9 @@ async def resume_flow_run(
581
581
  flow_run_input=schemas.core.FlowRunInput(
582
582
  flow_run_id=flow_run_id,
583
583
  key=keyset["response"],
584
- value=orjson.dumps(run_input).decode("utf-8"),
584
+ value=pydantic_core.to_json(run_input, inf_nan_mode="null").decode(
585
+ "utf-8"
586
+ ),
585
587
  ),
586
588
  )
587
589
 
@@ -367,9 +367,12 @@ def is_client_retryable_exception(exc: Exception) -> bool:
367
367
  exc,
368
368
  (
369
369
  sqlalchemy.exc.DBAPIError,
370
+ sqlalchemy.exc.TimeoutError,
371
+ TimeoutError,
370
372
  asyncpg.exceptions.QueryCanceledError,
371
373
  asyncpg.exceptions.ConnectionDoesNotExistError,
372
374
  asyncpg.exceptions.CannotConnectNowError,
375
+ asyncpg.exceptions.PostgresConnectionError,
373
376
  sqlalchemy.exc.InvalidRequestError,
374
377
  sqlalchemy.orm.exc.DetachedInstanceError,
375
378
  ),
@@ -201,24 +201,31 @@ async def read_work_queue_runs(
201
201
  )
202
202
  )
203
203
 
204
- await schedule_readiness_update(
205
- docket,
206
- mark_work_queues_ready,
207
- key=f"mark_work_queues_ready:{work_queue_id}",
208
- becoming_ready=work_queue_becoming_ready,
209
- )(
210
- polled_work_queue_ids=[work_queue_id],
211
- ready_work_queue_ids=[work_queue_id] if work_queue_becoming_ready else [],
212
- )
204
+ # Record every poll before background-task deduplication can discard it.
205
+ async with db.session_context(begin_transaction=True) as session:
206
+ await models.work_queues.record_work_queue_polls(
207
+ session=session,
208
+ polled_work_queue_ids=[work_queue_id],
209
+ ready_work_queue_ids=[],
210
+ )
211
+
212
+ if work_queue_becoming_ready:
213
+ await schedule_readiness_update(
214
+ docket,
215
+ mark_work_queues_ready,
216
+ key=f"mark_work_queues_ready:{work_queue_id}",
217
+ becoming_ready=True,
218
+ )(
219
+ polled_work_queue_ids=[],
220
+ ready_work_queue_ids=[work_queue_id],
221
+ )
213
222
 
214
223
  await schedule_readiness_update(
215
224
  docket,
216
225
  mark_deployments_ready,
217
226
  key=f"mark_deployments_ready:work_queue:{work_queue_id}",
218
227
  becoming_ready=deployments_becoming_ready,
219
- )(
220
- work_queue_ids=[work_queue_id],
221
- )
228
+ )(work_queue_ids=[work_queue_id], skip_recently_polled=True)
222
229
 
223
230
  return flow_runs
224
231
 
@@ -897,32 +897,35 @@ async def get_scheduled_flow_runs(
897
897
  limit=limit,
898
898
  )
899
899
 
900
+ polled_queue_ids = [wq.id for wq in work_queues]
901
+ # Record every poll before background-task deduplication can discard it.
902
+ async with db.session_context(begin_transaction=True) as session:
903
+ await models.work_queues.record_work_queue_polls(
904
+ session=session,
905
+ polled_work_queue_ids=polled_queue_ids,
906
+ ready_work_queue_ids=[],
907
+ )
908
+
900
909
  # Filtered polls only carry their own queues, so scope their keys to those
901
910
  # queues; otherwise a poll for one subset could replace another's update.
902
911
  key_scope = f"work_pool:{work_pool_id}"
903
912
  if work_queue_ids is not None:
904
913
  key_scope += ":" + ",".join(sorted(str(id) for id in set(work_queue_ids)))
905
914
 
906
- await schedule_readiness_update(
907
- docket,
908
- mark_work_queues_ready,
909
- key=f"mark_work_queues_ready:{key_scope}",
910
- becoming_ready=bool(ready_work_queue_ids),
911
- )(
912
- polled_work_queue_ids=[
913
- wq.id for wq in work_queues if wq.status != WorkQueueStatus.NOT_READY
914
- ],
915
- ready_work_queue_ids=ready_work_queue_ids,
916
- )
915
+ if ready_work_queue_ids:
916
+ await schedule_readiness_update(
917
+ docket,
918
+ mark_work_queues_ready,
919
+ key=f"mark_work_queues_ready:{key_scope}",
920
+ becoming_ready=True,
921
+ )(polled_work_queue_ids=[], ready_work_queue_ids=ready_work_queue_ids)
917
922
 
918
923
  await schedule_readiness_update(
919
924
  docket,
920
925
  mark_deployments_ready,
921
926
  key=f"mark_deployments_ready:{key_scope}",
922
927
  becoming_ready=deployments_becoming_ready,
923
- )(
924
- work_queue_ids=[wq.id for wq in work_queues],
925
- )
928
+ )(work_queue_ids=polled_queue_ids, skip_recently_polled=True)
926
929
 
927
930
  return queue_response
928
931