prefect-client 3.7.2.dev4__tar.gz → 3.7.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/PKG-INFO +3 -2
  2. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/pyproject.toml +2 -1
  3. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/AGENTS.md +1 -0
  4. prefect_client-3.7.3/src/prefect/_build_info.py +5 -0
  5. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/result_records.py +9 -0
  6. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/__init__.py +10 -3
  7. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/_leases.py +10 -2
  8. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/clients.py +1 -1
  9. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/subscribers.py +1 -1
  10. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/logging/handlers.py +6 -3
  11. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/results.py +8 -0
  12. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/AGENTS.md +5 -1
  13. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_workspace_resolver.py +83 -5
  14. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_workspace_starter.py +4 -0
  15. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/runner.py +1 -1
  16. prefect_client-3.7.3/src/prefect/server/api/__init__.py +86 -0
  17. prefect_client-3.7.3/src/prefect/server/api/_ui_static.py +85 -0
  18. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/server.py +4 -22
  19. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/workers.py +1 -1
  20. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/AGENTS.md +6 -0
  21. prefect_client-3.7.3/src/prefect/settings/_types.py +226 -0
  22. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/context.py +9 -3
  23. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/root.py +56 -11
  24. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/runner.py +9 -0
  25. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/api.py +10 -0
  26. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/root.py +5 -0
  27. prefect_client-3.7.3/src/prefect/settings/models/server/worker_channel.py +54 -0
  28. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/states.py +5 -1
  29. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/templating/__init__.py +146 -113
  30. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/_worker_channel/_transport.py +6 -1
  31. prefect_client-3.7.2.dev4/src/prefect/_build_info.py +0 -5
  32. prefect_client-3.7.2.dev4/src/prefect/server/api/__init__.py +0 -33
  33. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/.gitignore +0 -0
  34. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/LICENSE +0 -0
  35. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/README.md +0 -0
  36. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/hatch_build.py +0 -0
  37. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/.prefectignore +0 -0
  38. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/__init__.py +0 -0
  39. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/__main__.py +0 -0
  40. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/__init__.py +0 -0
  41. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/_launchers.py +0 -0
  42. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/bundles/__init__.py +0 -0
  43. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/bundles/execute.py +0 -0
  44. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/plugins/__init__.py +0 -0
  45. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/plugins/apply.py +0 -0
  46. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  47. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/plugins/manager.py +0 -0
  48. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/plugins/spec.py +0 -0
  49. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/sla/__init__.py +0 -0
  50. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/sla/client.py +0 -0
  51. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_experimental/sla/objects.py +0 -0
  52. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_flow_run_suspension.py +0 -0
  53. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/__init__.py +0 -0
  54. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/_logging.py +0 -0
  55. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/analytics/__init__.py +0 -0
  56. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  57. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/analytics/client.py +0 -0
  58. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/analytics/device_id.py +0 -0
  59. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/analytics/emit.py +0 -0
  60. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/analytics/enabled.py +0 -0
  61. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/analytics/events.py +0 -0
  62. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/analytics/milestones.py +0 -0
  63. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/analytics/notice.py +0 -0
  64. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/analytics/service.py +0 -0
  65. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/ast_utils.py +0 -0
  66. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/buildx.py +0 -0
  67. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/__init__.py +0 -0
  68. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  69. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/backports.py +0 -0
  70. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/blocks.py +0 -0
  71. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  72. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  73. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/migration.py +0 -0
  74. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/compatibility/starlette.py +0 -0
  75. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/__init__.py +0 -0
  76. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/api.py +0 -0
  77. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/calls.py +0 -0
  78. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  79. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  80. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/inspection.py +0 -0
  81. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/primitives.py +0 -0
  82. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/services.py +0 -0
  83. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/threads.py +0 -0
  84. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/concurrency/waiters.py +0 -0
  85. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/control_listener.py +0 -0
  86. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/deprecated.py +0 -0
  87. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/engine.py +0 -0
  88. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/git.py +0 -0
  89. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  90. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/installation.py +0 -0
  91. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/integrations.py +0 -0
  92. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/launchers.py +0 -0
  93. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/lazy.py +0 -0
  94. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/metrics.py +0 -0
  95. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/observability.py +0 -0
  96. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/observers.py +0 -0
  97. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/plugins/__init__.py +0 -0
  98. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/plugins/apply.py +0 -0
  99. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/plugins/collections.py +0 -0
  100. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  101. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/plugins/manager.py +0 -0
  102. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/plugins/spec.py +0 -0
  103. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/plugins/startup.py +0 -0
  104. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/pydantic/__init__.py +0 -0
  105. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/pydantic/schemas.py +0 -0
  106. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  107. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  108. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  109. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/pytz.py +0 -0
  110. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/retries.py +0 -0
  111. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/schema.py +0 -0
  112. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/schemas/__init__.py +0 -0
  113. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/schemas/bases.py +0 -0
  114. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/schemas/fields.py +0 -0
  115. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/schemas/serializers.py +0 -0
  116. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/schemas/validators.py +0 -0
  117. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  118. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/states.py +0 -0
  119. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/testing.py +0 -0
  120. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/urls.py +0 -0
  121. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/uuid7.py +0 -0
  122. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/version_checking.py +0 -0
  123. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/versioning.py +0 -0
  124. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/waiters.py +0 -0
  125. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_internal/websockets.py +0 -0
  126. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/__init__.py +0 -0
  127. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/fetcher.py +0 -0
  128. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/generator.py +0 -0
  129. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/models.py +0 -0
  130. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/naming.py +0 -0
  131. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/renderer.py +0 -0
  132. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/schema_converter.py +0 -0
  133. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/templates/__init__.py +0 -0
  134. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  135. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/types.py +0 -0
  136. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_sdk/unions.py +0 -0
  137. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_vendor/croniter/__init__.py +0 -0
  138. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/_vendor/croniter/croniter.py +0 -0
  139. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/agent.py +0 -0
  140. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/analytics/__init__.py +0 -0
  141. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/artifacts.py +0 -0
  142. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/assets/__init__.py +0 -0
  143. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/assets/core.py +0 -0
  144. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/assets/materialize.py +0 -0
  145. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/automations.py +0 -0
  146. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/blocks/AGENTS.md +0 -0
  147. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/blocks/__init__.py +0 -0
  148. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/blocks/abstract.py +0 -0
  149. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/blocks/core.py +0 -0
  150. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/blocks/fields.py +0 -0
  151. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/blocks/notifications.py +0 -0
  152. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/blocks/redis.py +0 -0
  153. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/blocks/system.py +0 -0
  154. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/blocks/webhook.py +0 -0
  155. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/bundles/__init__.py +0 -0
  156. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/bundles/_file_collector.py +0 -0
  157. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/bundles/_ignore_filter.py +0 -0
  158. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/bundles/_path_resolver.py +0 -0
  159. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/bundles/_zip_builder.py +0 -0
  160. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/bundles/_zip_extractor.py +0 -0
  161. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/bundles/execute.py +0 -0
  162. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/cache_policies.py +0 -0
  163. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/AGENTS.md +0 -0
  164. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/__init__.py +0 -0
  165. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/attribution.py +0 -0
  166. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/base.py +0 -0
  167. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/cloud.py +0 -0
  168. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/collections.py +0 -0
  169. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/constants.py +0 -0
  170. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  171. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  172. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  173. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_automations/client.py +0 -0
  174. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  175. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  176. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  177. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  178. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  179. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  180. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  181. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  182. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  183. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  184. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  185. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_events/client.py +0 -0
  186. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  187. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  188. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  189. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_flows/client.py +0 -0
  190. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  191. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_logs/client.py +0 -0
  192. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  193. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_variables/client.py +0 -0
  194. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  195. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  196. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/base.py +0 -0
  197. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/orchestration/routes.py +0 -0
  198. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/schemas/__init__.py +0 -0
  199. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/schemas/actions.py +0 -0
  200. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/schemas/events.py +0 -0
  201. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/schemas/filters.py +0 -0
  202. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/schemas/objects.py +0 -0
  203. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/schemas/responses.py +0 -0
  204. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/schemas/schedules.py +0 -0
  205. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/schemas/sorting.py +0 -0
  206. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/schemas/worker_channel.py +0 -0
  207. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/subscriptions.py +0 -0
  208. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/types/__init__.py +0 -0
  209. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  210. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/client/utilities.py +0 -0
  211. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/AGENTS.md +0 -0
  212. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/__init__.py +0 -0
  213. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/_asyncio.py +0 -0
  214. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/_events.py +0 -0
  215. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/_sync.py +0 -0
  216. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/asyncio.py +0 -0
  217. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/context.py +0 -0
  218. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/services.py +0 -0
  219. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/sync.py +0 -0
  220. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/v1/__init__.py +0 -0
  221. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  222. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/v1/_events.py +0 -0
  223. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/v1/asyncio.py +0 -0
  224. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/v1/context.py +0 -0
  225. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/v1/services.py +0 -0
  226. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/concurrency/v1/sync.py +0 -0
  227. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/context.py +0 -0
  228. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/AGENTS.md +0 -0
  229. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/__init__.py +0 -0
  230. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/base.py +0 -0
  231. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/deployments.py +0 -0
  232. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/flow_runs.py +0 -0
  233. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/runner.py +0 -0
  234. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/schedules.py +0 -0
  235. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/steps/__init__.py +0 -0
  236. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/steps/core.py +0 -0
  237. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/steps/pull.py +0 -0
  238. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/deployments/steps/utility.py +0 -0
  239. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/docker/__init__.py +0 -0
  240. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/docker/_buildx.py +0 -0
  241. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/docker/docker_image.py +0 -0
  242. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/engine.py +0 -0
  243. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/AGENTS.md +0 -0
  244. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/__init__.py +0 -0
  245. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/actions.py +0 -0
  246. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/filters.py +0 -0
  247. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/related.py +0 -0
  248. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/schemas/__init__.py +0 -0
  249. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/schemas/automations.py +0 -0
  250. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  251. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/schemas/events.py +0 -0
  252. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/schemas/labelling.py +0 -0
  253. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/utilities.py +0 -0
  254. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/events/worker.py +0 -0
  255. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/exceptions.py +0 -0
  256. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/filesystems.py +0 -0
  257. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/flow_engine.py +0 -0
  258. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/flow_runs.py +0 -0
  259. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/flows.py +0 -0
  260. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/futures.py +0 -0
  261. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/infrastructure/__init__.py +0 -0
  262. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/infrastructure/base.py +0 -0
  263. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  264. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  265. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  266. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  267. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  268. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  269. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/input/__init__.py +0 -0
  270. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/input/actions.py +0 -0
  271. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/input/run_input.py +0 -0
  272. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/locking/__init__.py +0 -0
  273. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/locking/_filelock.py +0 -0
  274. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/locking/filesystem.py +0 -0
  275. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/locking/memory.py +0 -0
  276. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/locking/protocol.py +0 -0
  277. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/logging/AGENTS.md +0 -0
  278. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/logging/__init__.py +0 -0
  279. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/logging/clients.py +0 -0
  280. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/logging/configuration.py +0 -0
  281. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/logging/filters.py +0 -0
  282. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/logging/formatters.py +0 -0
  283. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/logging/highlighters.py +0 -0
  284. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/logging/loggers.py +0 -0
  285. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/logging/logging.yml +0 -0
  286. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/main.py +0 -0
  287. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/plugins.py +0 -0
  288. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/py.typed +0 -0
  289. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/__init__.py +0 -0
  290. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_cancel_finalizer.py +0 -0
  291. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_cancellation_manager.py +0 -0
  292. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_control_channel.py +0 -0
  293. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_deployment_registry.py +0 -0
  294. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_event_emitter.py +0 -0
  295. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_flow_resolver.py +0 -0
  296. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_flow_run_executor.py +0 -0
  297. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_hook_runner.py +0 -0
  298. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_limit_manager.py +0 -0
  299. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_process_manager.py +0 -0
  300. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  301. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_starter_bundle.py +0 -0
  302. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_starter_direct.py +0 -0
  303. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_starter_engine.py +0 -0
  304. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/_state_proposer.py +0 -0
  305. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/server.py +0 -0
  306. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runner/storage.py +0 -0
  307. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runtime/__init__.py +0 -0
  308. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runtime/deployment.py +0 -0
  309. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runtime/flow_run.py +0 -0
  310. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/runtime/task_run.py +0 -0
  311. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/schedules.py +0 -0
  312. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/serializers.py +0 -0
  313. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/admin.py +0 -0
  314. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/artifacts.py +0 -0
  315. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/automations.py +0 -0
  316. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/background_workers.py +0 -0
  317. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/block_capabilities.py +0 -0
  318. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/block_documents.py +0 -0
  319. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/block_schemas.py +0 -0
  320. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/block_types.py +0 -0
  321. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/clients.py +0 -0
  322. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/collections.py +0 -0
  323. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  324. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/concurrency_limits.py +0 -0
  325. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  326. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/csrf_token.py +0 -0
  327. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/dependencies.py +0 -0
  328. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/deployments.py +0 -0
  329. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/events.py +0 -0
  330. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/flow_run_states.py +0 -0
  331. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/flow_runs.py +0 -0
  332. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/flows.py +0 -0
  333. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/logs.py +0 -0
  334. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/middleware.py +0 -0
  335. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/root.py +0 -0
  336. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/run_history.py +0 -0
  337. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/saved_searches.py +0 -0
  338. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  339. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/task_run_states.py +0 -0
  340. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/task_runs.py +0 -0
  341. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/task_workers.py +0 -0
  342. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/templates.py +0 -0
  343. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/ui/__init__.py +0 -0
  344. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/ui/flow_runs.py +0 -0
  345. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/ui/flows.py +0 -0
  346. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/ui/schemas.py +0 -0
  347. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/ui/task_runs.py +0 -0
  348. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/validation.py +0 -0
  349. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/variables.py +0 -0
  350. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/server/api/work_queues.py +0 -0
  351. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/__init__.py +0 -0
  352. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/base.py +0 -0
  353. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/constants.py +0 -0
  354. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/legacy.py +0 -0
  355. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/__init__.py +0 -0
  356. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/_defaults.py +0 -0
  357. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/api.py +0 -0
  358. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/cli.py +0 -0
  359. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/client.py +0 -0
  360. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/cloud.py +0 -0
  361. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/deployments.py +0 -0
  362. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/events.py +0 -0
  363. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/experiments.py +0 -0
  364. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/flows.py +0 -0
  365. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/internal.py +0 -0
  366. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/logging.py +0 -0
  367. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/plugins.py +0 -0
  368. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/results.py +0 -0
  369. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/__init__.py +0 -0
  370. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/concurrency.py +0 -0
  371. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/database.py +0 -0
  372. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/deployments.py +0 -0
  373. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/docket.py +0 -0
  374. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/ephemeral.py +0 -0
  375. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/events.py +0 -0
  376. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  377. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/logs.py +0 -0
  378. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/services.py +0 -0
  379. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/tasks.py +0 -0
  380. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/server/ui.py +0 -0
  381. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/tasks.py +0 -0
  382. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/telemetry.py +0 -0
  383. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/testing.py +0 -0
  384. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/models/worker.py +0 -0
  385. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/profiles.py +0 -0
  386. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/profiles.toml +0 -0
  387. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/settings/sources.py +0 -0
  388. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/task_engine.py +0 -0
  389. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/task_runners.py +0 -0
  390. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/task_runs.py +0 -0
  391. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/task_worker.py +0 -0
  392. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/tasks.py +0 -0
  393. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/telemetry/__init__.py +0 -0
  394. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/telemetry/run_telemetry.py +0 -0
  395. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/transactions.py +0 -0
  396. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/types/__init__.py +0 -0
  397. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/types/_concurrency.py +0 -0
  398. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/types/_datetime.py +0 -0
  399. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/types/entrypoint.py +0 -0
  400. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/types/names.py +0 -0
  401. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/AGENTS.md +0 -0
  402. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/__init__.py +0 -0
  403. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/annotations.py +0 -0
  404. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  405. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  406. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/callables/AGENTS.md +0 -0
  407. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/callables/__init__.py +0 -0
  408. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/collections.py +0 -0
  409. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/compat.py +0 -0
  410. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/context.py +0 -0
  411. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/dispatch.py +0 -0
  412. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/dockerutils.py +0 -0
  413. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/engine/AGENTS.md +0 -0
  414. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/engine/__init__.py +0 -0
  415. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  416. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/filesystem/__init__.py +0 -0
  417. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/generics.py +0 -0
  418. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/hashing.py +0 -0
  419. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/importtools.py +0 -0
  420. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/math.py +0 -0
  421. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/names.py +0 -0
  422. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  423. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/processutils/__init__.py +0 -0
  424. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/pydantic.py +0 -0
  425. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/render_swagger.py +0 -0
  426. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  427. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  428. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  429. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/schema_tools/validation.py +0 -0
  430. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/services.py +0 -0
  431. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/slugify.py +0 -0
  432. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/templating/AGENTS.md +0 -0
  433. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/text.py +0 -0
  434. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/timeout.py +0 -0
  435. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/urls.py +0 -0
  436. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/utilities/visualization.py +0 -0
  437. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/variables.py +0 -0
  438. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/AGENTS.md +0 -0
  439. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/__init__.py +0 -0
  440. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/_cleanup.py +0 -0
  441. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/_cleanup_handlers.py +0 -0
  442. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  443. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  444. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/_worker_channel/_state.py +0 -0
  445. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  446. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/base.py +0 -0
  447. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/block.py +0 -0
  448. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/cloud.py +0 -0
  449. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/process.py +0 -0
  450. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/src/prefect/workers/server.py +0 -0
  451. {prefect_client-3.7.2.dev4 → prefect_client-3.7.3}/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.7.2.dev4
