prefect-client 3.8.2.dev6__tar.gz → 3.8.3.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 (452) hide show
  1. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/PKG-INFO +2 -2
  2. prefect_client-3.8.3.dev2/src/prefect/_build_info.py +5 -0
  3. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/concurrency/services.py +13 -2
  4. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/_asyncio.py +26 -0
  5. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/services.py +84 -2
  6. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/flows.py +1 -0
  7. prefect_client-3.8.3.dev2/src/prefect/runner/_uv_command.py +90 -0
  8. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_workspace_starter.py +7 -66
  9. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/process.py +44 -5
  10. prefect_client-3.8.2.dev6/src/prefect/_build_info.py +0 -5
  11. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/.gitignore +0 -0
  12. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/LICENSE +0 -0
  13. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/README.md +0 -0
  14. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/hatch_build.py +0 -0
  15. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/pyproject.toml +0 -0
  16. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/.prefectignore +0 -0
  17. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/AGENTS.md +0 -0
  18. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/__init__.py +0 -0
  19. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/__main__.py +0 -0
  20. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/__init__.py +0 -0
  21. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/_launchers.py +0 -0
  22. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/bundles/__init__.py +0 -0
  23. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/bundles/execute.py +0 -0
  24. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/plugins/__init__.py +0 -0
  25. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/plugins/apply.py +0 -0
  26. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  27. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/plugins/manager.py +0 -0
  28. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/plugins/spec.py +0 -0
  29. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/sla/__init__.py +0 -0
  30. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/sla/client.py +0 -0
  31. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_experimental/sla/objects.py +0 -0
  32. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_flow_run_suspension.py +0 -0
  33. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/__init__.py +0 -0
  34. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/_logging.py +0 -0
  35. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/analytics/__init__.py +0 -0
  36. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  37. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/analytics/client.py +0 -0
  38. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/analytics/device_id.py +0 -0
  39. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/analytics/emit.py +0 -0
  40. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/analytics/enabled.py +0 -0
  41. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/analytics/events.py +0 -0
  42. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/analytics/milestones.py +0 -0
  43. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/analytics/notice.py +0 -0
  44. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/analytics/service.py +0 -0
  45. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/ast_utils.py +0 -0
  46. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/buildx.py +0 -0
  47. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/compatibility/__init__.py +0 -0
  48. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  49. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/compatibility/backports.py +0 -0
  50. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/compatibility/blocks.py +0 -0
  51. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  52. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  53. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/compatibility/migration.py +0 -0
  54. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/compatibility/starlette.py +0 -0
  55. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/concurrency/__init__.py +0 -0
  56. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/concurrency/api.py +0 -0
  57. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/concurrency/calls.py +0 -0
  58. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  59. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  60. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/concurrency/inspection.py +0 -0
  61. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/concurrency/primitives.py +0 -0
  62. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/concurrency/threads.py +0 -0
  63. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/concurrency/waiters.py +0 -0
  64. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/control_listener.py +0 -0
  65. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/deprecated.py +0 -0
  66. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/engine.py +0 -0
  67. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/git.py +0 -0
  68. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  69. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/installation.py +0 -0
  70. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/integrations.py +0 -0
  71. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/launchers.py +0 -0
  72. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/lazy.py +0 -0
  73. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/metrics.py +0 -0
  74. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/observability.py +0 -0
  75. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/observers.py +0 -0
  76. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/plugins/__init__.py +0 -0
  77. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/plugins/apply.py +0 -0
  78. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/plugins/collections.py +0 -0
  79. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  80. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/plugins/manager.py +0 -0
  81. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/plugins/spec.py +0 -0
  82. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/plugins/startup.py +0 -0
  83. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/pydantic/__init__.py +0 -0
  84. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/pydantic/schemas.py +0 -0
  85. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  86. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  87. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  88. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/pytz.py +0 -0
  89. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/result_records.py +0 -0
  90. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/retries.py +0 -0
  91. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/schema.py +0 -0
  92. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/schemas/__init__.py +0 -0
  93. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/schemas/_registry.py +0 -0
  94. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/schemas/bases.py +0 -0
  95. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/schemas/fields.py +0 -0
  96. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/schemas/serializers.py +0 -0
  97. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/schemas/validators.py +0 -0
  98. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  99. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/states.py +0 -0
  100. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/testing.py +0 -0
  101. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/urls.py +0 -0
  102. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/uuid7.py +0 -0
  103. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/version_checking.py +0 -0
  104. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/versioning.py +0 -0
  105. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/waiters.py +0 -0
  106. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_internal/websockets.py +0 -0
  107. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/__init__.py +0 -0
  108. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/fetcher.py +0 -0
  109. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/generator.py +0 -0
  110. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/models.py +0 -0
  111. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/naming.py +0 -0
  112. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/renderer.py +0 -0
  113. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/schema_converter.py +0 -0
  114. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/templates/__init__.py +0 -0
  115. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  116. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/types.py +0 -0
  117. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_sdk/unions.py +0 -0
  118. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_vendor/croniter/__init__.py +0 -0
  119. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/_vendor/croniter/croniter.py +0 -0
  120. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/agent.py +0 -0
  121. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/analytics/__init__.py +0 -0
  122. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/artifacts.py +0 -0
  123. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/assets/__init__.py +0 -0
  124. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/assets/core.py +0 -0
  125. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/assets/materialize.py +0 -0
  126. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/automations.py +0 -0
  127. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/blocks/AGENTS.md +0 -0
  128. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/blocks/__init__.py +0 -0
  129. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/blocks/abstract.py +0 -0
  130. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/blocks/core.py +0 -0
  131. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/blocks/fields.py +0 -0
  132. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/blocks/notifications.py +0 -0
  133. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/blocks/redis.py +0 -0
  134. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/blocks/system.py +0 -0
  135. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/blocks/webhook.py +0 -0
  136. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/bundles/__init__.py +0 -0
  137. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/bundles/_file_collector.py +0 -0
  138. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/bundles/_ignore_filter.py +0 -0
  139. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/bundles/_path_resolver.py +0 -0
  140. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/bundles/_zip_builder.py +0 -0
  141. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/bundles/_zip_extractor.py +0 -0
  142. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/bundles/execute.py +0 -0
  143. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/cache_policies.py +0 -0
  144. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/AGENTS.md +0 -0
  145. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/__init__.py +0 -0
  146. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/attribution.py +0 -0
  147. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/base.py +0 -0
  148. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/cloud.py +0 -0
  149. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/collections.py +0 -0
  150. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/constants.py +0 -0
  151. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/__init__.py +0 -0
  152. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  153. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  154. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  155. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_automations/client.py +0 -0
  156. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  157. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  158. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  159. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  160. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  161. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  162. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  163. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  164. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  165. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  166. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  167. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_events/client.py +0 -0
  168. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  169. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  170. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  171. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_flows/client.py +0 -0
  172. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  173. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_logs/client.py +0 -0
  174. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  175. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_variables/client.py +0 -0
  176. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  177. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  178. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/base.py +0 -0
  179. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/orchestration/routes.py +0 -0
  180. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/schemas/__init__.py +0 -0
  181. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/schemas/actions.py +0 -0
  182. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/schemas/events.py +0 -0
  183. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/schemas/filters.py +0 -0
  184. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/schemas/objects.py +0 -0
  185. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/schemas/responses.py +0 -0
  186. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/schemas/schedules.py +0 -0
  187. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/schemas/sorting.py +0 -0
  188. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/schemas/worker_channel.py +0 -0
  189. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/subscriptions.py +0 -0
  190. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/types/__init__.py +0 -0
  191. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  192. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/client/utilities.py +0 -0
  193. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/AGENTS.md +0 -0
  194. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/__init__.py +0 -0
  195. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/_events.py +0 -0
  196. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/_leases.py +0 -0
  197. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/_sync.py +0 -0
  198. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/asyncio.py +0 -0
  199. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/context.py +0 -0
  200. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/sync.py +0 -0
  201. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/v1/__init__.py +0 -0
  202. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  203. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/v1/_events.py +0 -0
  204. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/v1/asyncio.py +0 -0
  205. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/v1/context.py +0 -0
  206. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/v1/services.py +0 -0
  207. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/concurrency/v1/sync.py +0 -0
  208. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/context.py +0 -0
  209. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/AGENTS.md +0 -0
  210. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/__init__.py +0 -0
  211. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/base.py +0 -0
  212. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/deployments.py +0 -0
  213. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/flow_runs.py +0 -0
  214. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/runner.py +0 -0
  215. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/schedules.py +0 -0
  216. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/steps/__init__.py +0 -0
  217. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/steps/core.py +0 -0
  218. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/steps/pull.py +0 -0
  219. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/deployments/steps/utility.py +0 -0
  220. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/docker/__init__.py +0 -0
  221. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/docker/_buildx.py +0 -0
  222. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/docker/docker_image.py +0 -0
  223. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/engine.py +0 -0
  224. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/AGENTS.md +0 -0
  225. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/__init__.py +0 -0
  226. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/actions.py +0 -0
  227. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/clients.py +0 -0
  228. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/filters.py +0 -0
  229. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/related.py +0 -0
  230. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/schemas/__init__.py +0 -0
  231. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/schemas/automations.py +0 -0
  232. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  233. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/schemas/events.py +0 -0
  234. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/schemas/labelling.py +0 -0
  235. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/subscribers.py +0 -0
  236. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/utilities.py +0 -0
  237. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/events/worker.py +0 -0
  238. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/exceptions.py +0 -0
  239. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/filesystems.py +0 -0
  240. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/flow_engine.py +0 -0
  241. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/flow_runs.py +0 -0
  242. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/futures.py +0 -0
  243. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/infrastructure/__init__.py +0 -0
  244. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/infrastructure/base.py +0 -0
  245. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  246. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  247. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  248. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  249. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  250. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  251. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/input/__init__.py +0 -0
  252. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/input/actions.py +0 -0
  253. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/input/run_input.py +0 -0
  254. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/locking/__init__.py +0 -0
  255. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/locking/_filelock.py +0 -0
  256. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/locking/filesystem.py +0 -0
  257. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/locking/memory.py +0 -0
  258. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/locking/protocol.py +0 -0
  259. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/logging/AGENTS.md +0 -0
  260. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/logging/__init__.py +0 -0
  261. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/logging/clients.py +0 -0
  262. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/logging/configuration.py +0 -0
  263. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/logging/filters.py +0 -0
  264. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/logging/formatters.py +0 -0
  265. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/logging/handlers.py +0 -0
  266. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/logging/highlighters.py +0 -0
  267. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/logging/loggers.py +0 -0
  268. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/logging/logging.yml +0 -0
  269. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/main.py +0 -0
  270. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/plugins.py +0 -0
  271. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/py.typed +0 -0
  272. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/results.py +0 -0
  273. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/AGENTS.md +0 -0
  274. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/__init__.py +0 -0
  275. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_cancel_finalizer.py +0 -0
  276. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_cancellation_manager.py +0 -0
  277. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_control_channel.py +0 -0
  278. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_deployment_registry.py +0 -0
  279. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_event_emitter.py +0 -0
  280. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_flow_resolver.py +0 -0
  281. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_flow_run_executor.py +0 -0
  282. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_hook_runner.py +0 -0
  283. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_limit_manager.py +0 -0
  284. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_process_manager.py +0 -0
  285. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  286. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_starter_bundle.py +0 -0
  287. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_starter_direct.py +0 -0
  288. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_starter_engine.py +0 -0
  289. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_state_proposer.py +0 -0
  290. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/_workspace_resolver.py +0 -0
  291. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/runner.py +0 -0
  292. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/server.py +0 -0
  293. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runner/storage.py +0 -0
  294. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runtime/__init__.py +0 -0
  295. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runtime/deployment.py +0 -0
  296. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runtime/flow_run.py +0 -0
  297. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/runtime/task_run.py +0 -0
  298. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/schedules.py +0 -0
  299. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/serializers.py +0 -0
  300. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/__init__.py +0 -0
  301. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/_ui_static.py +0 -0
  302. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/admin.py +0 -0
  303. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/artifacts.py +0 -0
  304. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/automations.py +0 -0
  305. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/background_workers.py +0 -0
  306. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/block_capabilities.py +0 -0
  307. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/block_documents.py +0 -0
  308. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/block_schemas.py +0 -0
  309. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/block_types.py +0 -0
  310. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/clients.py +0 -0
  311. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/collections.py +0 -0
  312. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  313. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/concurrency_limits.py +0 -0
  314. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  315. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/csrf_token.py +0 -0
  316. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/dependencies.py +0 -0
  317. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/deployments.py +0 -0
  318. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/events.py +0 -0
  319. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/flow_run_states.py +0 -0
  320. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/flow_runs.py +0 -0
  321. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/flows.py +0 -0
  322. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/logs.py +0 -0
  323. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/middleware.py +0 -0
  324. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/root.py +0 -0
  325. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/run_history.py +0 -0
  326. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/saved_searches.py +0 -0
  327. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/server.py +0 -0
  328. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  329. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/task_run_states.py +0 -0
  330. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/task_runs.py +0 -0
  331. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/task_workers.py +0 -0
  332. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/templates.py +0 -0
  333. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/ui/__init__.py +0 -0
  334. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/ui/flow_runs.py +0 -0
  335. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/ui/flows.py +0 -0
  336. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/ui/schemas.py +0 -0
  337. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/ui/task_runs.py +0 -0
  338. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/validation.py +0 -0
  339. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/variables.py +0 -0
  340. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/work_queues.py +0 -0
  341. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/server/api/workers.py +0 -0
  342. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/AGENTS.md +0 -0
  343. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/__init__.py +0 -0
  344. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/_types.py +0 -0
  345. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/base.py +0 -0
  346. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/constants.py +0 -0
  347. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/context.py +0 -0
  348. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/legacy.py +0 -0
  349. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/__init__.py +0 -0
  350. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/_defaults.py +0 -0
  351. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/api.py +0 -0
  352. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/cli.py +0 -0
  353. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/client.py +0 -0
  354. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/cloud.py +0 -0
  355. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/deployments.py +0 -0
  356. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/events.py +0 -0
  357. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/experiments.py +0 -0
  358. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/flows.py +0 -0
  359. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/internal.py +0 -0
  360. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/logging.py +0 -0
  361. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/plugins.py +0 -0
  362. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/results.py +0 -0
  363. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/root.py +0 -0
  364. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/runner.py +0 -0
  365. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/__init__.py +0 -0
  366. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/api.py +0 -0
  367. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/concurrency.py +0 -0
  368. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/database.py +0 -0
  369. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/deployments.py +0 -0
  370. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/docket.py +0 -0
  371. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/ephemeral.py +0 -0
  372. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/events.py +0 -0
  373. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  374. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/logs.py +0 -0
  375. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/root.py +0 -0
  376. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/services.py +0 -0
  377. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/tasks.py +0 -0
  378. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/ui.py +0 -0
  379. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/server/worker_channel.py +0 -0
  380. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/tasks.py +0 -0
  381. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/telemetry.py +0 -0
  382. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/testing.py +0 -0
  383. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/models/worker.py +0 -0
  384. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/profiles.py +0 -0
  385. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/profiles.toml +0 -0
  386. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/settings/sources.py +0 -0
  387. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/states.py +0 -0
  388. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/task_engine.py +0 -0
  389. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/task_runners.py +0 -0
  390. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/task_runs.py +0 -0
  391. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/task_worker.py +0 -0
  392. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/tasks.py +0 -0
  393. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/telemetry/__init__.py +0 -0
  394. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/telemetry/run_telemetry.py +0 -0
  395. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/transactions.py +0 -0
  396. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/types/__init__.py +0 -0
  397. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/types/_concurrency.py +0 -0
  398. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/types/_datetime.py +0 -0
  399. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/types/entrypoint.py +0 -0
  400. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/types/names.py +0 -0
  401. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/AGENTS.md +0 -0
  402. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/__init__.py +0 -0
  403. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/annotations.py +0 -0
  404. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  405. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  406. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/callables/AGENTS.md +0 -0
  407. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/callables/__init__.py +0 -0
  408. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/collections.py +0 -0
  409. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/compat.py +0 -0
  410. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/context.py +0 -0
  411. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/dispatch.py +0 -0
  412. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/dockerutils.py +0 -0
  413. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/engine/AGENTS.md +0 -0
  414. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/engine/__init__.py +0 -0
  415. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  416. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/filesystem/__init__.py +0 -0
  417. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/generics.py +0 -0
  418. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/hashing.py +0 -0
  419. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/importtools.py +0 -0
  420. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/math.py +0 -0
  421. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/names.py +0 -0
  422. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  423. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/processutils/__init__.py +0 -0
  424. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/pydantic.py +0 -0
  425. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/render_swagger.py +0 -0
  426. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  427. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  428. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  429. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/schema_tools/validation.py +0 -0
  430. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/services.py +0 -0
  431. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/slugify.py +0 -0
  432. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/templating/AGENTS.md +0 -0
  433. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/templating/__init__.py +0 -0
  434. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/text.py +0 -0
  435. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/timeout.py +0 -0
  436. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/urls.py +0 -0
  437. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/utilities/visualization.py +0 -0
  438. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/variables.py +0 -0
  439. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/AGENTS.md +0 -0
  440. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/__init__.py +0 -0
  441. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/_cleanup.py +0 -0
  442. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/_cleanup_handlers.py +0 -0
  443. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  444. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  445. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/_worker_channel/_state.py +0 -0
  446. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  447. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  448. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/base.py +0 -0
  449. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/block.py +0 -0
  450. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/cloud.py +0 -0
  451. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/server.py +0 -0
  452. {prefect_client-3.8.2.dev6 → prefect_client-3.8.3.dev2}/src/prefect/workers/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: prefect-client
