prefect-client 3.6.23.dev3__tar.gz → 3.6.24.dev1__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 (405) hide show
  1. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/PKG-INFO +1 -1
  2. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/AGENTS.md +3 -0
  3. prefect_client-3.6.24.dev1/src/prefect/_build_info.py +5 -0
  4. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/core.py +1 -1
  5. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/_version_checking.py +6 -6
  6. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/__init__.py +77 -0
  7. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_work_pools/client.py +86 -1
  8. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/routes.py +2 -0
  9. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/objects.py +14 -0
  10. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/responses.py +64 -2
  11. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/AGENTS.md +1 -1
  12. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/_sync.py +11 -1
  13. prefect_client-3.6.24.dev1/src/prefect/deployments/AGENTS.md +39 -0
  14. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/runner.py +41 -10
  15. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/steps/utility.py +91 -17
  16. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/docker/docker_image.py +13 -1
  17. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/flow_engine.py +8 -1
  18. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/flows.py +37 -11
  19. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/futures.py +11 -1
  20. prefect_client-3.6.24.dev1/src/prefect/runner/AGENTS.md +67 -0
  21. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/runner.py +1 -1
  22. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/work_queues.py +115 -19
  23. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/workers.py +168 -16
  24. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/tasks.py +1 -1
  25. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/telemetry/_metrics.py +1 -1
  26. prefect_client-3.6.23.dev3/src/prefect/_build_info.py +0 -5
  27. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/.gitignore +0 -0
  28. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/LICENSE +0 -0
  29. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/README.md +0 -0
  30. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/pyproject.toml +0 -0
  31. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/.prefectignore +0 -0
  32. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/__init__.py +0 -0
  33. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/__main__.py +0 -0
  34. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/__init__.py +0 -0
  35. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/__init__.py +0 -0
  36. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/_file_collector.py +0 -0
  37. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/_ignore_filter.py +0 -0
  38. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/_path_resolver.py +0 -0
  39. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/_zip_builder.py +0 -0
  40. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/_zip_extractor.py +0 -0
  41. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/bundles/execute.py +0 -0
  42. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/plugins/__init__.py +0 -0
  43. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/plugins/apply.py +0 -0
  44. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  45. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/plugins/manager.py +0 -0
  46. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/plugins/spec.py +0 -0
  47. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
  48. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/sla/client.py +0 -0
  49. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
  50. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/__init__.py +0 -0
  51. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/_logging.py +0 -0
  52. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/__init__.py +0 -0
  53. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  54. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/client.py +0 -0
  55. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/device_id.py +0 -0
  56. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/emit.py +0 -0
  57. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/enabled.py +0 -0
  58. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/events.py +0 -0
  59. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/milestones.py +0 -0
  60. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/notice.py +0 -0
  61. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/analytics/service.py +0 -0
  62. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
  63. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  64. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/backports.py +0 -0
  65. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/blocks.py +0 -0
  66. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  67. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
  68. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/compatibility/starlette.py +0 -0
  69. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
  70. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
  71. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
  72. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  73. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  74. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
  75. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
  76. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/services.py +0 -0
  77. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
  78. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
  79. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/installation.py +0 -0
  80. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/integrations.py +0 -0
  81. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/lazy.py +0 -0
  82. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/observability.py +0 -0
  83. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
  84. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
  85. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  86. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  87. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  88. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/pytz.py +0 -0
  89. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/retries.py +0 -0
  90. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
  91. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
  92. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
  93. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
  94. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
  95. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  96. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/testing.py +0 -0
  97. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/urls.py +0 -0
  98. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/uuid7.py +0 -0
  99. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_internal/websockets.py +0 -0
  100. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_observers.py +0 -0
  101. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_result_records.py +0 -0
  102. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/__init__.py +0 -0
  103. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/fetcher.py +0 -0
  104. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/generator.py +0 -0
  105. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/models.py +0 -0
  106. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/naming.py +0 -0
  107. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/renderer.py +0 -0
  108. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/schema_converter.py +0 -0
  109. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/templates/__init__.py +0 -0
  110. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  111. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/types.py +0 -0
  112. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_sdk/unions.py +0 -0
  113. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_states.py +0 -0
  114. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
  115. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
  116. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_versioning.py +0 -0
  117. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/_waiters.py +0 -0
  118. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/agent.py +0 -0
  119. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/analytics/__init__.py +0 -0
  120. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/artifacts.py +0 -0
  121. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/assets/__init__.py +0 -0
  122. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/assets/core.py +0 -0
  123. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/assets/materialize.py +0 -0
  124. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/automations.py +0 -0
  125. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/__init__.py +0 -0
  126. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/abstract.py +0 -0
  127. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/fields.py +0 -0
  128. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/notifications.py +0 -0
  129. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/redis.py +0 -0
  130. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/system.py +0 -0
  131. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/blocks/webhook.py +0 -0
  132. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/cache_policies.py +0 -0
  133. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/AGENTS.md +0 -0
  134. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/__init__.py +0 -0
  135. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/attribution.py +0 -0
  136. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/base.py +0 -0
  137. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/cloud.py +0 -0
  138. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/collections.py +0 -0
  139. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/constants.py +0 -0
  140. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  141. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  142. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  143. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
  144. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  145. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  146. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  147. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  148. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  149. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  150. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  151. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  152. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  153. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  154. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  155. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_events/client.py +0 -0
  156. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  157. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  158. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  159. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
  160. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  161. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
  162. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  163. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
  164. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  165. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/orchestration/base.py +0 -0
  166. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/__init__.py +0 -0
  167. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/actions.py +0 -0
  168. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/events.py +0 -0
  169. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/filters.py +0 -0
  170. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/schedules.py +0 -0
  171. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/schemas/sorting.py +0 -0
  172. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/subscriptions.py +0 -0
  173. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/types/__init__.py +0 -0
  174. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  175. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/client/utilities.py +0 -0
  176. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/__init__.py +0 -0
  177. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/_asyncio.py +0 -0
  178. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/_events.py +0 -0
  179. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/_leases.py +0 -0
  180. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/asyncio.py +0 -0
  181. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/context.py +0 -0
  182. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/services.py +0 -0
  183. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/sync.py +0 -0
  184. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
  185. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  186. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
  187. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
  188. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/context.py +0 -0
  189. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/services.py +0 -0
  190. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
  191. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/context.py +0 -0
  192. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/__init__.py +0 -0
  193. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/base.py +0 -0
  194. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/deployments.py +0 -0
  195. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/flow_runs.py +0 -0
  196. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/schedules.py +0 -0
  197. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
  198. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/steps/core.py +0 -0
  199. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/deployments/steps/pull.py +0 -0
  200. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/docker/__init__.py +0 -0
  201. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/engine.py +0 -0
  202. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/AGENTS.md +0 -0
  203. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/__init__.py +0 -0
  204. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/actions.py +0 -0
  205. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/clients.py +0 -0
  206. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/filters.py +0 -0
  207. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/related.py +0 -0
  208. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/schemas/__init__.py +0 -0
  209. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/schemas/automations.py +0 -0
  210. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  211. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/schemas/events.py +0 -0
  212. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/schemas/labelling.py +0 -0
  213. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/subscribers.py +0 -0
  214. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/utilities.py +0 -0
  215. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/events/worker.py +0 -0
  216. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/exceptions.py +0 -0
  217. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/filesystems.py +0 -0
  218. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/flow_runs.py +0 -0
  219. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/__init__.py +0 -0
  220. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/base.py +0 -0
  221. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  222. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  223. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  224. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  225. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  226. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  227. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/input/__init__.py +0 -0
  228. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/input/actions.py +0 -0
  229. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/input/run_input.py +0 -0
  230. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/locking/__init__.py +0 -0
  231. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/locking/filesystem.py +0 -0
  232. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/locking/memory.py +0 -0
  233. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/locking/protocol.py +0 -0
  234. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/AGENTS.md +0 -0
  235. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/__init__.py +0 -0
  236. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/clients.py +0 -0
  237. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/configuration.py +0 -0
  238. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/filters.py +0 -0
  239. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/formatters.py +0 -0
  240. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/handlers.py +0 -0
  241. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/highlighters.py +0 -0
  242. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/loggers.py +0 -0
  243. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/logging/logging.yml +0 -0
  244. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/main.py +0 -0
  245. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/plugins.py +0 -0
  246. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/py.typed +0 -0
  247. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/results.py +0 -0
  248. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/__init__.py +0 -0
  249. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_cancellation_manager.py +0 -0
  250. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_deployment_registry.py +0 -0
  251. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_event_emitter.py +0 -0
  252. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_flow_resolver.py +0 -0
  253. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_flow_run_executor.py +0 -0
  254. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_hook_runner.py +0 -0
  255. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_limit_manager.py +0 -0
  256. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_process_manager.py +0 -0
  257. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  258. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_starter_bundle.py +0 -0
  259. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_starter_direct.py +0 -0
  260. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_starter_engine.py +0 -0
  261. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/_state_proposer.py +0 -0
  262. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/server.py +0 -0
  263. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runner/storage.py +0 -0
  264. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runtime/__init__.py +0 -0
  265. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runtime/deployment.py +0 -0
  266. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runtime/flow_run.py +0 -0
  267. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/runtime/task_run.py +0 -0
  268. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/schedules.py +0 -0
  269. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/serializers.py +0 -0
  270. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/__init__.py +0 -0
  271. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/admin.py +0 -0
  272. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/artifacts.py +0 -0
  273. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/automations.py +0 -0
  274. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/background_workers.py +0 -0
  275. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
  276. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/block_documents.py +0 -0
  277. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/block_schemas.py +0 -0
  278. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/block_types.py +0 -0
  279. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/clients.py +0 -0
  280. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/collections.py +0 -0
  281. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  282. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
  283. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  284. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/csrf_token.py +0 -0
  285. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/dependencies.py +0 -0
  286. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/deployments.py +0 -0
  287. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/events.py +0 -0
  288. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
  289. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/flow_runs.py +0 -0
  290. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/flows.py +0 -0
  291. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/logs.py +0 -0
  292. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/middleware.py +0 -0
  293. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/root.py +0 -0
  294. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/run_history.py +0 -0
  295. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/saved_searches.py +0 -0
  296. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/server.py +0 -0
  297. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  298. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/task_run_states.py +0 -0
  299. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/task_runs.py +0 -0
  300. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/task_workers.py +0 -0
  301. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/templates.py +0 -0
  302. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
  303. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/ui/flow_runs.py +0 -0
  304. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/ui/flows.py +0 -0
  305. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
  306. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/ui/task_runs.py +0 -0
  307. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/validation.py +0 -0
  308. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/server/api/variables.py +0 -0
  309. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/AGENTS.md +0 -0
  310. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/__init__.py +0 -0
  311. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/base.py +0 -0
  312. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/constants.py +0 -0
  313. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/context.py +0 -0
  314. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/legacy.py +0 -0
  315. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/__init__.py +0 -0
  316. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/_defaults.py +0 -0
  317. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/api.py +0 -0
  318. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/cli.py +0 -0
  319. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/client.py +0 -0
  320. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/cloud.py +0 -0
  321. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/deployments.py +0 -0
  322. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/experiments.py +0 -0
  323. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/flows.py +0 -0
  324. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/internal.py +0 -0
  325. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/logging.py +0 -0
  326. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/results.py +0 -0
  327. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/root.py +0 -0
  328. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/runner.py +0 -0
  329. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
  330. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/api.py +0 -0
  331. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/concurrency.py +0 -0
  332. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/database.py +0 -0
  333. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
  334. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/docket.py +0 -0
  335. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
  336. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/events.py +0 -0
  337. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  338. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/logs.py +0 -0
  339. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/root.py +0 -0
  340. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/services.py +0 -0
  341. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/server/ui.py +0 -0
  342. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/tasks.py +0 -0
  343. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/telemetry.py +0 -0
  344. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/testing.py +0 -0
  345. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/models/worker.py +0 -0
  346. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/profiles.py +0 -0
  347. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/profiles.toml +0 -0
  348. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/settings/sources.py +0 -0
  349. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/states.py +0 -0
  350. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/task_engine.py +0 -0
  351. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/task_runners.py +0 -0
  352. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/task_runs.py +0 -0
  353. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/task_worker.py +0 -0
  354. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/tasks.py +0 -0
  355. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/telemetry/__init__.py +0 -0
  356. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
  357. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/transactions.py +0 -0
  358. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/__init__.py +0 -0
  359. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/_concurrency.py +0 -0
  360. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/_datetime.py +0 -0
  361. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/_schema.py +0 -0
  362. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/entrypoint.py +0 -0
  363. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/types/names.py +0 -0
  364. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/__init__.py +0 -0
  365. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/_ast.py +0 -0
  366. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/_deprecated.py +0 -0
  367. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/_engine.py +0 -0
  368. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/_git.py +0 -0
  369. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/_infrastructure_exit_codes.py +0 -0
  370. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/annotations.py +0 -0
  371. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/asyncutils.py +0 -0
  372. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/callables.py +0 -0
  373. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/collections.py +0 -0
  374. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/compat.py +0 -0
  375. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/context.py +0 -0
  376. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/dispatch.py +0 -0
  377. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/dockerutils.py +0 -0
  378. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/engine.py +0 -0
  379. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/filesystem.py +0 -0
  380. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/generics.py +0 -0
  381. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/hashing.py +0 -0
  382. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/importtools.py +0 -0
  383. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/math.py +0 -0
  384. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/names.py +0 -0
  385. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/processutils.py +0 -0
  386. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/pydantic.py +0 -0
  387. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/render_swagger.py +0 -0
  388. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  389. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  390. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/schema_tools/validation.py +0 -0
  391. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/services.py +0 -0
  392. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/slugify.py +0 -0
  393. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/templating.py +0 -0
  394. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/text.py +0 -0
  395. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/timeout.py +0 -0
  396. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/urls.py +0 -0
  397. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/utilities/visualization.py +0 -0
  398. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/variables.py +0 -0
  399. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/__init__.py +0 -0
  400. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/base.py +0 -0
  401. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/block.py +0 -0
  402. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/cloud.py +0 -0
  403. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/process.py +0 -0
  404. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/server.py +0 -0
  405. {prefect_client-3.6.23.dev3 → prefect_client-3.6.24.dev1}/src/prefect/workers/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prefect-client