3
+ Version: 3.7.3
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
@@ -47,7 +47,7 @@ Requires-Dist: prometheus-client>=0.20.0
47
47
  Requires-Dist: pydantic!=2.11.0,!=2.11.1,!=2.11.2,!=2.11.3,!=2.11.4,<3.0.0,>=2.10.1
48
48
  Requires-Dist: pydantic-core<3.0.0,>=2.12.0
49
49
  Requires-Dist: pydantic-extra-types<3.0.0,>=2.8.2
50
- Requires-Dist: pydantic-settings!=2.9.0,<3.0.0,>2.2.1
50
+ Requires-Dist: pydantic-settings<3.0.0,>=2.9.1
51
51
  Requires-Dist: python-dateutil<3.0.0,>=2.8.2
52
52
  Requires-Dist: python-slugify<9.0,>=5.0
53
53
  Requires-Dist: pytz<2027,>=2021.1
@@ -57,6 +57,7 @@ Requires-Dist: rich<16.0,>=11.0
57
57
  Requires-Dist: ruamel-yaml-clib>=0.2.8; platform_python_implementation == 'CPython'
58
58
  Requires-Dist: ruamel-yaml>=0.17.0
59
59
  Requires-Dist: sniffio<2.0.0,>=1.3.0
60
+ Requires-Dist: starlette>=1.0.1
60
61
  Requires-Dist: toml>=0.10.0