3
- Version: 3.8.2.dev6
3
+ Version: 3.8.3.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
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.8.3.dev2"
3
+ __build_date__ = "2026-08-12 08:33:16.979241+00:00"
4
+ __git_commit__ = "20bc90f1ab99db9c1c236840f12576b2faea6a14"
5
+ __dirty__ = False
@@ -408,10 +408,21 @@ class FutureQueueService(
408
408
  # If the request to the increment endpoint fails in a non-standard
409
409
  # way, we need to set the future's result so it'll be re-raised in
410
410
  # the context of the caller.
411
- future.set_exception(exc)
411
+ if future.set_running_or_notify_cancel():
412
+ future.set_exception(exc)
412
413
  raise exc
413
414
  else:
414
- future.set_result(response)
415
+ # Transitioning the future to running before setting its result closes
416
+ # the window where the caller cancels it while `acquire` is in flight:
417
+ # after this point `cancel()` fails, and if the caller got there first
418
+ # the acquired resource is nobody's and must be discarded.
419
+ if future.set_running_or_notify_cancel():
420
+ future.set_result(response)
421
+ else:
422
+ await self._discard(response)
423
+
424
+ async def _discard(self, response: R) -> None:
425
+ """Dispose of a result whose caller is no longer waiting for it."""
415
426
 
416
427
  @abc.abstractmethod
417
428
  async def acquire(self, *args: Unpack[Ts]) -> R:
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import asyncio
4
+ import concurrent.futures
4
5
  import logging
5
6
  from contextlib import asynccontextmanager
6
7
  from typing import TYPE_CHECKING, AsyncGenerator, Literal, Optional
@@ -150,6 +151,9 @@ async def aacquire_concurrency_slots_with_lease(
150
151
  )
151
152
  try:
152
153
  response = await asyncio.wrap_future(future)
154
+ except asyncio.CancelledError:
155
+ _release_lease_when_granted(service, future)
156
+ raise
153
157
  except TimeoutError as timeout:
154
158
  raise AcquireConcurrencySlotTimeoutError(
155
159
  f"Attempt to acquire concurrency slots timed out after {timeout_seconds} second(s)"
@@ -225,6 +229,28 @@ def _discard_cleanup_lease(lease_id: UUID) -> None:
225
229
  ctx.cleanup_lease_ids.remove(lease_id)
226
230
 
227
231
 
232
+ def _release_lease_when_granted(
233
+ service: ConcurrencySlotAcquisitionWithLeaseService,
234
+ future: "concurrent.futures.Future[httpx.Response]",
235
+ ) -> None:
236
+ """Release the lease for an acquisition whose caller has been cancelled.
237
+
238
+ The acquisition may still be granted after the caller is gone, and the lease
239
+ id never reaches the `ConcurrencyContext`, so the slots would stay occupied
240
+ until the lease expires. The cancelled caller cannot do the release itself, so
241
+ the service that acquired the slots is asked to release them.
242
+ """
243
+
244
+ def _release(completed: "concurrent.futures.Future[httpx.Response]") -> None:
245
+ if completed.cancelled() or completed.exception() is not None:
246
+ # Nothing was granted, so there is nothing to release.
247
+ return
248
+
249
+ service.release_orphaned_lease(completed.result())
250
+
251
+ future.add_done_callback(_release)
252
+
253
+
228
254
  def _response_to_minimal_concurrency_limit_response(
229
255
  response: httpx.Response,
230
256
  ) -> list[MinimalConcurrencyLimitResponse]:
@@ -1,10 +1,11 @@
1
1
  import asyncio
2
+ import concurrent.futures
2
3
  import json
3
4
  from collections.abc import AsyncGenerator
4
5
  from contextlib import asynccontextmanager
5
6
  from threading import Lock
6
7
  from typing import TYPE_CHECKING, Literal, Optional
7
- from uuid import uuid4
8
+ from uuid import UUID, uuid4
8
9
 
9
10
  import cachetools
10
11
  import httpx
@@ -104,12 +105,25 @@ class ConcurrencySlotAcquisitionWithLeaseService(
104
105
  super().__init__(concurrency_limit_names)
105
106
  self._client: PrefectClient
106
107
  self.concurrency_limit_names: list[str] = sorted(list(concurrency_limit_names))
108
+ self._pending_releases: set[concurrent.futures.Future[None]] = set()
107
109
 
108
110
  @asynccontextmanager
109
111
  async def _lifespan(self) -> AsyncGenerator[None, None]:
110
112
  async with get_client() as client:
111
113
  self._client = client
112
- yield
114
+ try:
115
+ yield
116
+ finally:
117
+ # The client closes when this exits, so releases scheduled by
118
+ # cancelled callers have to finish first or their slots leak.
119
+ if self._pending_releases:
120
+ await asyncio.gather(
121
+ *(
122
+ asyncio.wrap_future(release)
123
+ for release in tuple(self._pending_releases)
124
+ ),
125
+ return_exceptions=True,
126
+ )
113
127
 
114
128
  async def acquire(
115
129
  self,
@@ -185,6 +199,74 @@ class ConcurrencySlotAcquisitionWithLeaseService(
185
199
  if max_retries is not None:
186
200
  max_retries -= 1
187
201
 
202
+ async def _discard(self, response: httpx.Response) -> None:
203
+ """Release a lease granted to a caller that was cancelled while waiting.
204
+
205
+ Without this the slots stay occupied until the lease expires, because the
206
+ caller never learns the lease id and so cannot record it for cleanup.
207
+ """
208
+ lease_id = self._lease_id_from_response(response)
209
+ if lease_id is None:
210
+ return
211
+
212
+ try:
213
+ await self._client.release_concurrency_slots_with_lease(lease_id=lease_id)
214
+ except Exception:
215
+ logger.warning(
216
+ f"Failed to release concurrency lease {lease_id} for "
217
+ f"{self.concurrency_limit_names} after the acquiring caller was cancelled",
218
+ exc_info=True,
219
+ )
220
+
221
+ def release_orphaned_lease(
222
+ self, response: httpx.Response
223
+ ) -> "concurrent.futures.Future[None]":
224
+ """Release a lease that was delivered to a caller which is already gone.
225
+
226
+ The release is scheduled on the service's own loop so it reuses the client
227
+ that acquired the slots, keeping acquisition and cleanup on the same API, and
228
+ is tracked so that draining the service waits for it.
229
+ """
230
+ with self._lock:
231
+ loop = self._loop
232
+ if self._stopped or loop is None or loop.is_closed():
233
+ logger.warning(
234
+ f"Unable to release concurrency lease for {self.concurrency_limit_names} "
235
+ "after the acquiring caller was cancelled: the acquisition service is "
236
+ "no longer running. The slots remain occupied until the lease expires."
237
+ )
238
+ stopped: concurrent.futures.Future[None] = concurrent.futures.Future()
239
+ stopped.set_result(None)
240
+ return stopped
241
+
242
+ # Registering under the lock `_stop` uses keeps the service from
243
+ # finishing its lifespan, and closing its client, before this release.
244
+ release = asyncio.run_coroutine_threadsafe(self._discard(response), loop)
245
+ self._pending_releases.add(release)
246
+
247
+ release.add_done_callback(self._pending_releases.discard)
248
+ return release
249
+
250
+ def _lease_id_from_response(self, response: httpx.Response) -> Optional[UUID]:
251
+ """Read the lease id out of a successful acquisition response.
252
+
253
+ Returns `None` when no slots were acquired, and logs when the response is
254
+ malformed, since that leaves a possibly active lease we cannot release.
255
+ """
256
+ try:
257
+ data = response.json()
258
+ if not data.get("limits"):
259
+ return None
260
+ return UUID(data["lease_id"])
261
+ except Exception:
262
+ logger.warning(
263
+ f"Unable to read the lease id from the acquisition response for "
264
+ f"{self.concurrency_limit_names}; if a lease was granted its slots "
265
+ "remain occupied until it expires.",
266
+ exc_info=True,
267
+ )
268
+ return None
269
+
188
270
 
189
271
  def _should_use_cache(
190
272
  names: list[str], holder: Optional["ConcurrencyLeaseHolder"]
@@ -3134,6 +3134,7 @@ async def aserve(
3134
3134
 
3135
3135
  if __name__ == "__main__":
3136
3136
  asyncio.run(main())
3137
+ ```
3137
3138
  """
3138
3139
 
3139
3140
  from prefect.runner import Runner
@@ -0,0 +1,90 @@
1
+ """Auto-`uv run` launcher command construction shared by runner and worker paths."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import shutil
6
+ from pathlib import Path
7
+ from typing import Iterable
8
+
9
+ from packaging.requirements import InvalidRequirement, Requirement
10
+ from packaging.utils import canonicalize_name
11
+
12
+ from prefect._internal.compatibility.backports import tomllib
13
+ from prefect.settings import get_current_settings
14
+ from prefect.utilities.processutils import command_to_string
15
+
16
+
17
+ def _dependencies_include_prefect(dependencies: object) -> bool:
18
+ if not isinstance(dependencies, Iterable) or isinstance(dependencies, (str, bytes)):
19
+ return False
20
+
21
+ for dependency in dependencies:
22
+ if not isinstance(dependency, str):
23
+ continue
24
+ try:
25
+ name = Requirement(dependency).name
26
+ except InvalidRequirement:
27
+ continue
28
+ if canonicalize_name(name) == "prefect":
29
+ return True
30
+ return False
31
+
32
+
33
+ def _pyproject_declares_prefect_dependency(pyproject: Path) -> bool:
34
+ try:
35
+ data = tomllib.loads(pyproject.read_text(encoding="utf-8"))
36
+ except (OSError, tomllib.TOMLDecodeError):
37
+ return False
38
+
39
+ project = data.get("project")
40
+ if not isinstance(project, dict):
41
+ return False
42
+
43
+ return _dependencies_include_prefect(project.get("dependencies"))
44
+
45
+
46
+ def uv_project_command(
47
+ project_root: Path | None,
48
+ engine_args: Iterable[str],
49
+ path: str | None = None,
50
+ auto_install_dependencies: bool | None = None,
51
+ ) -> str | None:
52
+ """Build an auto-`uv run` command for a project directory, if applicable.
53
+
54
+ Returns `None` unless dependency auto-installation is enabled, `project_root`
55
+ contains a `pyproject.toml` declaring `prefect` as a project dependency, and
56
+ `uv` is discoverable on `path` (or the current `PATH` when `path` is `None`).
57
+
58
+ `auto_install_dependencies` overrides the current setting value, for callers
59
+ that resolve the setting from a run-specific environment.
60
+ """
61
+ if auto_install_dependencies is None:
62
+ auto_install_dependencies = (
63
+ get_current_settings().runner.auto_install_dependencies
64
+ )
65
+ if not auto_install_dependencies:
66
+ return None
67
+
68
+ if project_root is None:
69
+ return None
70
+
71
+ pyproject = project_root / "pyproject.toml"
72
+ if not pyproject.is_file() or not _pyproject_declares_prefect_dependency(pyproject):
73
+ return None
74
+
75
+ uv_executable = (
76
+ shutil.which("uv", path=path) if path is not None else shutil.which("uv")
77
+ )
78
+ if uv_executable is None:
79
+ return None
80
+
81
+ return command_to_string(
82
+ [
83
+ uv_executable,
84
+ "run",
85
+ "--no-default-groups",
86
+ "--project",
87
+ str(project_root),
88
+ *engine_args,
89
+ ]
90
+ )
@@ -2,26 +2,23 @@ from __future__ import annotations
2
2
 
3
3
  import functools
4
4
  import os
5
- import shutil
6
5
  import site
7
6
  import subprocess
8
7
  import sys
9
8
  import sysconfig
10
9
  from contextlib import contextmanager
11
10
  from pathlib import Path
12
- from typing import TYPE_CHECKING, Any, Iterable, Iterator
11
+ from typing import TYPE_CHECKING, Any, Iterator
13
12
  from uuid import UUID
14
13
 
15
14
  import anyio
16
15
  import anyio.abc
17
- from packaging.requirements import InvalidRequirement, Requirement
18
- from packaging.utils import canonicalize_name
19
16
 
20
- from prefect._internal.compatibility.backports import tomllib
21
17
  from prefect.exceptions import MissingFlowError
22
18
  from prefect.flows import load_flow_from_entrypoint, load_function_and_convert_to_flow
23
19
  from prefect.runner._process_manager import ProcessHandle
24
20
  from prefect.runner._starter_engine import EngineCommandStarter
21
+ from prefect.runner._uv_command import uv_project_command
25
22
  from prefect.runner._workspace_resolver import (
26
23
  PreparedWorkspace,
27
24
  PreparedWorkspaceResult,
@@ -29,7 +26,7 @@ from prefect.runner._workspace_resolver import (
29
26
  )
30
27
  from prefect.settings import get_current_settings
31
28
  from prefect.utilities.asyncutils import run_sync_in_worker_thread
32
- from prefect.utilities.processutils import command_to_string, sanitize_subprocess_env
29
+ from prefect.utilities.processutils import sanitize_subprocess_env
33
30
 
34
31
  if TYPE_CHECKING:
35
32
  from prefect.client.schemas.objects import FlowRun
@@ -217,67 +214,11 @@ def _absolute_file_entrypoint(workspace: PreparedWorkspace) -> str:
217
214
  return f"{entrypoint_path.resolve()}:{object_name}"
218
215
 
219
216
 
220
- def _dependencies_include_prefect(dependencies: object) -> bool:
221
- if not isinstance(dependencies, Iterable) or isinstance(dependencies, (str, bytes)):
222
- return False
223
-
224
- for dependency in dependencies:
225
- if not isinstance(dependency, str):
226
- continue
227
- try:
228
- name = Requirement(dependency).name
229
- except InvalidRequirement:
230
- continue
231
- if canonicalize_name(name) == "prefect":
232
- return True
233
- return False
234
-
235
-
236
- def _pyproject_declares_prefect_dependency(pyproject: Path) -> bool:
237
- try:
238
- data = tomllib.loads(pyproject.read_text(encoding="utf-8"))
239
- except (OSError, tomllib.TOMLDecodeError):
240
- return False
241
-
242
- project = data.get("project")
243
- if not isinstance(project, dict):
244
- return False
245
-
246
- return _dependencies_include_prefect(project.get("dependencies"))
247
-
248
-
249
217
  def _uv_run_command(workspace: PreparedWorkspace) -> str | None:
250
- if not get_current_settings().runner.auto_install_dependencies:
251
- return None
252
-
253
- project_root = workspace.project_root
254
- if project_root is None:
255
- return None
256
-
257
- pyproject = project_root / "pyproject.toml"
258
- if not pyproject.is_file() or not _pyproject_declares_prefect_dependency(pyproject):
259
- return None
260
-
261
- workspace_path = workspace.environment.get("PATH")
262
- uv_executable = (
263
- shutil.which("uv", path=workspace_path)
264
- if workspace_path is not None
265
- else shutil.which("uv")
266
- )
267
- if uv_executable is None:
268
- return None
269
-
270
- return command_to_string(
271
- [
272
- uv_executable,
273
- "run",
274
- "--no-default-groups",
275
- "--project",
276
- str(project_root),
277
- "-m",
278
- "prefect.flow_engine",
279
- workspace.runtime_entrypoint,
280
- ]
218
+ return uv_project_command(
219
+ workspace.project_root,
220
+ ["-m", "prefect.flow_engine", workspace.runtime_entrypoint],
221
+ path=workspace.environment.get("PATH"),
281
222
  )
282
223
 
283
224
 
@@ -25,10 +25,11 @@ from typing import TYPE_CHECKING, Any, Optional, TypeVar
25
25
 
26
26
  import anyio
27
27
  import anyio.abc
28
- from pydantic import Field, field_validator
28
+ from pydantic import Field, PrivateAttr, TypeAdapter, ValidationError, field_validator
29
29
 
30
30
  from prefect._internal.schemas.validators import validate_working_dir
31
31
  from prefect.client.schemas.objects import Flow as APIFlow
32
+ from prefect.runner._uv_command import uv_project_command
32
33
  from prefect.runner.runner import Runner
33
34
  from prefect.states import Pending
34
35
  from prefect.utilities.processutils import command_to_string, get_sys_executable
@@ -53,6 +54,8 @@ class ProcessJobConfiguration(BaseJobConfiguration):
53
54
  stream_output: bool = Field(default=True)
54
55
  working_dir: Optional[Path] = Field(default=None)
55
56
 
57
+ _command_configured: bool = PrivateAttr(default=False)
58
+
56
59
  @field_validator("working_dir")
57
60
  @classmethod
58
61
  def validate_working_dir(cls, v: Path | str | None) -> Path | None:
@@ -69,6 +72,10 @@ class ProcessJobConfiguration(BaseJobConfiguration):
69
72
  worker_name: str | None = None,
70
73
  worker_id: "UUID | None" = None,
71
74
  ) -> None:
75
+ # The base implementation fills in `_base_flow_run_command()` when no command
76
+ # is configured, so provenance must be captured before delegating.
77
+ self._command_configured = self.command is not None
78
+
72
79
  super().prepare_for_flow_run(
73
80
  flow_run,
74
81
  deployment,
@@ -80,9 +87,9 @@ class ProcessJobConfiguration(BaseJobConfiguration):
80
87
 
81
88
  self.env: dict[str, str | None] = {**os.environ, **self.env}
82
89
  self.command: str | None = (
83
- command_to_string([get_sys_executable(), "-m", "prefect.engine"])
84
- if self.command == self._base_flow_run_command()
85
- else self.command
90
+ self.command
91
+ if self._command_configured
92
+ else command_to_string([get_sys_executable(), "-m", "prefect.engine"])
86
93
  )
87
94
 
88
95
  @staticmethod
@@ -94,6 +101,38 @@ class ProcessJobConfiguration(BaseJobConfiguration):
94
101
  """
95
102
  return "python -m prefect.engine"
96
103
 
104
+ def _resolve_command(self, working_dir: Path | str) -> str | None:
105
+ """
106
+ Use an auto-`uv run` launcher for the flow run when the working directory
107
+ is a project that declares `prefect` as a dependency and the deployment
108
+ did not configure an explicit command.
109
+ """
110
+ if self._command_configured:
111
+ return self.command
112
+
113
+ env = self.env or {}
114
+ # A run-specific setting in the environment takes precedence over the
115
+ # worker process's own setting.
116
+ auto_install = env.get("PREFECT_RUNNER_AUTO_INSTALL_DEPENDENCIES")
117
+ try:
118
+ auto_install_dependencies = (
119
+ TypeAdapter(bool).validate_python(auto_install)
120
+ if auto_install is not None
121
+ else None
122
+ )
123
+ except ValidationError:
124
+ auto_install_dependencies = None
125
+
126
+ uv_command = uv_project_command(
127
+ # `uv` resolves `--project` relative to the flow run's working
128
+ # directory, so the project root must be absolute.
129
+ Path(working_dir).resolve(),
130
+ ["-m", "prefect.engine"],
131
+ path=env.get("PATH"),
132
+ auto_install_dependencies=auto_install_dependencies,
133
+ )
134
+ return uv_command or self.command
135
+
97
136
 
98
137
  class ProcessVariables(BaseVariables):
99
138
  stream_output: bool = Field(
@@ -151,7 +190,7 @@ class ProcessWorker(
151
190
  warnings.simplefilter("ignore", DeprecationWarning)
152
191
  process = await self._runner.execute_flow_run(
153
192
  flow_run_id=flow_run.id,
154
- command=configuration.command,
193
+ command=configuration._resolve_command(working_dir),
155
194
  cwd=working_dir,
156
195
  env=configuration.env,
157
196
  stream_output=configuration.stream_output,
@@ -1,5 +0,0 @@
1
- # Generated by versioningit
2
- __version__ = "3.8.2.dev6"
3
- __build_date__ = "2026-08-07 08:27:53.656449+00:00"
4
- __git_commit__ = "eff3759c0edd62edb46e6edbe3a5e04854f5cf73"
5
- __dirty__ = False