prefect-client 3.7.7.dev2__tar.gz → 3.7.8__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.7.dev2 → prefect_client-3.7.8}/PKG-INFO +2 -2
  2. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/pyproject.toml +1 -1
  3. prefect_client-3.7.8/src/prefect/_build_info.py +5 -0
  4. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/validators.py +27 -4
  5. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/_asyncio.py +55 -0
  6. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/clients.py +42 -6
  7. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_workspace_resolver.py +17 -12
  8. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/storage.py +45 -2
  9. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/_ui_static.py +0 -1
  10. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/server.py +3 -21
  11. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/workers.py +1 -0
  12. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/_transport.py +6 -1
  13. prefect_client-3.7.7.dev2/src/prefect/_build_info.py +0 -5
  14. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/.gitignore +0 -0
  15. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/LICENSE +0 -0
  16. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/README.md +0 -0
  17. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/hatch_build.py +0 -0
  18. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/.prefectignore +0 -0
  19. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/AGENTS.md +0 -0
  20. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/__init__.py +0 -0
  21. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/__main__.py +0 -0
  22. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/__init__.py +0 -0
  23. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/_launchers.py +0 -0
  24. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/bundles/__init__.py +0 -0
  25. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/bundles/execute.py +0 -0
  26. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/__init__.py +0 -0
  27. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/apply.py +0 -0
  28. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  29. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/manager.py +0 -0
  30. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/plugins/spec.py +0 -0
  31. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/sla/__init__.py +0 -0
  32. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/sla/client.py +0 -0
  33. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_experimental/sla/objects.py +0 -0
  34. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_flow_run_suspension.py +0 -0
  35. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/__init__.py +0 -0
  36. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/_logging.py +0 -0
  37. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/__init__.py +0 -0
  38. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  39. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/client.py +0 -0
  40. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/device_id.py +0 -0
  41. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/emit.py +0 -0
  42. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/enabled.py +0 -0
  43. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/events.py +0 -0
  44. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/milestones.py +0 -0
  45. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/notice.py +0 -0
  46. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/analytics/service.py +0 -0
  47. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/ast_utils.py +0 -0
  48. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/buildx.py +0 -0
  49. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/__init__.py +0 -0
  50. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  51. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/backports.py +0 -0
  52. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/blocks.py +0 -0
  53. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  54. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  55. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/migration.py +0 -0
  56. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/compatibility/starlette.py +0 -0
  57. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/__init__.py +0 -0
  58. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/api.py +0 -0
  59. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/calls.py +0 -0
  60. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  61. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  62. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/inspection.py +0 -0
  63. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/primitives.py +0 -0
  64. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/services.py +0 -0
  65. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/threads.py +0 -0
  66. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/concurrency/waiters.py +0 -0
  67. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/control_listener.py +0 -0
  68. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/deprecated.py +0 -0
  69. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/engine.py +0 -0
  70. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/git.py +0 -0
  71. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  72. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/installation.py +0 -0
  73. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/integrations.py +0 -0
  74. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/launchers.py +0 -0
  75. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/lazy.py +0 -0
  76. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/metrics.py +0 -0
  77. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/observability.py +0 -0
  78. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/observers.py +0 -0
  79. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/__init__.py +0 -0
  80. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/apply.py +0 -0
  81. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/collections.py +0 -0
  82. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  83. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/manager.py +0 -0
  84. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/spec.py +0 -0
  85. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/plugins/startup.py +0 -0
  86. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pydantic/__init__.py +0 -0
  87. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pydantic/schemas.py +0 -0
  88. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  89. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  90. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  91. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/pytz.py +0 -0
  92. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/result_records.py +0 -0
  93. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/retries.py +0 -0
  94. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schema.py +0 -0
  95. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/__init__.py +0 -0
  96. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/_registry.py +0 -0
  97. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/bases.py +0 -0
  98. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/fields.py +0 -0
  99. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/schemas/serializers.py +0 -0
  100. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  101. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/states.py +0 -0
  102. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/testing.py +0 -0
  103. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/urls.py +0 -0
  104. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/uuid7.py +0 -0
  105. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/version_checking.py +0 -0
  106. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/versioning.py +0 -0
  107. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/waiters.py +0 -0
  108. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_internal/websockets.py +0 -0
  109. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/__init__.py +0 -0
  110. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/fetcher.py +0 -0
  111. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/generator.py +0 -0
  112. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/models.py +0 -0
  113. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/naming.py +0 -0
  114. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/renderer.py +0 -0
  115. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/schema_converter.py +0 -0
  116. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/templates/__init__.py +0 -0
  117. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  118. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/types.py +0 -0
  119. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_sdk/unions.py +0 -0
  120. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_vendor/croniter/__init__.py +0 -0
  121. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/_vendor/croniter/croniter.py +0 -0
  122. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/agent.py +0 -0
  123. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/analytics/__init__.py +0 -0
  124. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/artifacts.py +0 -0
  125. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/assets/__init__.py +0 -0
  126. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/assets/core.py +0 -0
  127. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/assets/materialize.py +0 -0
  128. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/automations.py +0 -0
  129. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/AGENTS.md +0 -0
  130. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/__init__.py +0 -0
  131. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/abstract.py +0 -0
  132. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/core.py +0 -0
  133. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/fields.py +0 -0
  134. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/notifications.py +0 -0
  135. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/redis.py +0 -0
  136. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/system.py +0 -0
  137. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/blocks/webhook.py +0 -0
  138. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/__init__.py +0 -0
  139. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/_file_collector.py +0 -0
  140. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/_ignore_filter.py +0 -0
  141. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/_path_resolver.py +0 -0
  142. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/_zip_builder.py +0 -0
  143. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/_zip_extractor.py +0 -0
  144. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/bundles/execute.py +0 -0
  145. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/cache_policies.py +0 -0
  146. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/AGENTS.md +0 -0
  147. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/__init__.py +0 -0
  148. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/attribution.py +0 -0
  149. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/base.py +0 -0
  150. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/cloud.py +0 -0
  151. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/collections.py +0 -0
  152. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/constants.py +0 -0
  153. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/__init__.py +0 -0
  154. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  155. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  156. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  157. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_automations/client.py +0 -0
  158. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  159. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  160. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  161. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  162. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  163. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  164. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  165. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  166. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  167. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  168. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  169. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_events/client.py +0 -0
  170. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  171. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  172. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  173. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_flows/client.py +0 -0
  174. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  175. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_logs/client.py +0 -0
  176. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  177. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_variables/client.py +0 -0
  178. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  179. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  180. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/base.py +0 -0
  181. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/orchestration/routes.py +0 -0
  182. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/__init__.py +0 -0
  183. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/actions.py +0 -0
  184. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/events.py +0 -0
  185. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/filters.py +0 -0
  186. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/objects.py +0 -0
  187. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/responses.py +0 -0
  188. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/schedules.py +0 -0
  189. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/sorting.py +0 -0
  190. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/schemas/worker_channel.py +0 -0
  191. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/subscriptions.py +0 -0
  192. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/types/__init__.py +0 -0
  193. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  194. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/client/utilities.py +0 -0
  195. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/AGENTS.md +0 -0
  196. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/__init__.py +0 -0
  197. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/_events.py +0 -0
  198. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/_leases.py +0 -0
  199. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/_sync.py +0 -0
  200. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/asyncio.py +0 -0
  201. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/context.py +0 -0
  202. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/services.py +0 -0
  203. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/sync.py +0 -0
  204. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/__init__.py +0 -0
  205. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  206. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/_events.py +0 -0
  207. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/asyncio.py +0 -0
  208. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/context.py +0 -0
  209. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/services.py +0 -0
  210. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/concurrency/v1/sync.py +0 -0
  211. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/context.py +0 -0
  212. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/AGENTS.md +0 -0
  213. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/__init__.py +0 -0
  214. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/base.py +0 -0
  215. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/deployments.py +0 -0
  216. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/flow_runs.py +0 -0
  217. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/runner.py +0 -0
  218. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/schedules.py +0 -0
  219. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/steps/__init__.py +0 -0
  220. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/steps/core.py +0 -0
  221. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/steps/pull.py +0 -0
  222. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/deployments/steps/utility.py +0 -0
  223. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/docker/__init__.py +0 -0
  224. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/docker/_buildx.py +0 -0
  225. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/docker/docker_image.py +0 -0
  226. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/engine.py +0 -0
  227. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/AGENTS.md +0 -0
  228. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/__init__.py +0 -0
  229. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/actions.py +0 -0
  230. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/filters.py +0 -0
  231. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/related.py +0 -0
  232. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/schemas/__init__.py +0 -0
  233. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/schemas/automations.py +0 -0
  234. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  235. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/schemas/events.py +0 -0
  236. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/schemas/labelling.py +0 -0
  237. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/subscribers.py +0 -0
  238. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/utilities.py +0 -0
  239. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/events/worker.py +0 -0
  240. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/exceptions.py +0 -0
  241. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/filesystems.py +0 -0
  242. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/flow_engine.py +0 -0
  243. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/flow_runs.py +0 -0
  244. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/flows.py +0 -0
  245. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/futures.py +0 -0
  246. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/__init__.py +0 -0
  247. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/base.py +0 -0
  248. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  249. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  250. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  251. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  252. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  253. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  254. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/input/__init__.py +0 -0
  255. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/input/actions.py +0 -0
  256. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/input/run_input.py +0 -0
  257. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/locking/__init__.py +0 -0
  258. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/locking/_filelock.py +0 -0
  259. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/locking/filesystem.py +0 -0
  260. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/locking/memory.py +0 -0
  261. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/locking/protocol.py +0 -0
  262. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/AGENTS.md +0 -0
  263. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/__init__.py +0 -0
  264. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/clients.py +0 -0
  265. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/configuration.py +0 -0
  266. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/filters.py +0 -0
  267. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/formatters.py +0 -0
  268. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/handlers.py +0 -0
  269. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/highlighters.py +0 -0
  270. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/loggers.py +0 -0
  271. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/logging/logging.yml +0 -0
  272. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/main.py +0 -0
  273. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/plugins.py +0 -0
  274. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/py.typed +0 -0
  275. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/results.py +0 -0
  276. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/AGENTS.md +0 -0
  277. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/__init__.py +0 -0
  278. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_cancel_finalizer.py +0 -0
  279. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_cancellation_manager.py +0 -0
  280. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_control_channel.py +0 -0
  281. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_deployment_registry.py +0 -0
  282. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_event_emitter.py +0 -0
  283. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_flow_resolver.py +0 -0
  284. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_flow_run_executor.py +0 -0
  285. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_hook_runner.py +0 -0
  286. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_limit_manager.py +0 -0
  287. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_process_manager.py +0 -0
  288. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  289. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_starter_bundle.py +0 -0
  290. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_starter_direct.py +0 -0
  291. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_starter_engine.py +0 -0
  292. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_state_proposer.py +0 -0
  293. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/_workspace_starter.py +0 -0
  294. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/runner.py +0 -0
  295. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runner/server.py +0 -0
  296. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runtime/__init__.py +0 -0
  297. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runtime/deployment.py +0 -0
  298. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runtime/flow_run.py +0 -0
  299. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/runtime/task_run.py +0 -0
  300. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/schedules.py +0 -0
  301. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/serializers.py +0 -0
  302. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/__init__.py +0 -0
  303. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/admin.py +0 -0
  304. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/artifacts.py +0 -0
  305. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/automations.py +0 -0
  306. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/background_workers.py +0 -0
  307. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/block_capabilities.py +0 -0
  308. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/block_documents.py +0 -0
  309. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/block_schemas.py +0 -0
  310. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/block_types.py +0 -0
  311. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/clients.py +0 -0
  312. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/collections.py +0 -0
  313. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  314. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/concurrency_limits.py +0 -0
  315. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  316. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/csrf_token.py +0 -0
  317. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/dependencies.py +0 -0
  318. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/deployments.py +0 -0
  319. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/events.py +0 -0
  320. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/flow_run_states.py +0 -0
  321. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/flow_runs.py +0 -0
  322. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/flows.py +0 -0
  323. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/logs.py +0 -0
  324. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/middleware.py +0 -0
  325. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/root.py +0 -0
  326. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/run_history.py +0 -0
  327. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/saved_searches.py +0 -0
  328. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  329. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/task_run_states.py +0 -0
  330. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/task_runs.py +0 -0
  331. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/task_workers.py +0 -0
  332. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/templates.py +0 -0
  333. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/ui/__init__.py +0 -0
  334. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/ui/flow_runs.py +0 -0
  335. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/ui/flows.py +0 -0
  336. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/ui/schemas.py +0 -0
  337. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/ui/task_runs.py +0 -0
  338. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/validation.py +0 -0
  339. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/variables.py +0 -0
  340. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/server/api/work_queues.py +0 -0
  341. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/AGENTS.md +0 -0
  342. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/__init__.py +0 -0
  343. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/_types.py +0 -0
  344. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/base.py +0 -0
  345. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/constants.py +0 -0
  346. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/context.py +0 -0
  347. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/legacy.py +0 -0
  348. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/__init__.py +0 -0
  349. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/_defaults.py +0 -0
  350. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/api.py +0 -0
  351. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/cli.py +0 -0
  352. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/client.py +0 -0
  353. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/cloud.py +0 -0
  354. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/deployments.py +0 -0
  355. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/events.py +0 -0
  356. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/experiments.py +0 -0
  357. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/flows.py +0 -0
  358. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/internal.py +0 -0
  359. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/logging.py +0 -0
  360. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/plugins.py +0 -0
  361. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/results.py +0 -0
  362. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/root.py +0 -0
  363. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/runner.py +0 -0
  364. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/__init__.py +0 -0
  365. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/api.py +0 -0
  366. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/concurrency.py +0 -0
  367. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/database.py +0 -0
  368. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/deployments.py +0 -0
  369. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/docket.py +0 -0
  370. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/ephemeral.py +0 -0
  371. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/events.py +0 -0
  372. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  373. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/logs.py +0 -0
  374. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/root.py +0 -0
  375. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/services.py +0 -0
  376. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/tasks.py +0 -0
  377. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/ui.py +0 -0
  378. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/server/worker_channel.py +0 -0
  379. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/tasks.py +0 -0
  380. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/telemetry.py +0 -0
  381. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/testing.py +0 -0
  382. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/models/worker.py +0 -0
  383. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/profiles.py +0 -0
  384. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/profiles.toml +0 -0
  385. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/settings/sources.py +0 -0
  386. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/states.py +0 -0
  387. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/task_engine.py +0 -0
  388. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/task_runners.py +0 -0
  389. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/task_runs.py +0 -0
  390. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/task_worker.py +0 -0
  391. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/tasks.py +0 -0
  392. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/telemetry/__init__.py +0 -0
  393. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/telemetry/run_telemetry.py +0 -0
  394. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/transactions.py +0 -0
  395. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/types/__init__.py +0 -0
  396. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/types/_concurrency.py +0 -0
  397. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/types/_datetime.py +0 -0
  398. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/types/entrypoint.py +0 -0
  399. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/types/names.py +0 -0
  400. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/AGENTS.md +0 -0
  401. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/__init__.py +0 -0
  402. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/annotations.py +0 -0
  403. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  404. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  405. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/callables/AGENTS.md +0 -0
  406. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/callables/__init__.py +0 -0
  407. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/collections.py +0 -0
  408. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/compat.py +0 -0
  409. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/context.py +0 -0
  410. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/dispatch.py +0 -0
  411. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/dockerutils.py +0 -0
  412. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/engine/AGENTS.md +0 -0
  413. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/engine/__init__.py +0 -0
  414. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  415. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/filesystem/__init__.py +0 -0
  416. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/generics.py +0 -0
  417. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/hashing.py +0 -0
  418. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/importtools.py +0 -0
  419. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/math.py +0 -0
  420. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/names.py +0 -0
  421. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  422. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/processutils/__init__.py +0 -0
  423. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/pydantic.py +0 -0
  424. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/render_swagger.py +0 -0
  425. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  426. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  427. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  428. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/schema_tools/validation.py +0 -0
  429. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/services.py +0 -0
  430. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/slugify.py +0 -0
  431. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/templating/AGENTS.md +0 -0
  432. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/templating/__init__.py +0 -0
  433. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/text.py +0 -0
  434. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/timeout.py +0 -0
  435. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/urls.py +0 -0
  436. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/utilities/visualization.py +0 -0
  437. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/variables.py +0 -0
  438. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/AGENTS.md +0 -0
  439. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/__init__.py +0 -0
  440. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_cleanup.py +0 -0
  441. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_cleanup_handlers.py +0 -0
  442. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  443. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  444. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/_state.py +0 -0
  445. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  446. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/base.py +0 -0
  447. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/block.py +0 -0
  448. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/cloud.py +0 -0
  449. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/process.py +0 -0
  450. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/src/prefect/workers/server.py +0 -0
  451. {prefect_client-3.7.7.dev2 → prefect_client-3.7.8}/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.7.dev2