3
- Version: 3.6.23.dev3
3
+ Version: 3.6.24.dev1
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
@@ -46,4 +46,7 @@ Use `get_logger()` from `prefect.logging` instead of raw `logging.getLogger()`
46
46
  - `settings/` → Configuration system (see settings/AGENTS.md)
47
47
  - `concurrency/` → Concurrency slot acquisition and lease management (see concurrency/AGENTS.md)
48
48
  - `logging/` → Logging handlers, API log shipping, and run-context loggers (see logging/AGENTS.md)
49
+ - `runner/` → Thin facade over extracted single-responsibility classes for local flow run execution (see runner/AGENTS.md)
50
+ - `deployments/` → YAML-driven deployment lifecycle: project init, build/push/pull steps, and triggering remote flow runs (see deployments/AGENTS.md)
51
+ - `docker/` → `DockerImage` class for building and pushing Docker images during deployment
49
52
  - `telemetry/` → OS-level resource metric collection and run telemetry
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.6.24.dev1"
3
+ __build_date__ = "2026-03-21 08:11:26.248833+00:00"
4
+ __git_commit__ = "a74453a3544b6e146a7b422d9bfb3d9bd0a55594"
5
+ __dirty__ = False
@@ -609,7 +609,7 @@ class Block(BaseModel, ABC):
609
609
  # reported from https://github.com/PrefectHQ/prefect-dbt/issues/54