61
62
  Requires-Dist: typing-extensions<5.0.0,>=4.10.0
62
63
  Requires-Dist: uvicorn!=0.29.0,>=0.14.0
@@ -51,7 +51,7 @@ dependencies = [
51
51
  "pydantic>=2.10.1,<3.0.0,!=2.11.0,!=2.11.1,!=2.11.2,!=2.11.3,!=2.11.4",
52
52
  "pydantic_core>=2.12.0,<3.0.0",
53
53
  "pydantic_extra_types>=2.8.2,<3.0.0",
54
- "pydantic_settings>2.2.1,<3.0.0,!=2.9.0",
54
+ "pydantic_settings>=2.9.1,<3.0.0",
55
55
  "python-dateutil>=2.8.2,<3.0.0",
56
56
  "python-slugify>=5.0,<9.0",
57
57
  "pytz>=2021.1,<2027",
@@ -61,6 +61,7 @@ dependencies = [
61
61
  "ruamel.yaml>=0.17.0",
62
62
  "ruamel.yaml.clib>=0.2.8; platform_python_implementation == 'CPython'",
63
63
  "sniffio>=1.3.0,<2.0.0",
64
+ "starlette>=1.0.1",
64
65
  "toml>=0.10.0",
65
66
  "typing_extensions>=4.10.0,<5.0.0",
66
67
  "uvicorn>=0.14.0,!=0.29.0",
@@ -32,6 +32,7 @@ There is no formal public/private boundary beyond the `_` prefix convention. Mod
32
32
  - **Nested task submissions on a bounded `ThreadPoolTaskRunner` can deadlock.** When a worker task submits children and blocks on `.result()` while all `max_workers` threads are busy, the pool starves. `_warn_if_nested_submit_would_deadlock` detects this and emits a one-time warning — preserve this detection when changing pool management.
33
33
  - **Result storage resolves through three tiers, potentially making an API call.** `get_default_result_storage()` checks: (1) `PREFECT_DEFAULT_RESULT_STORAGE_BLOCK` setting, (2) server-configured default block (API call to the server's Configuration store), (3) local storage path. The API call is silently suppressed on any HTTP error. Engines use `_get_default_persist_result()` — not `should_persist_result()` — at context setup time to auto-enable persistence when a server default block is configured. Do not swap `_get_default_persist_result()` back to `should_persist_result()` in engine initialization paths; `should_persist_result()` does not consult the server default.
34
34
  - **`ResultRecordMetadata` tolerates unknown serializer types.** When loading persisted metadata, an unrecognized serializer `type` is converted to an `UnknownSerializer` placeholder rather than raising `ValidationError`. This allows inspecting result metadata when the serializer implementation is unavailable in the current environment. However, known serializer types with invalid fields still raise `ValidationError`. `UnknownSerializer.dumps()` and `UnknownSerializer.loads()` raise `RuntimeError` — the tolerance is for inspection only, not actual serialization/deserialization.
35
+ - **`ResultRecord` must be marked persisted after every storage write.** `ResultStore` calls `mark_persisted()` on every record it writes; `to_state_create` in `states.py` consults `is_persisted` as a fallback when `should_persist_result()` returns `False` (e.g., after run context teardown). Any new sync or async persist path that omits `mark_persisted()` will silently drop state metadata for already-written results.
35
36
  - **Flow-run suspension is enforced at orchestration boundaries.** Suspension is delivered via `FlowRunSuspensionRequest` and raised with `raise_if_flow_run_suspension_requested()`. When changing engines, futures, task runners, or generator execution, check before returning control to flow user code or proposing a flow state that could leave `Suspended`; keep sync/async paths aligned and avoid per-boundary API reads.
36
37
 
37
38
  ## Logging
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.7.3"
3
+ __build_date__ = "2026-06-01 15:46:19.050569+00:00"
4
+ __git_commit__ = "594f5f358dca889516a176be58d2f359b87802e6"
5
+ __dirty__ = False
@@ -16,6 +16,7 @@ from uuid import UUID
16
16
  from pydantic import (
17
17
  BaseModel,
18
18
  Field,
19
+ PrivateAttr,
19
20
  ValidationError,
20
21
  field_validator,
21
22
  model_validator,
@@ -105,6 +106,14 @@ class ResultRecord(BaseModel, Generic[R]):
105
106
 
106
107
  metadata: ResultRecordMetadata
107
108
  result: R
109
+ _persisted: bool = PrivateAttr(default=False)
110
+
111
+ @property
112
+ def is_persisted(self) -> bool:
113
+ return self._persisted
114
+
115
+ def mark_persisted(self) -> None:
116
+ self._persisted = True
108
117
 
109
118
  @property
110
119
  def expiration(self) -> DateTime | None:
@@ -137,6 +137,7 @@ from prefect.settings import (
137
137
  )
138
138
  from prefect.types._datetime import now
139
139
 
140
+ from prefect._internal.urls import strip_auth_from_url
140
141
  from prefect._internal.version_checking import (
141
142
  _api_version_check_key,
142
143
  _cache_api_version_check,
@@ -1132,7 +1133,9 @@ class PrefectClient(
1132
1133
  except Exception as e:
1133
1134
  if "Unauthorized" in str(e):
1134
1135
  raise e
1135
- raise RuntimeError(f"Failed to reach API at {self.api_url}") from e
1136
+ raise RuntimeError(
1137
+ f"Failed to reach API at {strip_auth_from_url(str(self.api_url))}"
1138
+ ) from e
1136
1139
 
1137
1140
  api_version = version.parse(api_version)
1138
1141
  client_version = version.parse(self.client_version())
@@ -1190,7 +1193,9 @@ class PrefectClient(
1190
1193
  f"{PREFECT_API_DATABASE_CONNECTION_URL.value()}"
1191
1194
  )
1192
1195
  else:
1193
- self.logger.debug(f"Connecting to API at {self.api_url}")
1196
+ self.logger.debug(
1197
+ f"Connecting to API at {strip_auth_from_url(str(self.api_url))}"
1198
+ )
1194
1199
 
1195
1200
  # Enter the httpx client's context
1196
1201
  await self._exit_stack.enter_async_context(self._client)
@@ -1519,7 +1524,9 @@ class SyncPrefectClient(
1519
1524
  except Exception as e:
1520
1525
  if "Unauthorized" in str(e):
1521
1526
  raise e
1522
- raise RuntimeError(f"Failed to reach API at {self.api_url}") from e
1527
+ raise RuntimeError(
1528
+ f"Failed to reach API at {strip_auth_from_url(str(self.api_url))}"
1529
+ ) from e
1523
1530
 
1524
1531
  api_version = version.parse(api_version)
1525
1532
  client_version = version.parse(self.client_version())
@@ -143,9 +143,14 @@ def _start_lease_renewal_thread(
143
143
  stop_event = threading.Event()
144
144
  renewal_ctx = contextvars.copy_context()
145
145
 
146
- def renewal_loop() -> None:
146
+ def _run_with_failure_handler() -> None:
147
+ # Runs inside renewal_ctx so the failure handler also sees the
148
+ # copied flow/task run contextvars; otherwise get_run_logger() in
149
+ # _handle_lease_renewal_failure can't find the run context and the
150
+ # message falls back to the plain "prefect.concurrency" logger,
151
+ # never reaching the run logs API.
147
152
  try:
148
- renewal_ctx.run(_lease_renewal_loop, lease_id, lease_duration, stop_event)
153
+ _lease_renewal_loop(lease_id, lease_duration, stop_event)
149
154
  except Exception as exc:
150
155
  if not stop_event.is_set():
151
156
  _handle_lease_renewal_failure(
@@ -156,6 +161,9 @@ def _start_lease_renewal_thread(
156
161
  cancel_scope,
157
162
  )
158
163
 
164
+ def renewal_loop() -> None:
165
+ renewal_ctx.run(_run_with_failure_handler)
166
+
159
167
  thread = threading.Thread(
160
168
  target=renewal_loop,
161
169
  daemon=True,
@@ -31,7 +31,7 @@ from websockets.exceptions import (
31
31
  import prefect.types._datetime
32
32
  from prefect._internal.version_checking import check_server_version
33
33
  from prefect._internal.websockets import websocket_connect
34
- from prefect.events import Event
34
+ from prefect.events.schemas.events import Event
35
35
  from prefect.logging import get_logger
36
36
  from prefect.settings import (
37
37
  PREFECT_API_KEY,
@@ -13,9 +13,9 @@ from typing_extensions import Self
13
13
 
14
14
  from prefect.client.schemas.filters import LogFilter, LogFilterFlowRunId
15
15
  from prefect.client.schemas.objects import TERMINAL_STATES, Log, StateType
16
- from prefect.events import Event
17
16
  from prefect.events.clients import get_events_subscriber
18
17
  from prefect.events.filters import EventAnyResourceFilter, EventFilter
18
+ from prefect.events.schemas.events import Event
19
19
  from prefect.logging.clients import get_logs_subscriber
20
20
 
21
21
  if TYPE_CHECKING:
@@ -16,7 +16,6 @@ from rich.highlighter import Highlighter, NullHighlighter
16
16
  from rich.theme import Theme
17
17
  from typing_extensions import Self
18
18
 
19
- import prefect.context
20
19
  from prefect._internal.concurrency.api import create_call, from_sync
21
20
  from prefect._internal.concurrency.event_loop import get_running_loop
22
21
  from prefect._internal.concurrency.services import BatchedQueueService
@@ -161,7 +160,9 @@ class APILogHandler(logging.Handler):
161
160
  Send a log to the `APILogWorker`
162
161
  """
163
162
  try:
164
- profile = prefect.context.get_settings_context()
163
+ from prefect.context import get_settings_context
164
+
165
+ profile = get_settings_context()
165
166
 
166
167
  if not profile.settings.logging.to_api.enabled:
167
168
  return # Respect the global settings toggle
@@ -214,7 +215,9 @@ class APILogHandler(logging.Handler):
214
215
 
215
216
  if not flow_run_id:
216
217
  try:
217
- context = prefect.context.get_run_context()
218
+ from prefect.context import get_run_context
219
+
220
+ context = get_run_context()
218
221
  except MissingContextError:
219
222
  raise MissingContextError(
220
223
  f"Logger {record.name!r} attempted to send logs to the API without"
@@ -699,6 +699,8 @@ class ResultStore(BaseModel):
699
699
  except Exception:
700
700
  return False
701
701
  else:
702
+ if self.result_storage is None:
703
+ self.result_storage = await aget_default_result_storage()
702
704
  try:
703
705
  content = await call_explicitly_async_block_method(
704
706
  self.result_storage, "read_path", (key,), {}
@@ -742,6 +744,8 @@ class ResultStore(BaseModel):
742
744
  except Exception:
743
745
  return False
744
746
  else:
747
+ if self.result_storage is None:
748
+ self.result_storage = get_default_result_storage(_sync=True)
745
749
  try:
746
750
  content = call_explicitly_sync_block_method(
747
751
  self.result_storage, "read_path", (key,), {}
@@ -863,6 +867,7 @@ class ResultStore(BaseModel):
863
867
 
864
868
  if self.cache_result_in_memory:
865
869
  self.cache[resolved_key_path] = result_record
870
+ result_record.mark_persisted()
866
871
  return result_record
867
872
 
868
873
  def _read(self, key: str, holder: str) -> "ResultRecord[Any]":
@@ -932,6 +937,7 @@ class ResultStore(BaseModel):
932
937
 
933
938
  if self.cache_result_in_memory:
934
939
  self.cache[resolved_key_path] = result_record
940
+ result_record.mark_persisted()
935
941
  return result_record
936
942
 
937
943
  def read(
@@ -1118,6 +1124,7 @@ class ResultStore(BaseModel):
1118
1124
  (result_record.metadata.storage_key,),
1119
1125
  {"content": result_record.serialize()},
1120
1126
  )
1127
+ result_record.mark_persisted()
1121
1128
  if self.cache_result_in_memory:
1122
1129
  self.cache[key] = result_record
1123
1130
 
@@ -1181,6 +1188,7 @@ class ResultStore(BaseModel):
1181
1188
  (result_record.metadata.storage_key,),
1182
1189
  {"content": result_record.serialize()},
1183
1190
  )
1191
+ result_record.mark_persisted()
1184
1192
  if self.cache_result_in_memory:
1185
1193
  self.cache[key] = result_record
1186
1194
 
@@ -138,7 +138,11 @@ These validations exist to prevent git argument injection. Do not bypass them wh
138
138
 
139
139
  **Env/sys.path isolation:** `_prepared_workspace_context` mutates `os.environ` and `sys.path` in the caller process but does NOT change `os.getcwd()`. The parent working directory is preserved.
140
140
 
141
- **Automatic `uv` command selection:** When no explicit command is passed, `WorkspaceResolvingEngineCommandStarter` auto-selects `uv run --project <project_root> -m prefect.flow_engine` but only when all three conditions hold: `pyproject.toml` exists at `project_root`, the `project.dependencies` list includes `prefect`, and `uv` is found via the workspace's `PATH` env var (not the system PATH). If any condition fails, the command falls back to `None`. Explicit commands always take precedence.
141
+ **Local path in-place execution:** When no pull steps are configured and the entrypoint file exists at `deployment.path` but not in the workspace root, `prepare_workspace` sets `working_directory` to the local path not under `workspace_root`. The workspace directory is still created but is not the execution root. This is the "image-baked" pattern: code lives at a fixed local path (e.g., inside a container), not in object storage.
142
+
143
+ **Pull-step directory fallback:** When pull steps run but none produces a `directory` output or changes CWD, `_ensure_entrypoint_in_workspace` copies storage into the workspace root as a fallback. This handles setup-only pull steps (e.g., `run_shell_script` for environment prep) that do not control the working directory themselves.
144
+
145
+ **Automatic dependency installation:** By default, `WorkspaceResolvingEngineCommandStarter` does not install dependencies before starting a flow run. When no explicit command is passed and `PREFECT_RUNNER_AUTO_INSTALL_DEPENDENCIES` is true, it auto-selects `uv run --no-default-groups --project <project_root> -m prefect.flow_engine` — but only when all three conditions hold: `pyproject.toml` exists at `project_root`, the `project.dependencies` list includes `prefect`, and `uv` is found via the workspace's `PATH` env var (not the system PATH). If the setting is false or any condition fails, the command falls back to `None`. Explicit commands always take precedence.
142
146
 
143
147
  ## Reference
144
148
 
@@ -174,6 +174,61 @@ def _workspace_destination_for_deployment_path(
174
174
  return (workspace_root / relative_destination).resolve()
175
175
 
176
176
 
177
+ def _resolve_local_runtime_directory(
178
+ path: str | None, source_cwd: Path, storage_base_path: Path | None
179
+ ) -> Path:
180
+ resolved_path = _resolve_local_deployment_path(path, source_cwd, storage_base_path)
181
+ return Path(resolved_path).resolve() if resolved_path is not None else source_cwd
182
+
183
+
184
+ def _entrypoint_file_path(entrypoint: str, working_directory: Path) -> Path | None:
185
+ entrypoint = _resolve_runtime_entrypoint(entrypoint)
186
+ if ":" not in entrypoint:
187
+ return None
188
+
189
+ path, _object_name = entrypoint.rsplit(":", 1)
190
+ if not path.endswith(".py"):
191
+ return None
192
+
193
+ entrypoint_path = Path(path).expanduser()
194
+ if not entrypoint_path.is_absolute():
195
+ entrypoint_path = working_directory / entrypoint_path
196
+ return entrypoint_path.resolve()
197
+
198
+
199
+ def _has_entrypoint_file(entrypoint: str, working_directory: Path) -> bool:
200
+ entrypoint_path = _entrypoint_file_path(entrypoint, working_directory)
201
+ return entrypoint_path is not None and entrypoint_path.is_file()
202
+
203
+
204
+ async def _ensure_entrypoint_in_workspace(
205
+ client: "PrefectClient",
206
+ deployment: "DeploymentResponse",
207
+ workspace_root: Path,
208
+ source_cwd: Path,
209
+ storage_base_path: Path | None,
210
+ ) -> Path:
211
+ if _has_entrypoint_file(deployment.entrypoint, workspace_root):
212
+ return workspace_root
213
+
214
+ local_runtime_directory = _resolve_local_runtime_directory(
215
+ deployment.path, source_cwd, storage_base_path
216
+ )
217
+ if not deployment.storage_document_id and not _has_entrypoint_file(
218
+ deployment.entrypoint, local_runtime_directory
219
+ ):
220
+ return workspace_root
221
+
222
+ await _pull_storage_into_workspace(
223
+ client,
224
+ deployment,
225
+ workspace_root,
226
+ source_cwd,
227
+ storage_base_path,
228
+ )
229
+ return workspace_root
230
+
231
+
177
232
  @contextlib.contextmanager
178
233
  def _redirect_stdout_to_stderr() -> Any:
179
234
  stdout = sys.stdout
@@ -218,9 +273,12 @@ async def _pull_storage_into_workspace(
218
273
  else None
219
274
  )
220
275
  else:
221
- from_path = _resolve_local_deployment_path(
276
+ resolved_local_path = _resolve_local_deployment_path(
222
277
  deployment.path, source_cwd, storage_base_path
223
278
  )
279
+ from_path = (
280
+ resolved_local_path if resolved_local_path is not None else str(source_cwd)
281
+ )
224
282
  storage_block = LocalFileSystem(basepath=from_path)
225
283
 
226
284
  LOGGER.info("Downloading flow code from storage at %r", from_path)
@@ -253,11 +311,17 @@ async def prepare_workspace(
253
311
  source_cwd,
254
312
  storage_base_path,
255
313
  )
256
- os.chdir(working_directory)
257
- working_directory = Path.cwd().resolve()
314
+ local_runtime_directory = _resolve_local_runtime_directory(
315
+ deployment.path, source_cwd, storage_base_path
316
+ )
317
+ if not _has_entrypoint_file(
318
+ deployment.entrypoint, working_directory
319
+ ) and _has_entrypoint_file(deployment.entrypoint, local_runtime_directory):
320
+ working_directory = local_runtime_directory
258
321
  else:
322
+ working_directory = resolved_workspace_root
323
+ step_selected_working_directory = False
259
324
  os.chdir(resolved_workspace_root)
260
- working_directory = Path.cwd().resolve()
261
325
  LOGGER.info("Running %s deployment pull step(s)", len(deployment.pull_steps))
262
326
 
263
327
  def _track_step_workspace(
@@ -266,17 +330,19 @@ async def prepare_workspace(
266
330
  step_start_cwd: Path | None,
267
331
  step_end_cwd: Path | None,
268
332
  ) -> None:
269
- nonlocal working_directory
333
+ nonlocal step_selected_working_directory, working_directory
270
334
 
271
335
  if isinstance(step_output, dict) and step_output.get("directory"):
272
336
  resolved_directory = _resolve_directory_output(
273
337
  step_output, step_end_cwd
274
338
  )
275
339
  if resolved_directory is not None:
340
+ step_selected_working_directory = True
276
341
  working_directory = resolved_directory
277
342
  return
278
343
 
279
344
  if step_end_cwd is not None and step_end_cwd != step_start_cwd:
345
+ step_selected_working_directory = True
280
346
  working_directory = step_end_cwd
281
347
 
282
348
  with _observe_step_completion(_track_step_workspace):
@@ -288,6 +354,18 @@ async def prepare_workspace(
288
354
  logger=LOGGER,
289
355
  )
290
356
 
357
+ if not step_selected_working_directory:
358
+ working_directory = await _ensure_entrypoint_in_workspace(
359
+ client,
360
+ deployment,
361
+ resolved_workspace_root,
362
+ source_cwd,
363
+ storage_base_path,
364
+ )
365
+
366
+ os.chdir(working_directory)
367
+ working_directory = Path.cwd().resolve()
368
+
291
369
  project_root = _find_project_root(working_directory, resolved_workspace_root)
292
370
  return PreparedWorkspace(
293
371
  workspace_root=resolved_workspace_root,
@@ -167,6 +167,9 @@ def _pyproject_declares_prefect_dependency(pyproject: Path) -> bool:
167
167
 
168
168
 
169
169
  def _uv_run_command(workspace: PreparedWorkspace) -> str | None:
170
+ if not get_current_settings().runner.auto_install_dependencies:
171
+ return None
172
+
170
173
  project_root = workspace.project_root
171
174
  if project_root is None:
172
175
  return None
@@ -188,6 +191,7 @@ def _uv_run_command(workspace: PreparedWorkspace) -> str | None:
188
191
  [
189
192
  uv_executable,
190
193
  "run",
194
+ "--no-default-groups",
191
195
  "--project",
192
196
  str(project_root),
193
197
  "-m",
@@ -1701,7 +1701,7 @@ class Runner:
1701
1701
  ):
1702
1702
  return self._deployment_registry.get_flow(flow_run.deployment_id)
1703
1703
  return await load_flow_from_flow_run(
1704
- self._client, flow_run, storage_base_path=str(self._tmp_dir)
1704
+ flow_run, storage_base_path=str(self._tmp_dir)
1705
1705
  )
1706
1706
 
1707
1707
  self._hook_runner = HookRunner(resolve_flow=_resolve_flow_for_hooks)
@@ -0,0 +1,86 @@
1
+ from __future__ import annotations
2
+
3
+ import importlib
4
+ from typing import TYPE_CHECKING
5
+
6
+ if TYPE_CHECKING:
7
+ from prefect.server.api import (
8
+ admin,
9
+ artifacts,
10
+ automations,
11
+ block_capabilities,
12
+ block_documents,
13
+ block_schemas,
14
+ block_types,
15
+ collections,
16
+ concurrency_limits,
17
+ concurrency_limits_v2,
18
+ csrf_token,
19
+ dependencies,
20
+ deployments,
21
+ events,
22
+ flow_run_states,
23
+ flow_runs,
24
+ flows,
25
+ logs,
26
+ middleware,
27
+ root,
28
+ run_history,
29
+ saved_searches,
30
+ server,
31
+ task_run_states,
32
+ task_runs,
33
+ task_workers,
34
+ templates,
35
+ ui,
36
+ variables,
37
+ work_queues,
38
+ workers,
39
+ )
40
+
41
+ __all__ = [
42
+ "admin",
43
+ "artifacts",
44
+ "automations",
45
+ "block_capabilities",
46
+ "block_documents",
47
+ "block_schemas",
48
+ "block_types",
49
+ "collections",
50
+ "concurrency_limits",
51
+ "concurrency_limits_v2",
52
+ "csrf_token",
53
+ "dependencies",
54
+ "deployments",
55
+ "events",
56
+ "flow_run_states",
57
+ "flow_runs",
58
+ "flows",
59
+ "logs",
60
+ "middleware",
61
+ "root",
62
+ "run_history",
63
+ "saved_searches",
64
+ "server",
65
+ "task_run_states",
66
+ "task_runs",
67
+ "task_workers",
68
+ "templates",
69
+ "ui",
70
+ "variables",
71
+ "work_queues",
72
+ "workers",
73
+ ]
74
+
75
+
76
+ def __getattr__(name: str) -> object:
77
+ module_name = f"{__name__}.{name}"
78
+ try:
79
+ module = importlib.import_module(module_name)
80
+ except ModuleNotFoundError as exc:
81
+ if exc.name != module_name:
82
+ raise
83
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}") from None
84
+
85
+ globals()[name] = module
86
+ return module
@@ -0,0 +1,85 @@
1
+ """Private helpers for UI static-file management during server startup."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import errno
6
+ import logging
7
+ import pathlib
8
+ import shutil
9
+ from dataclasses import dataclass
10
+ from typing import Literal
11
+
12
+ UIVersion = Literal["v1", "v2"]
13
+
14
+
15
+ @dataclass(frozen=True)
16
+ class UIBundle:
17
+ version: UIVersion
18
+ source_static_path: str
19
+ static_dir: str
20
+ base_url: str
21
+ cache_key: str
22
+ mount_name: str
23
+
24
+
25
+ def log_ui_static_copy_error(
26
+ bundle: UIBundle,
27
+ exc: OSError,
28
+ logger: logging.Logger,
29
+ ) -> None:
30
+ """Log an actionable error when copying a UI bundle's static files fails."""
31
+ if exc.errno == errno.ENOSPC:
32
+ try:
33
+ disk_path = pathlib.Path(bundle.static_dir)
34
+ while not disk_path.exists():
35
+ disk_path = disk_path.parent
36
+ usage = shutil.disk_usage(disk_path)
37
+ available_mb = usage.free / (1024 * 1024)
38
+ except OSError:
39
+ available_mb = None
40
+ try:
41
+ required_bytes = sum(
42
+ f.stat().st_size
43
+ for f in pathlib.Path(bundle.source_static_path).rglob("*")
44
+ if f.is_file()
45
+ )
46
+ required_mb = required_bytes / (1024 * 1024)
47
+ except OSError:
48
+ required_mb = None
49
+
50
+ space_detail = ""
51
+ if required_mb is not None and available_mb is not None:
52
+ space_detail = (
53
+ f" Required: {required_mb:.1f} MB, available: {available_mb:.1f} MB."
54
+ )
55
+ elif available_mb is not None:
56
+ space_detail = f" Available disk space: {available_mb:.1f} MB."
57
+
58
+ logger.error(
59
+ "Not enough disk space to unpack %s UI static"
60
+ " files at %s.%s To resolve this, increase the"
61
+ " size of the volume mounted at that path or set"
62
+ " PREFECT_UI_STATIC_DIRECTORY to a location with"
63
+ " sufficient space.",
64
+ bundle.version.upper(),
65
+ bundle.static_dir,
66
+ space_detail,
67
+ )
68
+ elif isinstance(exc, PermissionError):
69
+ logger.error(
70
+ "Failed to create %s UI static directory at %s:"
71
+ " %s. That UI will not be available. To resolve"
72
+ " this, set PREFECT_UI_STATIC_DIRECTORY to a"
73
+ " writable directory.",
74
+ bundle.version.upper(),
75
+ bundle.static_dir,
76
+ exc,
77
+ )
78
+ else:
79
+ logger.error(
80
+ "Failed to create %s UI static directory at %s:"
81
+ " %s. That UI will not be available.",
82
+ bundle.version.upper(),
83
+ bundle.static_dir,
84
+ exc,
85
+ )
@@ -21,11 +21,10 @@ import subprocess
21
21
  import sys
22
22
  import time
23
23
  from contextlib import AsyncExitStack, asynccontextmanager
24
- from dataclasses import dataclass
25
24
  from datetime import timedelta
26
25
  from functools import wraps
27
26
  from hashlib import sha256
28
- from typing import Any, AsyncGenerator, Awaitable, Callable, Literal, Optional
27
+ from typing import Any, AsyncGenerator, Awaitable, Callable, Optional
29
28
 
30
29
  import anyio
31
30
  import asyncpg
@@ -52,6 +51,7 @@ from prefect._internal.compatibility.starlette import status
52
51
  from prefect._internal.observability import configure_logfire
53
52
  from prefect.client.constants import SERVER_API_VERSION
54
53
  from prefect.logging import get_logger
54
+ from prefect.server.api._ui_static import UIBundle, UIVersion, log_ui_static_copy_error
55
55
  from prefect.server.api.background_workers import background_worker
56
56
  from prefect.server.api.dependencies import EnforceMinimumAPIVersion
57
57
  from prefect.server.exceptions import ObjectNotFoundError
@@ -128,7 +128,6 @@ SQLITE_LOCKED_MSG = "database is locked"
128
128
  UI_VERSION_COOKIE_NAME = "prefect_ui_version"
129
129
  UI_VERSION_PATH_SEGMENT = "v2"
130
130
  UI_STATIC_REFERENCE_FILE_NAME = "UI_SERVE_BASE"
131
- UIVersion = Literal["v1", "v2"]
132
131
 
133
132
 
134
133
  class _SQLiteLockedOperationalErrorFilter(logging.Filter):
@@ -183,16 +182,6 @@ class SPAStaticFiles(StaticFiles):
183
182
  return await super().get_response("./index.html", scope)
184
183
 
185
184
 
186
- @dataclass(frozen=True)
187
- class UIBundle:
188
- version: UIVersion
189
- source_static_path: str
190
- static_dir: str
191
- base_url: str
192
- cache_key: str
193
- mount_name: str
194
-
195
-
196
185
  def _normalize_ui_base_url(base_url: str) -> str:
197
186
  if not base_url:
198
187
  return "/"
@@ -749,15 +738,8 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
749
738
  if not reference_file_matches_cache_key(bundle):
750
739
  try:
751
740
  create_ui_static_subpath(bundle)
752
- except PermissionError as exc:
753
- logger.error(
754
- "Failed to create %s UI static directory at %s: %s. "
755
- "That UI will not be available. "
756
- "To resolve this, set PREFECT_UI_STATIC_DIRECTORY to a writable directory.",
757
- bundle.version.upper(),
758
- bundle.static_dir,
759
- exc,
760
- )
741
+ except OSError as exc:
742
+ log_ui_static_copy_error(bundle, exc, logger)
761
743
  continue
762
744
 
763
745
  mounted_bundles[bundle.version] = bundle