3
+ Version: 3.7.8
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
@@ -29,7 +29,7 @@ Requires-Dist: cloudpickle<4.0,>=2.0
29
29
  Requires-Dist: coolname<6.0.0,>=1.0.4
30
30
  Requires-Dist: dateparser<2.0.0,>=1.1.1
31
31
  Requires-Dist: exceptiongroup>=1.0.0
32
- Requires-Dist: fastapi<1.0.0,>=0.111.0
32
+ Requires-Dist: fastapi<1.0.0,>=0.139.0
33
33
  Requires-Dist: fsspec>=2022.5.0
34
34
  Requires-Dist: graphviz>=0.20.1
35
35
  Requires-Dist: griffe<3.0.0,>=0.49.0
@@ -33,7 +33,7 @@ dependencies = [
33
33
  "coolname>=1.0.4,<6.0.0",
34
34
  "dateparser>=1.1.1,<2.0.0",
35
35
  "exceptiongroup>=1.0.0",
36
- "fastapi>=0.111.0,<1.0.0",
36
+ "fastapi>=0.139.0,<1.0.0",
37
37
  "fsspec>=2022.5.0",
38
38
  "graphviz>=0.20.1",
39
39
  "griffe>=0.49.0,<3.0.0",
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.7.8"
3
+ __build_date__ = "2026-07-09 21:28:27.023860+00:00"
4
+ __git_commit__ = "b75c0606bf7606d9bafcfb89a36ae2e01a03c2d1"
5
+ __dirty__ = False
@@ -321,6 +321,7 @@ def normalize_rrule_string(
321
321
  rrule_string: str,
322
322
  *,
323
323
  now: Optional[datetime.datetime] = None,
324
+ timezone: Optional[str] = None,
324
325
  ) -> str:
325
326
  """Inject a `DTSTART` line into an rrule string if it doesn't already have one.
326
327
 
@@ -350,8 +351,16 @@ def normalize_rrule_string(
350
351
  datetimes, ~3 MB).
351
352
 
352
353
  Strings that already contain a `DTSTART` are returned unchanged.
354
+
355
+ The injected anchor is written as a floating (offset-less) `DTSTART`,
356
+ which `RRuleSchedule.to_rrule` later relabels with the schedule's
357
+ timezone. `timezone` is the schedule's IANA timezone (defaulting to
358
+ UTC); the recent anchor's wall-clock digits are computed in it so the
359
+ floating anchor lands on the intended local instant rather than being
360
+ shifted by the timezone's UTC offset (PrefectHQ/prefect#22455).
353
361
  """
354
362
  import dateutil.rrule
363
+ import dateutil.tz
355
364
 
356
365
  # Already anchored — leave it alone.
357
366
  if "DTSTART" in rrule_string.upper():
@@ -400,10 +409,22 @@ def normalize_rrule_string(
400
409
  unit_seconds = 1 if freq == dateutil.rrule.SECONDLY else 60
401
410
  period_seconds = unit_seconds * interval
402
411
 
412
+ # The injected `DTSTART` is serialized as floating (no offset/`Z`) and
413
+ # `RRuleSchedule.to_rrule` later relabels it with the schedule's timezone
414
+ # via `.replace(tzinfo=...)`, which keeps the wall-clock digits without
415
+ # converting the offset. The anchor's wall-clock digits must therefore be
416
+ # computed in the schedule's own timezone; computing them in UTC shifts
417
+ # every occurrence forward by the timezone's offset, suppressing runs on
418
+ # the deploy day (PrefectHQ/prefect#22455).
419
+ anchor_tz = dateutil.tz.gettz(timezone) if timezone else datetime.timezone.utc
420
+ if anchor_tz is None:
421
+ anchor_tz = datetime.timezone.utc
422
+
403
423
  if now is None:
404
- now = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
405
- elif now.tzinfo is not None:
406
- now = now.astimezone(datetime.timezone.utc).replace(tzinfo=None)
424
+ now = datetime.datetime.now(datetime.timezone.utc)
425
+ if now.tzinfo is None:
426
+ now = now.replace(tzinfo=datetime.timezone.utc)
427
+ now = now.astimezone(anchor_tz).replace(tzinfo=None)
407
428
 
408
429
  delta_seconds = (now - DEFAULT_RRULE_ANCHOR).total_seconds()
409
430
  if delta_seconds <= 0:
@@ -443,7 +464,9 @@ def normalize_schedule_rrule(schedule: _T) -> _T:
443
464
  rrule = getattr(schedule, "rrule", None)
444
465
  if not isinstance(rrule, str):
445
466
  return schedule
446
- normalized = normalize_rrule_string(rrule)
467
+ normalized = normalize_rrule_string(
468
+ rrule, timezone=getattr(schedule, "timezone", None)
469
+ )
447
470
  if normalized == rrule:
448
471
  return schedule
449
472
  return type(schedule)(rrule=normalized, timezone=schedule.timezone) # type: ignore[call-arg]
@@ -43,6 +43,51 @@ class AcquireConcurrencySlotTimeoutError(TimeoutError):
43
43
  logger: logging.Logger = get_logger("concurrency")
44
44
 
45
45
 
46
+ def _format_http_status_error(exc: httpx.HTTPStatusError) -> str:
47
+ """Format an HTTP status error from the server into a compact string.
48
+
49
+ Handles both Prefect API payloads (`exception_detail`) and raw FastAPI
50
+ payloads (`detail`), extracting Pydantic-style validation errors and
51
+ dropping the leading `body` location component.
52
+ """
53
+ status_code = exc.response.status_code
54
+ reason = exc.response.reason_phrase
55
+ status_text = f"{status_code} {reason}" if reason else str(status_code)
56
+
57
+ try:
58
+ body = exc.response.json()
59
+ except Exception:
60
+ body = None
61
+
62
+ messages: list[str] = []
63
+ if isinstance(body, dict):
64
+ errors = body.get("exception_detail") or body.get("detail")
65
+ if isinstance(errors, list):
66
+ for error in errors:
67
+ if not isinstance(error, dict):
68
+ continue
69
+ msg = error.get("msg")
70
+ if not isinstance(msg, str):
71
+ continue
72
+ loc = error.get("loc")
73
+ if isinstance(loc, (list, tuple)) and loc:
74
+ if loc[0] == "body":
75
+ loc = loc[1:]
76
+ field = ".".join(str(part) for part in loc)
77
+ else:
78
+ field = ""
79
+ if field:
80
+ messages.append(f"{field}: {msg}")
81
+ else:
82
+ messages.append(msg)
83
+ elif isinstance(errors, str):
84
+ messages.append(errors)
85
+
86
+ if messages:
87
+ return f"{status_text}: {'; '.join(messages)}"
88
+ return status_text
89
+
90
+
46
91
  async def aacquire_concurrency_slots(
47
92
  names: list[str],
48
93
  slots: int,
@@ -59,6 +104,11 @@ async def aacquire_concurrency_slots(
59
104
  raise AcquireConcurrencySlotTimeoutError(
60
105
  f"Attempt to acquire concurrency slots timed out after {timeout_seconds} second(s)"
61
106
  ) from timeout
107
+ except httpx.HTTPStatusError as exc:
108
+ raise ConcurrencySlotAcquisitionError(
109
+ f"Unable to acquire concurrency slots on {names!r}: "
110
+ f"{_format_http_status_error(exc)}"
111
+ ) from exc
62
112
  except Exception as exc:
63
113
  raise ConcurrencySlotAcquisitionError(
64
114
  f"Unable to acquire concurrency slots on {names!r}"
@@ -104,6 +154,11 @@ async def aacquire_concurrency_slots_with_lease(
104
154
  raise AcquireConcurrencySlotTimeoutError(
105
155
  f"Attempt to acquire concurrency slots timed out after {timeout_seconds} second(s)"
106
156
  ) from timeout
157
+ except httpx.HTTPStatusError as exc:
158
+ raise ConcurrencySlotAcquisitionError(
159
+ f"Unable to acquire concurrency slots on {names!r}: "
160
+ f"{_format_http_status_error(exc)}"
161
+ ) from exc
107
162
  except Exception as exc:
108
163
  raise ConcurrencySlotAcquisitionError(
109
164
  f"Unable to acquire concurrency slots on {names!r}"
@@ -436,8 +436,17 @@ class PrefectEventsClient(EventsClient):
436
436
  # Clear the unconfirmed events here, because they are going back through emit
437
437
  # and will be added again through the normal checkpointing process
438
438
  self._unconfirmed_events = []
439
- for event in events_to_resend:
440
- await self.emit(event)
439
+ try:
440
+ while events_to_resend:
441
+ event = events_to_resend.pop(0)
442
+ await self.emit(event)
443
+ except Exception:
444
+ # If a resend fails partway through (emit() has its own retry
445
+ # budget), restore the events that were never attempted so a later
446
+ # reconnect can retry them. The event whose emit() failed was
447
+ # already added back to the buffer by emit() itself.
448
+ self._unconfirmed_events.extend(events_to_resend)
449
+ raise
441
450
  logger.debug("Finished resending unconfirmed events.")
442
451
  self._start_checkpoint_task()
443
452
 
@@ -452,17 +461,44 @@ class PrefectEventsClient(EventsClient):
452
461
 
453
462
  async def _checkpoint_loop(self) -> None:
454
463
  """Periodically checkpoint unconfirmed events on a time interval,
455
- independent of the count-based checkpoint in _checkpoint."""
464
+ independent of the count-based checkpoint in _checkpoint.
465
+
466
+ If the connection has been lost (e.g. a server restart closed it),
467
+ reconnects and resends the unconfirmed events rather than leaving them
468
+ stranded until the next emit."""
456
469
  while True:
457
470
  await asyncio.sleep(self._checkpoint_interval)
458
- if self._websocket and self._unconfirmed_events:
459
- try:
471
+ if not self._unconfirmed_events:
472
+ continue
473
+ try:
474
+ if self._websocket:
460
475
  await self._force_checkpoint()
476
+ continue
477
+ # The connection was lost while events were still unconfirmed;
478
+ # reconnect to resend them rather than waiting for the next emit.
479
+ await self._reconnect()
480
+ except ConnectionClosed:
481
+ # The connection died since the last checkpoint; reconnect and
482
+ # resend the unconfirmed events. _reconnect() tears down the
483
+ # dead connection before connecting again.
484
+ try:
485
+ await self._reconnect()
461
486
  except Exception:
462
487
  logger.debug(
463
- "Time-based checkpoint failed, will retry next interval.",
488
+ "Reconnecting during time-based checkpoint failed, "
489
+ "will retry next interval.",
464
490
  exc_info=True,
465
491
  )
492
+ continue
493
+ except Exception:
494
+ logger.debug(
495
+ "Time-based checkpoint failed, will retry next interval.",
496
+ exc_info=True,
497
+ )
498
+ continue
499
+ # A successful _reconnect() resent the unconfirmed events and
500
+ # started a replacement checkpoint task, so this task is done.
501
+ return
466
502
 
467
503
  async def _force_checkpoint(self) -> None:
468
504
  """Checkpoint all unconfirmed events unconditionally."""
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import argparse
4
- import builtins
5
4
  import contextlib
6
5
  import os
7
6
  import sys
@@ -20,7 +19,8 @@ from prefect.deployments.steps.core import (
20
19
  run_steps,
21
20
  )
22
21
  from prefect.filesystems import LocalFileSystem
23
- from prefect.logging.loggers import get_logger
22
+ from prefect.logging.handlers import APILogHandler
23
+ from prefect.logging.loggers import PrefectLogAdapter, flow_run_logger
24
24
  from prefect.utilities.filesystem import relative_path_to_current_platform
25
25
  from prefect.utilities.processutils import get_sys_executable
26
26
 
@@ -29,7 +29,6 @@ if TYPE_CHECKING:
29
29
  from prefect.client.schemas.objects import FlowRun
30
30
  from prefect.client.schemas.responses import DeploymentResponse
31
31
 
32
- LOGGER = get_logger("prefect.runner.workspace_resolver")
33
32
  STORAGE_BASE_PATH_PLACEHOLDER = "$STORAGE_BASE_PATH"
34
33
 
35
34
 
@@ -67,11 +66,6 @@ def get_workspace_resolver_command(
67
66
  ]
68
67
 
69
68
 
70
- def _stderr_print(*args: Any, **kwargs: Any) -> None:
71
- kwargs.pop("style", None)
72
- builtins.print(*args, file=sys.stderr, **kwargs)
73
-
74
-
75
69
  def _resolve_runtime_entrypoint(entrypoint: str) -> str:
76
70
  if ":" not in entrypoint:
77
71
  return entrypoint
@@ -211,6 +205,7 @@ async def _ensure_entrypoint_in_workspace(
211
205
  workspace_root: Path,
212
206
  source_cwd: Path,
213
207
  storage_base_path: Path | None,
208
+ logger: PrefectLogAdapter,
214
209
  ) -> Path:
215
210
  if _has_entrypoint_file(deployment.entrypoint, workspace_root):
216
211
  return workspace_root
@@ -229,6 +224,7 @@ async def _ensure_entrypoint_in_workspace(
229
224
  workspace_root,
230
225
  source_cwd,
231
226
  storage_base_path,
227
+ logger,
232
228
  )
233
229
  return workspace_root
234
230
 
@@ -259,6 +255,7 @@ async def _pull_storage_into_workspace(
259
255
  workspace_root: Path,
260
256
  source_cwd: Path,
261
257
  storage_base_path: Path | None,
258
+ logger: PrefectLogAdapter,
262
259
  ) -> Path:
263
260
  local_path = _workspace_destination_for_deployment_path(
264
261
  deployment.path, workspace_root, storage_base_path
@@ -285,7 +282,7 @@ async def _pull_storage_into_workspace(
285
282
  )
286
283
  storage_block = LocalFileSystem(basepath=from_path)
287
284
 
288
- LOGGER.info("Downloading flow code from storage at %r", from_path)
285
+ logger.info("Downloading flow code from storage at %r", from_path)
289
286
  await storage_block.get_directory(from_path=from_path, local_path=str(local_path))
290
287
  return local_path
291
288
 
@@ -301,6 +298,8 @@ async def prepare_workspace(
301
298
  f"Deployment {deployment.id} does not have an entrypoint and can not be run."
302
299
  )
303
300
 
301
+ run_logger = flow_run_logger(flow_run)
302
+
304
303
  source_cwd = Path.cwd().resolve()
305
304
  storage_base_path = _get_configured_storage_base_path()
306
305
  resolved_workspace_root = Path(workspace_root).expanduser().resolve()
@@ -314,6 +313,7 @@ async def prepare_workspace(
314
313
  resolved_workspace_root,
315
314
  source_cwd,
316
315
  storage_base_path,
316
+ run_logger,
317
317
  )
318
318
  local_runtime_directory = _resolve_local_runtime_directory(
319
319
  deployment.path, source_cwd, storage_base_path
@@ -326,7 +326,9 @@ async def prepare_workspace(
326
326
  working_directory = resolved_workspace_root
327
327
  step_selected_working_directory = False
328
328
  os.chdir(resolved_workspace_root)
329
- LOGGER.info("Running %s deployment pull step(s)", len(deployment.pull_steps))
329
+ run_logger.info(
330
+ "Running %s deployment pull step(s)", len(deployment.pull_steps)
331
+ )
330
332
 
331
333
  def _track_step_workspace(
332
334
  _step: dict[str, Any],
@@ -359,10 +361,10 @@ async def prepare_workspace(
359
361
  with _observe_step_completion(_track_step_workspace):
360
362
  await run_steps(
361
363
  deployment.pull_steps,
362
- print_function=_stderr_print,
364
+ print_function=run_logger.warning,
363
365
  deployment=deployment,
364
366
  flow_run=flow_run,
365
- logger=LOGGER,
367
+ logger=run_logger,
366
368
  )
367
369
  finally:
368
370
  _PULL_STEP_SOURCE_CWD.reset(source_cwd_token)
@@ -374,6 +376,7 @@ async def prepare_workspace(
374
376
  resolved_workspace_root,
375
377
  source_cwd,
376
378
  storage_base_path,
379
+ run_logger,
377
380
  )
378
381
 
379
382
  os.chdir(working_directory)
@@ -436,6 +439,8 @@ async def _main_async(argv: list[str] | None = None) -> int:
436
439
  sys.stdout.write(result.model_dump_json())
437
440
  sys.stdout.write("\n")
438
441
  return 1
442
+ finally:
443
+ await APILogHandler.aflush()
439
444
 
440
445
  result = PreparedWorkspaceResult(status="success", workspace=workspace)
441
446
  sys.stdout.write(result.model_dump_json())
@@ -1,8 +1,11 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import os
3
4
  import re
4
5
  import shutil
6
+ import stat
5
7
  import subprocess
8
+ import sys
6
9
  import warnings
7
10
  from copy import deepcopy
8
11
  from pathlib import Path
@@ -31,6 +34,41 @@ from prefect.logging.loggers import get_logger
31
34
  from prefect.utilities.collections import visit_collection
32
35
 
33
36
 
37
+ def _clear_read_only_attributes(path: Path) -> None:
38
+ """
39
+ Recursively clear the read-only attribute on files within a directory.
40
+
41
+ On Windows, git writes pack and loose object files as read-only (mode
42
+ `0o444`). A subsequent `git pull` that needs to repack or replace those
43
+ files then fails with `[WinError 5] Access is denied`. Marking the files
44
+ as writable beforehand lets git manage them. This is a no-op on
45
+ non-Windows platforms, where read-only object files do not block git.
46
+ """
47
+ if sys.platform != "win32":
48
+ return
49
+ if not path.exists():
50
+ return
51
+ for entry in path.rglob("*"):
52
+ try:
53
+ if entry.is_file() and not entry.is_symlink():
54
+ os.chmod(entry, stat.S_IWRITE | stat.S_IREAD)
55
+ except OSError:
56
+ # Best effort: if a single file can't be made writable, let git
57
+ # surface the underlying error rather than masking it here.
58
+ continue
59
+
60
+
61
+ def _rmtree_including_read_only(path: Path) -> None:
62
+ """
63
+ Remove a directory tree, first clearing read-only attributes so that
64
+ read-only git object files (mode `0o444` on Windows) do not raise
65
+ `[WinError 5] Access is denied` during deletion. This is a plain
66
+ `shutil.rmtree` on non-Windows platforms.
67
+ """
68
+ _clear_read_only_attributes(path)
69
+ shutil.rmtree(path)
70
+
71
+
34
72
  @runtime_checkable
35
73
  class RunnerStorage(Protocol):
36
74
  """
@@ -393,6 +431,11 @@ class GitRepository:
393
431
  f"does not match the configured repository {configured_repo_url}"
394
432
  )
395
433
 
434
+ # On Windows, git object files are read-only, which prevents git
435
+ # from repacking or replacing them during a pull. Clear the
436
+ # read-only attribute first to avoid `[WinError 5] Access is denied`.
437
+ _clear_read_only_attributes(git_dir)
438
+
396
439
  # Sparsely checkout the repository if directories are specified and the repo is not in sparse-checkout mode already
397
440
  if self._directories and not await self.is_sparsely_checked_out():
398
441
  await run_process(
@@ -423,7 +466,7 @@ class GitRepository:
423
466
  self._logger.error(
424
467
  f"Failed to fetch latest changes with exit code {exc}"
425
468
  )
426
- shutil.rmtree(self.destination)
469
+ _rmtree_including_read_only(self.destination)
427
470
  await self._clone_repo()
428
471
 
429
472
  await run_process(
@@ -449,7 +492,7 @@ class GitRepository:
449
492
  self._logger.error(
450
493
  f"Failed to pull latest changes with exit code {exc}"
451
494
  )
452
- shutil.rmtree(self.destination)
495
+ _rmtree_including_read_only(self.destination)
453
496
  await self._clone_repo()
454
497
 
455
498
  else:
@@ -19,7 +19,6 @@ class UIBundle:
19
19
  static_dir: str
20
20
  base_url: str
21
21
  cache_key: str
22
- mount_name: str
23
22
 
24
23
 
25
24
  def log_ui_static_copy_error(
@@ -43,7 +43,6 @@ from fastapi.openapi.utils import get_openapi
43
43
  from fastapi.responses import JSONResponse, RedirectResponse
44
44
  from fastapi.staticfiles import StaticFiles
45
45
  from packaging.version import Version
46
- from starlette.exceptions import HTTPException
47
46
  from typing_extensions import Self
48
47
 
49
48
  import prefect
@@ -176,21 +175,6 @@ def _install_sqlite_locked_log_filter() -> None:
176
175
  _SQLITE_LOCKED_LOG_FILTER = filter_
177
176
 
178
177
 
179
- class SPAStaticFiles(StaticFiles):
180
- """
181
- Implementation of `StaticFiles` for serving single page applications.
182
-
183
- Adds `get_response` handling to ensure that when a resource isn't found the
184
- application still returns the index.
185
- """
186
-
187
- async def get_response(self, path: str, scope: Any) -> Response:
188
- try:
189
- return await super().get_response(path, scope)
190
- except HTTPException:
191
- return await super().get_response("./index.html", scope)
192
-
193
-
194
178
  def _normalize_ui_base_url(base_url: str) -> str:
195
179
  if not base_url:
196
180
  return "/"
@@ -616,7 +600,6 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
616
600
  static_dir=build_static_dir("v1", str(prefect.__ui_static_subpath__)),
617
601
  base_url=v1_base_url,
618
602
  cache_key=f"v1:{prefect.__version__}:{v1_base_url}",
619
- mount_name="ui_v1",
620
603
  ),
621
604
  UIBundle(
622
605
  version="v2",
@@ -624,7 +607,6 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
624
607
  static_dir=build_static_dir("v2", str(prefect.__ui_v2_static_subpath__)),
625
608
  base_url=v2_base_url,
626
609
  cache_key=f"v2:{prefect.__version__}:{v2_base_url}",
627
- mount_name="ui_v2",
628
610
  ),
629
611
  ]
630
612
 
@@ -767,10 +749,10 @@ def create_ui_app(ephemeral: bool) -> FastAPI:
767
749
  if bundle is None:
768
750
  continue
769
751
 
770
- ui_app.mount(
752
+ ui_app.frontend(
771
753
  bundle.base_url,
772
- SPAStaticFiles(directory=bundle.static_dir),
773
- name=bundle.mount_name,
754
+ directory=bundle.static_dir,
755
+ fallback="index.html",
774
756
  )
775
757
 
776
758
  return ui_app
@@ -1148,6 +1148,7 @@ async def worker_channel_connect(
1148
1148
  work_pool_id=ready.payload.initial_snapshot.work_pool.id,
1149
1149
  consumer_id=hello.payload.consumer_id,
1150
1150
  worker_name=hello.payload.worker_name,
1151
+ work_pool_updated=ready.payload.initial_snapshot.work_pool.updated,
1151
1152
  cleanup_queue=(
1152
1153
  cleanup_queue
1153
1154
  if CLEANUP_DELIVERY_CAPABILITY
@@ -143,7 +143,12 @@ class WorkerChannelTransport:
143
143
 
144
144
  status_code = self._status_code_from_exception(exc)
145
145
  if status_code is not None:
146
- if status_code in {401, 403}:
146
+ if status_code == 401:
147
+ return WorkerChannelTerminalError(
148
+ WorkerChannelCloseReason.AUTHENTICATION_FAILED.value,
149
+ "Worker channel setup was rejected by the server",
150
+ )
151
+ if status_code == 403:
147
152
  return WorkerChannelTerminalError(
148
153
  WorkerChannelCloseReason.AUTHORIZATION_FAILED.value,
149
154
  "Worker channel setup was rejected by the server",
@@ -1,5 +0,0 @@
1
- # Generated by versioningit
2
- __version__ = "3.7.7.dev2"
3
- __build_date__ = "2026-07-02 09:09:49.619469+00:00"
4
- __git_commit__ = "ab6a0dc6d01900814612a11dc41d0d80c9549112"
5
- __dirty__ = False