610
610
  data_keys = self.model_json_schema(by_alias=False)["properties"].keys()
611
611
 
612
- # `block_document_data`` must return the aliased version for it to show in the UI
612
+ # `block_document_data` must return the aliased version for it to show in the UI
613
613
  block_document_data = self.model_dump(
614
614
  by_alias=True,
615
615
  include=data_keys,
@@ -81,20 +81,20 @@ async def check_server_version(
81
81
  """Perform a one-shot server version compatibility check.
82
82
 
83
83
  The check is skipped when:
84
- * The ``server_version_check_enabled`` setting is ``False``.
84
+ * The `server_version_check_enabled` setting is `False`.
85
85
  * The *api_url* points at Prefect Cloud (Cloud is always compatible).
86
86
  * A check for this *(api_url, client_version)* pair has already passed.
87
87
 
88
- On a major-version mismatch a ``RuntimeError`` is raised (regardless of
88
+ On a major-version mismatch a `RuntimeError` is raised (regardless of
89
89
  *raise_on_error*). When the server is simply older than the client a
90
90
  warning is logged.
91
91
 
92
92
  Args:
93
- api_url: The base Prefect API URL (e.g. ``http://localhost:4200/api``).
93
+ api_url: The base Prefect API URL (e.g. `http://localhost:4200/api`).
94
94
  logger: Logger used for warnings and debug messages.
95
- raise_on_error: When ``True`` (the default, used by HTTP clients),
96
- raise ``RuntimeError`` if the version endpoint cannot be reached.
97
- When ``False`` (used by WebSocket clients), log a debug message
95
+ raise_on_error: When `True` (the default, used by HTTP clients),
96
+ raise `RuntimeError` if the version endpoint cannot be reached.
97
+ When `False` (used by WebSocket clients), log a debug message
98
98
  and return silently so that the caller can still attempt its
99
99
  connection.
100
100
  """
@@ -143,6 +143,7 @@ from prefect.client._version_checking import (
143
143
  )
144
144
 
145
145
  if TYPE_CHECKING:
146
+ from prefect.client.schemas.responses import WorkQueueConcurrencyStatus
146
147
  from prefect.tasks import Task as TaskObject
147
148
 
148
149
  from prefect.client.base import (
@@ -713,6 +714,44 @@ class PrefectClient(
713
714
  raise
714
715
  return WorkQueueStatusDetail.model_validate(response.json())
715
716
 
717
+ async def read_work_queue_concurrency_status(
718
+ self,
719
+ id: UUID,
720
+ page: int = 1,
721
+ limit: Optional[int] = None,
722
+ ) -> "WorkQueueConcurrencyStatus":
723
+ """
724
+ Read concurrency status for a work queue.
725
+
726
+ Args:
727
+ id: the id of the work queue
728
+ page: Page number (1-indexed).
729
+ limit: Max flow runs per page (server default if None).
730
+
731
+ Raises:
732
+ prefect.exceptions.ObjectNotFound: If request returns 404
733
+ httpx.RequestError: If request fails
734
+
735
+ Returns:
736
+ Paginated WorkQueueConcurrencyStatus with flow run summaries
737
+ """
738
+ from prefect.client.schemas.responses import WorkQueueConcurrencyStatus
739
+
740
+ body: dict = {"page": page}
741
+ if limit is not None:
742
+ body["limit"] = limit
743
+
744
+ try:
745
+ response = await self._client.post(
746
+ f"/work_queues/{id}/concurrency_status", json=body
747
+ )
748
+ except httpx.HTTPStatusError as e:
749
+ if e.response.status_code == status.HTTP_404_NOT_FOUND:
750
+ raise prefect.exceptions.ObjectNotFound(http_exc=e) from e
751
+ else:
752
+ raise
753
+ return WorkQueueConcurrencyStatus.model_validate(response.json())
754
+
716
755
  async def match_work_queues(
717
756
  self,
718
757
  prefixes: list[str],
@@ -1882,6 +1921,44 @@ class SyncPrefectClient(
1882
1921
  raise
1883
1922
  return WorkQueueStatusDetail.model_validate(response.json())
1884
1923
 
1924
+ def read_work_queue_concurrency_status(
1925
+ self,
1926
+ id: UUID,
1927
+ page: int = 1,
1928
+ limit: Optional[int] = None,
1929
+ ) -> "WorkQueueConcurrencyStatus":
1930
+ """
1931
+ Read concurrency status for a work queue.
1932
+
1933
+ Args:
1934
+ id: the id of the work queue
1935
+ page: Page number (1-indexed).
1936
+ limit: Max flow runs per page (server default if None).
1937
+
1938
+ Raises:
1939
+ prefect.exceptions.ObjectNotFound: If request returns 404
1940
+ httpx.RequestError: If request fails
1941
+
1942
+ Returns:
1943
+ Paginated WorkQueueConcurrencyStatus with flow run summaries
1944
+ """
1945
+ from prefect.client.schemas.responses import WorkQueueConcurrencyStatus
1946
+
1947
+ body: dict = {"page": page}
1948
+ if limit is not None:
1949
+ body["limit"] = limit
1950
+
1951
+ try:
1952
+ response = self._client.post(
1953
+ f"/work_queues/{id}/concurrency_status", json=body
1954
+ )
1955
+ except httpx.HTTPStatusError as e:
1956
+ if e.response.status_code == status.HTTP_404_NOT_FOUND:
1957
+ raise prefect.exceptions.ObjectNotFound(http_exc=e) from e
1958
+ else:
1959
+ raise
1960
+ return WorkQueueConcurrencyStatus.model_validate(response.json())
1961
+
1885
1962
  def match_work_queues(
1886
1963
  self,
1887
1964
  prefixes: list[str],
@@ -25,7 +25,10 @@ if TYPE_CHECKING:
25
25
  WorkerMetadata,
26
26
  WorkPool,
27
27
  )
28
- from prefect.client.schemas.responses import WorkerFlowRunResponse
28
+ from prefect.client.schemas.responses import (
29
+ WorkerFlowRunResponse,
30
+ WorkPoolConcurrencyStatus,
31
+ )
29
32
 
30
33
  from prefect.exceptions import ObjectAlreadyExists, ObjectNotFound, ObjectUnsupported
31
34
 
@@ -316,6 +319,47 @@ class WorkPoolClient(BaseClient):
316
319
 
317
320
  return WorkerFlowRunResponse.model_validate_list(response.json())
318
321
 
322
+ def read_work_pool_concurrency_status(
323
+ self,
324
+ work_pool_name: str,
325
+ page: int = 1,
326
+ limit: int | None = None,
327
+ flow_run_limit: int = 10,
328
+ ) -> "WorkPoolConcurrencyStatus":
329
+ """
330
+ Reads concurrency status for a work pool.
331
+
332
+ Args:
333
+ work_pool_name: The name of the work pool.
334
+ page: Page number (1-indexed).
335
+ limit: Max queues per page (server default if None).
336
+ flow_run_limit: Max flow runs per queue (0-200).
337
+
338
+ Returns:
339
+ Paginated concurrency status with per-queue breakdown.
340
+ """
341
+ from prefect.client.schemas.responses import WorkPoolConcurrencyStatus
342
+
343
+ body: dict[str, Any] = {"page": page}
344
+ if limit is not None:
345
+ body["limit"] = limit
346
+ body["flow_run_limit"] = flow_run_limit
347
+
348
+ try:
349
+ response = self.request(
350
+ "POST",
351
+ "/work_pools/{name}/concurrency_status",
352
+ path_params={"name": work_pool_name},
353
+ json=body,
354
+ )
355
+ except HTTPStatusError as e:
356
+ if e.response.status_code == 404:
357
+ raise ObjectNotFound(http_exc=e) from e
358
+ else:
359
+ raise
360
+
361
+ return WorkPoolConcurrencyStatus.model_validate(response.json())
362
+
319
363
 
320
364
  class WorkPoolAsyncClient(BaseAsyncClient):
321
365
  async def send_worker_heartbeat(
@@ -599,3 +643,44 @@ class WorkPoolAsyncClient(BaseAsyncClient):
599
643
  raise
600
644
 
601
645
  return WorkerFlowRunResponse.model_validate_list(response.json())
646
+
647
+ async def read_work_pool_concurrency_status(
648
+ self,
649
+ work_pool_name: str,
650
+ page: int = 1,
651
+ limit: int | None = None,
652
+ flow_run_limit: int = 10,
653
+ ) -> "WorkPoolConcurrencyStatus":
654
+ """
655
+ Reads concurrency status for a work pool.
656
+
657
+ Args:
658
+ work_pool_name: The name of the work pool.
659
+ page: Page number (1-indexed).
660
+ limit: Max queues per page (server default if None).
661
+ flow_run_limit: Max flow runs per queue (0-200).
662
+
663
+ Returns:
664
+ Paginated concurrency status with per-queue breakdown.
665
+ """
666
+ from prefect.client.schemas.responses import WorkPoolConcurrencyStatus
667
+
668
+ body: dict[str, Any] = {"page": page}
669
+ if limit is not None:
670
+ body["limit"] = limit
671
+ body["flow_run_limit"] = flow_run_limit
672
+
673
+ try:
674
+ response = await self.request(
675
+ "POST",
676
+ "/work_pools/{name}/concurrency_status",
677
+ path_params={"name": work_pool_name},
678
+ json=body,
679
+ )
680
+ except HTTPStatusError as e:
681
+ if e.response.status_code == 404:
682
+ raise ObjectNotFound(http_exc=e) from e
683
+ else:
684
+ raise
685
+
686
+ return WorkPoolConcurrencyStatus.model_validate(response.json())
@@ -125,6 +125,7 @@ ServerRoutes = Literal[
125
125
  "/version",
126
126
  "/work_pools/",
127
127
  "/work_pools/{name}",
128
+ "/work_pools/{name}/concurrency_status",
128
129
  "/work_pools/{name}/get_scheduled_flow_runs",
129
130
  "/work_pools/{work_pool_name}/queues",
130
131
  "/work_pools/{work_pool_name}/queues/{name}",
@@ -137,6 +138,7 @@ ServerRoutes = Literal[
137
138
  "/work_queues/",
138
139
  "/work_queues/{id}",
139
140
  "/work_queues/{id}/get_runs",
141
+ "/work_queues/{id}/concurrency_status",
140
142
  "/work_queues/{id}/status",
141
143
  "/work_queues/filter",
142
144
  "/work_queues/name/{name}",
@@ -1433,6 +1433,13 @@ class WorkQueue(ObjectBaseModel):
1433
1433
  status: Optional[WorkQueueStatus] = Field(
1434
1434
  default=None, description="The queue status."
1435
1435
  )
1436
+ active_slots: Optional[int] = Field(
1437
+ default=None,
1438
+ description=(
1439
+ "The number of concurrency slots currently in use. "
1440
+ "None when concurrency_limit is not set."
1441
+ ),
1442
+ )
1436
1443
 
1437
1444
 
1438
1445
  class WorkQueueHealthPolicy(PrefectBaseModel):
@@ -1554,6 +1561,13 @@ class WorkPool(ObjectBaseModel):
1554
1561
  status: Optional[WorkPoolStatus] = Field(
1555
1562
  default=None, description="The current status of the work pool."
1556
1563
  )
1564
+ active_slots: Optional[int] = Field(
1565
+ default=None,
1566
+ description=(
1567
+ "The number of concurrency slots occupied by pending or running "
1568
+ "flow runs. None when concurrency_limit is not set."
1569
+ ),
1570
+ )
1557
1571
 
1558
1572
  storage_configuration: WorkPoolStorageConfiguration = Field(
1559
1573
  default_factory=WorkPoolStorageConfiguration,
@@ -1,8 +1,18 @@
1
1
  import datetime
2
- from typing import TYPE_CHECKING, Any, ClassVar, Generic, Optional, TypeVar, Union
2
+ from datetime import timedelta
3
+ from typing import (
4
+ TYPE_CHECKING,
5
+ Annotated,
6
+ Any,
7
+ ClassVar,
8
+ Generic,
9
+ Optional,
10
+ TypeVar,
11
+ Union,
12
+ )
3
13
  from uuid import UUID
4
14
 
5
- from pydantic import ConfigDict, Field
15
+ from pydantic import BeforeValidator, ConfigDict, Field
6
16
  from typing_extensions import Literal
7
17
 
8
18
  import prefect.client.schemas.objects as objects
@@ -501,3 +511,55 @@ class GlobalConcurrencyLimitResponse(ObjectBaseModel):
501
511
  default=2.0,
502
512
  description="The decay rate for active slots when used as a rate limit.",
503
513
  )
514
+
515
+
516
+ class FlowRunSlotSummary(PrefectBaseModel):
517
+ """Summary of a flow run occupying a concurrency slot."""
518
+
519
+ id: UUID
520
+ name: str
521
+ state_type: Optional[objects.StateType] = None
522
+ state_name: Optional[str] = None
523
+ start_time: Optional[DateTime] = None
524
+ state_timestamp: Optional[DateTime] = None
525
+ time_in_current_state: Optional[timedelta] = None
526
+
527
+
528
+ def _coerce_active_slots(v: int | None) -> int:
529
+ """Cloud may return null for active_slots; coerce to 0."""
530
+ return v if v is not None else 0
531
+
532
+
533
+ class WorkQueueConcurrencyStatusDetail(PrefectBaseModel):
534
+ """Per-queue concurrency status with flow run details."""
535
+
536
+ queue_id: UUID
537
+ queue_name: str
538
+ active_slots: Annotated[int, BeforeValidator(_coerce_active_slots)]
539
+ concurrency_limit: Optional[int] = None
540
+ flow_runs: list[FlowRunSlotSummary] = Field(default_factory=list)
541
+ flow_run_count: Optional[int] = None
542
+
543
+
544
+ class WorkPoolConcurrencyStatus(PrefectBaseModel):
545
+ """Paginated pool-level concurrency status with per-queue breakdown."""
546
+
547
+ active_slots: Annotated[int, BeforeValidator(_coerce_active_slots)]
548
+ concurrency_limit: Optional[int] = None
549
+ queues: list[WorkQueueConcurrencyStatusDetail] = Field(default_factory=list)
550
+ count: int
551
+ limit: int
552
+ pages: int
553
+ page: int
554
+
555
+
556
+ class WorkQueueConcurrencyStatus(PrefectBaseModel):
557
+ """Paginated queue-level concurrency status with flow run details."""
558
+
559
+ active_slots: Annotated[int, BeforeValidator(_coerce_active_slots)]
560
+ concurrency_limit: Optional[int] = None
561
+ flow_runs: list[FlowRunSlotSummary] = Field(default_factory=list)
562
+ count: int
563
+ limit: int
564
+ pages: int
565
+ page: int
@@ -38,5 +38,5 @@ Layered — public → internal → services, with leases and events as cross-cu
38
38
 
39
39
  - **Service singleton is keyed on `frozenset(names)`.** Passing the same names in different order reuses the same singleton; passing a strict subset creates a different singleton. Each unique name-set gets its own queue.
40
40
  - **Lease renewal runs on the global event loop** (sync path). If the global loop is blocked or torn down, renewal silently fails — you'll see the renewal failure callback fire after `max_attempts` retries are exhausted.
41
- - **Cancellation during acquire** — lease IDs for mid-acquisition slots land in `ConcurrencyContext.cleanup_lease_ids`. `ConcurrencyContext.__exit__` releases them via a sync client. If `ConcurrencyContext` is not active, those leases are abandoned until server-side expiry.
41
+ - **Cancellation during acquire or release** — if a `CancelledError` is raised either during slot acquisition or during `release_concurrency_slots_with_lease` in the `finally` block, the lease ID is appended to `ConcurrencyContext.cleanup_lease_ids`. `ConcurrencyContext.__exit__` releases them via a sync client. If `ConcurrencyContext` is not active, those leases are abandoned until server-side expiry.
42
42
  - **`v1/` subdirectory** contains the legacy slot API (no lease model). New code should use the top-level `concurrency()` / `rate_limit()` APIs.
@@ -4,6 +4,7 @@ from contextlib import contextmanager
4
4
  from typing import Generator, Literal, Optional
5
5
  from uuid import UUID
6
6
 
7
+ from prefect._internal.concurrency.cancellation import CancelledError
7
8
  from prefect.client.schemas.objects import ConcurrencyLeaseHolder
8
9
  from prefect.client.schemas.responses import (
9
10
  ConcurrencyLimitWithLeaseResponse,
@@ -19,6 +20,7 @@ from prefect.concurrency._events import (
19
20
  emit_concurrency_release_events,
20
21
  )
21
22
  from prefect.concurrency._leases import maintain_concurrency_lease
23
+ from prefect.concurrency.context import ConcurrencyContext
22
24
  from prefect.utilities.asyncutils import run_coro_as_sync
23
25
 
24
26
 
@@ -146,7 +148,15 @@ def concurrency(
146
148
  ):
147
149
  yield
148
150
  finally:
149
- release_concurrency_slots_with_lease(acquisition_response.lease_id)
151
+ try:
152
+ release_concurrency_slots_with_lease(acquisition_response.lease_id)
153
+ except CancelledError:
154
+ # The task was cancelled before it could release the lease. Add the
155
+ # lease ID to the cleanup list so it can be released when the
156
+ # concurrency context is exited.
157
+ if ctx := ConcurrencyContext.get():
158
+ ctx.cleanup_lease_ids.append(acquisition_response.lease_id)
159
+
150
160
  emit_concurrency_release_events(
151
161
  acquisition_response.limits, occupy, emitted_events
152
162
  )
@@ -0,0 +1,39 @@
1
+ # Deployments
2
+
3
+ YAML-driven configuration for packaging, publishing, and triggering flow runs from infrastructure.
4
+
5
+ ## Purpose & Scope
6
+
7
+ Handles deployment lifecycle: initializing projects, building/pushing deployment artifacts, and triggering remote flow runs. Does NOT manage flow execution itself — that lives in `flow_engine.py` and `task_engine.py`.
8
+
9
+ ## Entry Points & Contracts
10
+
11
+ - `runner.py` → `deploy()` — programmatic deployment creation from `Flow` objects
12
+ - `flow_runs.py` → `run_deployment()` / `arun_deployment()` — trigger a run of an existing deployment
13
+ - `base.py` → `initialize_project()` — scaffold `prefect.yaml` in a project directory
14
+ - `steps/core.py` → `run_step()` / `run_steps()` — execute lifecycle steps defined in `prefect.yaml`
15
+
16
+ ## Steps System
17
+
18
+ Steps are YAML entries in `build`, `push`, or `pull` blocks of `prefect.yaml`. Each step maps to a Python function imported at runtime. The `requires` keyword auto-installs missing packages before import.
19
+
20
+ Step outputs are templated into subsequent steps via `{{ step-id.key }}`.
21
+
22
+ Built-in steps:
23
+ - `steps/pull.py` — `git_clone`, `set_working_directory`, `pull_from_remote_storage`
24
+ - `steps/utility.py` — `run_shell_script`, `pip_install_requirements`
25
+
26
+ ## Entrypoint Formats
27
+
28
+ `runner.py`'s `from_storage` / `afrom_storage` (and `Flow.from_source`) support two entrypoint formats:
29
+ - **File path**: `path/to/file.py:flow_func_name` — detected by presence of `:`
30
+ - **Module path**: `my_package.flows.flow_func` — detected by absence of `:`
31
+
32
+ For module path entrypoints, the storage destination is temporarily prepended to `sys.path` so the module can be imported, then removed in a `finally` block. Any new code that loads flows from module paths must follow this same pattern to avoid polluting `sys.path`.
33
+
34
+ ## Pitfalls
35
+
36
+ - **Windows shell mode**: `run_shell_script` always uses `asyncio.create_subprocess_shell` on Windows (`sys.platform == "win32"`), regardless of the `shell` parameter. This ensures cmd.exe built-ins (`echo`, `dir`, `set`, etc.) work. On non-Windows, `shell=False` (default) uses `create_subprocess_exec` with `shlex.split`.
37
+ - **Step ID namespace**: `id` and `requires` are reserved keywords — do not use them as step output keys.
38
+ - **Step import side effects**: steps are imported dynamically; packages listed in `requires` are installed into the current environment at execution time.
39
+ - **String `image` argument suppresses build/push output.** When `deploy()` / `adeploy()` receives `image` as a plain string, it constructs `DockerImage(stream_progress_to=None)`, silencing all build and push progress. `DockerImage` itself defaults to `sys.stdout`, so users who pass a string get no output. To see build/push progress, pass a `DockerImage` object explicitly: `DockerImage("registry/image:tag", stream_progress_to=sys.stdout)`.
@@ -32,6 +32,7 @@ Example:
32
32
  from __future__ import annotations
33
33
 
34
34
  import importlib
35
+ import sys
35
36
  import tempfile
36
37
  from datetime import datetime, timedelta
37
38
  from pathlib import Path
@@ -1160,7 +1161,8 @@ class RunnerDeployment(BaseModel):
1160
1161
 
1161
1162
  Args:
1162
1163
  entrypoint: The path to a file containing a flow and the name of the flow function in
1163
- the format `./path/to/file.py:flow_func_name`.
1164
+ the format `./path/to/file.py:flow_func_name`, or a module path to a flow function
1165
+ in the format `module.path.flow_func_name`.
1164
1166
  name: A name for the deployment
1165
1167
  flow_name: The name of the flow to deploy
1166
1168
  storage: A storage object to use for retrieving flow code. If not provided, a
@@ -1213,10 +1215,19 @@ class RunnerDeployment(BaseModel):
1213
1215
  storage.set_base_path(Path(tmpdir))
1214
1216
  await storage.pull_code()
1215
1217
 
1216
- full_entrypoint = str(storage.destination / entrypoint)
1217
- flow = await from_async.wait_for_call_in_new_thread(
1218
- create_call(load_flow_from_entrypoint, full_entrypoint)
1219
- )
1218
+ if ":" in entrypoint:
1219
+ full_entrypoint = str(storage.destination / entrypoint)
1220
+ else:
1221
+ sys.path.insert(0, str(storage.destination))
1222
+ full_entrypoint = entrypoint
1223
+
1224
+ try:
1225
+ flow = await from_async.wait_for_call_in_new_thread(
1226
+ create_call(load_flow_from_entrypoint, full_entrypoint)
1227
+ )
1228
+ finally:
1229
+ if ":" not in entrypoint:
1230
+ sys.path.remove(str(storage.destination))
1220
1231
 
1221
1232
  deployment = cls(
1222
1233
  name=name,
@@ -1239,6 +1250,11 @@ class RunnerDeployment(BaseModel):
1239
1250
  job_variables=job_variables,
1240
1251
  )
1241
1252
  deployment._sla = _sla
1253
+ deployment._entrypoint_type = (
1254
+ EntrypointType.FILE_PATH
1255
+ if ":" in entrypoint
1256
+ else EntrypointType.MODULE_PATH
1257
+ )
1242
1258
  deployment._path = str(storage.destination).replace(
1243
1259
  tmpdir, "$STORAGE_BASE_PATH"
1244
1260
  )
@@ -1282,7 +1298,8 @@ class RunnerDeployment(BaseModel):
1282
1298
 
1283
1299
  Args:
1284
1300
  entrypoint: The path to a file containing a flow and the name of the flow function in
1285
- the format `./path/to/file.py:flow_func_name`.
1301
+ the format `./path/to/file.py:flow_func_name`, or a module path to a flow function
1302
+ in the format `module.path.flow_func_name`.
1286
1303
  name: A name for the deployment
1287
1304
  flow_name: The name of the flow to deploy
1288
1305
  storage: A storage object to use for retrieving flow code. If not provided, a
@@ -1335,8 +1352,17 @@ class RunnerDeployment(BaseModel):
1335
1352
  storage.set_base_path(Path(tmpdir))
1336
1353
  run_coro_as_sync(storage.pull_code())
1337
1354
 
1338
- full_entrypoint = str(storage.destination / entrypoint)
1339
- flow = load_flow_from_entrypoint(full_entrypoint)
1355
+ if ":" in entrypoint:
1356
+ full_entrypoint = str(storage.destination / entrypoint)
1357
+ else:
1358
+ sys.path.insert(0, str(storage.destination))
1359
+ full_entrypoint = entrypoint
1360
+
1361
+ try:
1362
+ flow = load_flow_from_entrypoint(full_entrypoint)
1363
+ finally:
1364
+ if ":" not in entrypoint:
1365
+ sys.path.remove(str(storage.destination))
1340
1366
 
1341
1367
  deployment = cls(
1342
1368
  name=name,
@@ -1359,6 +1385,11 @@ class RunnerDeployment(BaseModel):
1359
1385
  job_variables=job_variables,
1360
1386
  )
1361
1387
  deployment._sla = _sla
1388
+ deployment._entrypoint_type = (
1389
+ EntrypointType.FILE_PATH
1390
+ if ":" in entrypoint
1391
+ else EntrypointType.MODULE_PATH
1392
+ )
1362
1393
  deployment._path = str(storage.destination).replace(
1363
1394
  tmpdir, "$STORAGE_BASE_PATH"
1364
1395
  )
@@ -1448,7 +1479,7 @@ async def adeploy(
1448
1479
 
1449
1480
  if image and isinstance(image, str):
1450
1481
  image_name, image_tag = parse_image_tag(image)
1451
- image = DockerImage(name=image_name, tag=image_tag)
1482
+ image = DockerImage(name=image_name, tag=image_tag, stream_progress_to=None)
1452
1483
 
1453
1484
  try:
1454
1485
  async with get_client() as client:
@@ -1687,7 +1718,7 @@ def deploy(
1687
1718
 
1688
1719
  if image and isinstance(image, str):
1689
1720
  image_name, image_tag = parse_image_tag(image)
1690
- image = DockerImage(name=image_name, tag=image_tag)
1721
+ image = DockerImage(name=image_name, tag=image_tag, stream_progress_to=None)
1691
1722
 
1692
1723
  try:
1693
1724
  with get_client(sync_client=True) as client: