prefect-client 3.8.8.dev4__tar.gz → 3.8.9.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/PKG-INFO +3 -4
  2. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/README.md +1 -1
  3. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/pyproject.toml +1 -2
  4. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/__init__.py +3 -3
  5. prefect_client-3.8.9.dev2/src/prefect/_build_info.py +5 -0
  6. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/_logging.py +1 -7
  7. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/collections.py +24 -4
  8. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/manager.py +1 -7
  9. prefect_client-3.8.9.dev2/src/prefect/_internal/server_maintenance.py +58 -0
  10. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/core.py +1 -4
  11. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/__init__.py +5 -9
  12. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/base.py +17 -0
  13. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/__init__.py +3 -3
  14. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/base.py +6 -0
  15. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/filesystems.py +16 -10
  16. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/formatters.py +2 -5
  17. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/loggers.py +1 -5
  18. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/AGENTS.md +4 -0
  19. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/server.py +7 -2
  20. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/callables/__init__.py +1 -1
  21. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/filesystem/AGENTS.md +1 -1
  22. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/filesystem/__init__.py +10 -1
  23. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/AGENTS.md +1 -0
  24. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/base.py +56 -32
  25. prefect_client-3.8.9.dev2/src/prefect/workers/server.py +128 -0
  26. prefect_client-3.8.8.dev4/src/prefect/_build_info.py +0 -5
  27. prefect_client-3.8.8.dev4/src/prefect/workers/server.py +0 -66
  28. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/.gitignore +0 -0
  29. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/LICENSE +0 -0
  30. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/hatch_build.py +0 -0
  31. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/.prefectignore +0 -0
  32. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/AGENTS.md +0 -0
  33. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/__main__.py +0 -0
  34. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/__init__.py +0 -0
  35. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/_launchers.py +0 -0
  36. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/bundles/__init__.py +0 -0
  37. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/bundles/execute.py +0 -0
  38. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/plugins/__init__.py +0 -0
  39. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/plugins/apply.py +0 -0
  40. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  41. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/plugins/manager.py +0 -0
  42. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/plugins/spec.py +0 -0
  43. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/sla/__init__.py +0 -0
  44. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/sla/client.py +0 -0
  45. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_experimental/sla/objects.py +0 -0
  46. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_flow_run_suspension.py +0 -0
  47. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/__init__.py +0 -0
  48. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/__init__.py +0 -0
  49. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  50. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/client.py +0 -0
  51. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/device_id.py +0 -0
  52. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/emit.py +0 -0
  53. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/enabled.py +0 -0
  54. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/events.py +0 -0
  55. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/milestones.py +0 -0
  56. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/notice.py +0 -0
  57. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/analytics/service.py +0 -0
  58. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/ast_utils.py +0 -0
  59. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/attempt_control.py +0 -0
  60. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/buildx.py +0 -0
  61. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/__init__.py +0 -0
  62. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  63. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/backports.py +0 -0
  64. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/blocks.py +0 -0
  65. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  66. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  67. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/migration.py +0 -0
  68. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/compatibility/starlette.py +0 -0
  69. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/__init__.py +0 -0
  70. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/api.py +0 -0
  71. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/calls.py +0 -0
  72. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  73. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  74. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/inspection.py +0 -0
  75. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/primitives.py +0 -0
  76. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/services.py +0 -0
  77. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/threads.py +0 -0
  78. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/concurrency/waiters.py +0 -0
  79. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/control_listener.py +0 -0
  80. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/deprecated.py +0 -0
  81. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/engine.py +0 -0
  82. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/git.py +0 -0
  83. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  84. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/installation.py +0 -0
  85. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/integrations.py +0 -0
  86. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/launchers.py +0 -0
  87. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/lazy.py +0 -0
  88. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/metrics.py +0 -0
  89. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/observability.py +0 -0
  90. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/observers.py +0 -0
  91. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/__init__.py +0 -0
  92. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/apply.py +0 -0
  93. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  94. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/spec.py +0 -0
  95. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/plugins/startup.py +0 -0
  96. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pydantic/__init__.py +0 -0
  97. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pydantic/schemas.py +0 -0
  98. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  99. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  100. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  101. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/pytz.py +0 -0
  102. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/result_records.py +0 -0
  103. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/retries.py +0 -0
  104. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schema.py +0 -0
  105. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/__init__.py +0 -0
  106. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/_registry.py +0 -0
  107. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/bases.py +0 -0
  108. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/fields.py +0 -0
  109. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/serializers.py +0 -0
  110. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/schemas/validators.py +0 -0
  111. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  112. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/states.py +0 -0
  113. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/testing.py +0 -0
  114. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/urls.py +0 -0
  115. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/uuid7.py +0 -0
  116. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/version_checking.py +0 -0
  117. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/versioning.py +0 -0
  118. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/waiters.py +0 -0
  119. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_internal/websockets.py +0 -0
  120. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/__init__.py +0 -0
  121. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/fetcher.py +0 -0
  122. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/generator.py +0 -0
  123. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/models.py +0 -0
  124. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/naming.py +0 -0
  125. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/renderer.py +0 -0
  126. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/schema_converter.py +0 -0
  127. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/templates/__init__.py +0 -0
  128. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  129. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/types.py +0 -0
  130. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_sdk/unions.py +0 -0
  131. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_vendor/croniter/__init__.py +0 -0
  132. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/_vendor/croniter/croniter.py +0 -0
  133. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/agent.py +0 -0
  134. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/analytics/__init__.py +0 -0
  135. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/artifacts.py +0 -0
  136. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/assets/__init__.py +0 -0
  137. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/assets/core.py +0 -0
  138. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/assets/materialize.py +0 -0
  139. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/automations.py +0 -0
  140. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/AGENTS.md +0 -0
  141. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/__init__.py +0 -0
  142. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/abstract.py +0 -0
  143. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/fields.py +0 -0
  144. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/notifications.py +0 -0
  145. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/redis.py +0 -0
  146. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/system.py +0 -0
  147. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/blocks/webhook.py +0 -0
  148. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/_file_collector.py +0 -0
  149. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/_ignore_filter.py +0 -0
  150. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/_path_resolver.py +0 -0
  151. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/_zip_builder.py +0 -0
  152. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/_zip_extractor.py +0 -0
  153. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/bundles/execute.py +0 -0
  154. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/cache_policies.py +0 -0
  155. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/AGENTS.md +0 -0
  156. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/__init__.py +0 -0
  157. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/attribution.py +0 -0
  158. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/cloud.py +0 -0
  159. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/collections.py +0 -0
  160. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/constants.py +0 -0
  161. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/__init__.py +0 -0
  162. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  163. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  164. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  165. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_automations/client.py +0 -0
  166. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  167. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  168. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  169. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  170. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  171. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  172. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  173. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  174. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  175. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  176. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  177. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_events/client.py +0 -0
  178. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  179. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  180. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  181. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_flows/client.py +0 -0
  182. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  183. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_logs/client.py +0 -0
  184. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  185. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_variables/client.py +0 -0
  186. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  187. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  188. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/base.py +0 -0
  189. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/orchestration/routes.py +0 -0
  190. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/actions.py +0 -0
  191. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/events.py +0 -0
  192. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/filters.py +0 -0
  193. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/objects.py +0 -0
  194. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/responses.py +0 -0
  195. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/schedules.py +0 -0
  196. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/sorting.py +0 -0
  197. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/schemas/worker_channel.py +0 -0
  198. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/subscriptions.py +0 -0
  199. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/types/__init__.py +0 -0
  200. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  201. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/client/utilities.py +0 -0
  202. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/AGENTS.md +0 -0
  203. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/__init__.py +0 -0
  204. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/_asyncio.py +0 -0
  205. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/_events.py +0 -0
  206. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/_leases.py +0 -0
  207. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/_sync.py +0 -0
  208. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/asyncio.py +0 -0
  209. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/context.py +0 -0
  210. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/services.py +0 -0
  211. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/sync.py +0 -0
  212. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/__init__.py +0 -0
  213. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  214. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/_events.py +0 -0
  215. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/asyncio.py +0 -0
  216. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/context.py +0 -0
  217. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/services.py +0 -0
  218. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/concurrency/v1/sync.py +0 -0
  219. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/context.py +0 -0
  220. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/AGENTS.md +0 -0
  221. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/__init__.py +0 -0
  222. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/deployments.py +0 -0
  223. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/flow_runs.py +0 -0
  224. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/runner.py +0 -0
  225. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/schedules.py +0 -0
  226. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/steps/__init__.py +0 -0
  227. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/steps/core.py +0 -0
  228. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/steps/pull.py +0 -0
  229. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/deployments/steps/utility.py +0 -0
  230. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/docker/__init__.py +0 -0
  231. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/docker/_buildx.py +0 -0
  232. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/docker/docker_image.py +0 -0
  233. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/engine.py +0 -0
  234. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/AGENTS.md +0 -0
  235. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/__init__.py +0 -0
  236. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/actions.py +0 -0
  237. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/clients.py +0 -0
  238. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/filters.py +0 -0
  239. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/related.py +0 -0
  240. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/schemas/__init__.py +0 -0
  241. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/schemas/automations.py +0 -0
  242. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  243. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/schemas/events.py +0 -0
  244. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/schemas/labelling.py +0 -0
  245. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/subscribers.py +0 -0
  246. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/utilities.py +0 -0
  247. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/events/worker.py +0 -0
  248. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/exceptions.py +0 -0
  249. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/flow_engine.py +0 -0
  250. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/flow_runs.py +0 -0
  251. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/flows.py +0 -0
  252. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/futures.py +0 -0
  253. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/__init__.py +0 -0
  254. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/base.py +0 -0
  255. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  256. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  257. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  258. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  259. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  260. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  261. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/input/__init__.py +0 -0
  262. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/input/actions.py +0 -0
  263. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/input/run_input.py +0 -0
  264. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/locking/__init__.py +0 -0
  265. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/locking/_filelock.py +0 -0
  266. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/locking/filesystem.py +0 -0
  267. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/locking/memory.py +0 -0
  268. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/locking/protocol.py +0 -0
  269. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/AGENTS.md +0 -0
  270. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/__init__.py +0 -0
  271. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/clients.py +0 -0
  272. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/configuration.py +0 -0
  273. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/filters.py +0 -0
  274. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/handlers.py +0 -0
  275. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/highlighters.py +0 -0
  276. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/logging/logging.yml +0 -0
  277. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/main.py +0 -0
  278. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/plugins.py +0 -0
  279. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/py.typed +0 -0
  280. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/results.py +0 -0
  281. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/__init__.py +0 -0
  282. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_cancel_finalizer.py +0 -0
  283. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_cancellation_manager.py +0 -0
  284. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_control_channel.py +0 -0
  285. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_deployment_registry.py +0 -0
  286. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_event_emitter.py +0 -0
  287. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_flow_resolver.py +0 -0
  288. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_flow_run_executor.py +0 -0
  289. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_hook_runner.py +0 -0
  290. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_limit_manager.py +0 -0
  291. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_process_manager.py +0 -0
  292. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  293. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_starter_bundle.py +0 -0
  294. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_starter_direct.py +0 -0
  295. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_starter_engine.py +0 -0
  296. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_state_proposer.py +0 -0
  297. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_uv_command.py +0 -0
  298. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_hook_runner.py +0 -0
  299. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_resolver.py +0 -0
  300. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_runtime.py +0 -0
  301. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
  302. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_starter.py +0 -0
  303. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/_workspace_supervisor.py +0 -0
  304. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/runner.py +0 -0
  305. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runner/storage.py +0 -0
  306. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runtime/__init__.py +0 -0
  307. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runtime/deployment.py +0 -0
  308. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runtime/flow_run.py +0 -0
  309. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/runtime/task_run.py +0 -0
  310. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/schedules.py +0 -0
  311. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/serializers.py +0 -0
  312. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/__init__.py +0 -0
  313. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/_ui_static.py +0 -0
  314. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/admin.py +0 -0
  315. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/artifacts.py +0 -0
  316. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/automations.py +0 -0
  317. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/background_workers.py +0 -0
  318. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/block_capabilities.py +0 -0
  319. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/block_documents.py +0 -0
  320. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/block_schemas.py +0 -0
  321. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/block_types.py +0 -0
  322. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/clients.py +0 -0
  323. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/collections.py +0 -0
  324. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  325. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/concurrency_limits.py +0 -0
  326. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  327. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/csrf_token.py +0 -0
  328. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/dependencies.py +0 -0
  329. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/deployments.py +0 -0
  330. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/events.py +0 -0
  331. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/flow_run_states.py +0 -0
  332. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/flow_runs.py +0 -0
  333. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/flows.py +0 -0
  334. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/logs.py +0 -0
  335. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/middleware.py +0 -0
  336. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/root.py +0 -0
  337. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/run_history.py +0 -0
  338. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/saved_searches.py +0 -0
  339. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/server.py +0 -0
  340. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  341. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/task_run_states.py +0 -0
  342. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/task_runs.py +0 -0
  343. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/task_workers.py +0 -0
  344. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/templates.py +0 -0
  345. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/ui/__init__.py +0 -0
  346. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/ui/flow_runs.py +0 -0
  347. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/ui/flows.py +0 -0
  348. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/ui/schemas.py +0 -0
  349. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/ui/task_runs.py +0 -0
  350. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/validation.py +0 -0
  351. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/variables.py +0 -0
  352. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/work_queues.py +0 -0
  353. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/server/api/workers.py +0 -0
  354. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/AGENTS.md +0 -0
  355. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/__init__.py +0 -0
  356. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/_types.py +0 -0
  357. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/base.py +0 -0
  358. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/constants.py +0 -0
  359. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/context.py +0 -0
  360. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/legacy.py +0 -0
  361. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/__init__.py +0 -0
  362. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/_defaults.py +0 -0
  363. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/api.py +0 -0
  364. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/cli.py +0 -0
  365. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/client.py +0 -0
  366. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/cloud.py +0 -0
  367. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/deployments.py +0 -0
  368. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/events.py +0 -0
  369. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/experiments.py +0 -0
  370. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/flows.py +0 -0
  371. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/internal.py +0 -0
  372. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/logging.py +0 -0
  373. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/plugins.py +0 -0
  374. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/results.py +0 -0
  375. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/root.py +0 -0
  376. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/runner.py +0 -0
  377. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/__init__.py +0 -0
  378. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/api.py +0 -0
  379. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/concurrency.py +0 -0
  380. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/database.py +0 -0
  381. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/deployments.py +0 -0
  382. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/docket.py +0 -0
  383. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/ephemeral.py +0 -0
  384. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/events.py +0 -0
  385. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  386. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/logs.py +0 -0
  387. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/root.py +0 -0
  388. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/services.py +0 -0
  389. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/tasks.py +0 -0
  390. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/ui.py +0 -0
  391. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/server/worker_channel.py +0 -0
  392. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/tasks.py +0 -0
  393. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/telemetry.py +0 -0
  394. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/testing.py +0 -0
  395. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/models/worker.py +0 -0
  396. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/profiles.py +0 -0
  397. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/profiles.toml +0 -0
  398. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/settings/sources.py +0 -0
  399. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/states.py +0 -0
  400. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/task_engine.py +0 -0
  401. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/task_runners.py +0 -0
  402. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/task_runs.py +0 -0
  403. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/task_worker.py +0 -0
  404. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/tasks.py +0 -0
  405. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/telemetry/__init__.py +0 -0
  406. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/telemetry/run_telemetry.py +0 -0
  407. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/transactions.py +0 -0
  408. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/types/__init__.py +0 -0
  409. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/types/_concurrency.py +0 -0
  410. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/types/_datetime.py +0 -0
  411. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/types/entrypoint.py +0 -0
  412. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/types/names.py +0 -0
  413. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/AGENTS.md +0 -0
  414. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/__init__.py +0 -0
  415. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/annotations.py +0 -0
  416. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  417. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  418. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/callables/AGENTS.md +0 -0
  419. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/collections.py +0 -0
  420. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/compat.py +0 -0
  421. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/context.py +0 -0
  422. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/dispatch.py +0 -0
  423. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/dockerutils.py +0 -0
  424. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/engine/AGENTS.md +0 -0
  425. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/engine/__init__.py +0 -0
  426. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/generics.py +0 -0
  427. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/hashing.py +0 -0
  428. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/importtools.py +0 -0
  429. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/math.py +0 -0
  430. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/names.py +0 -0
  431. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  432. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/processutils/__init__.py +0 -0
  433. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/pydantic.py +0 -0
  434. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/render_swagger.py +0 -0
  435. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  436. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  437. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  438. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/schema_tools/validation.py +0 -0
  439. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/services.py +0 -0
  440. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/slugify.py +0 -0
  441. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/templating/AGENTS.md +0 -0
  442. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/templating/__init__.py +0 -0
  443. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/text.py +0 -0
  444. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/timeout.py +0 -0
  445. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/urls.py +0 -0
  446. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/utilities/visualization.py +0 -0
  447. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/variables.py +0 -0
  448. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/__init__.py +0 -0
  449. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_cleanup.py +0 -0
  450. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_cleanup_handlers.py +0 -0
  451. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  452. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  453. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_worker_channel/_state.py +0 -0
  454. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  455. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  456. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/block.py +0 -0
  457. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/cloud.py +0 -0
  458. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/process.py +0 -0
  459. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev2}/src/prefect/workers/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: prefect-client
3
- Version: 3.8.8.dev4
3
+ Version: 3.8.9.dev2
4
4
  Summary: Workflow orchestration and management.
5
5
  Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
6
6
  Project-URL: Documentation, https://docs.prefect.io
@@ -14,13 +14,12 @@ Classifier: Intended Audience :: System Administrators
14
14
  Classifier: License :: OSI Approved :: Apache Software License
15
15
  Classifier: Natural Language :: English
16
16
  Classifier: Programming Language :: Python :: 3 :: Only
17
- Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
20
19
  Classifier: Programming Language :: Python :: 3.13
21
20
  Classifier: Programming Language :: Python :: 3.14
22
21
  Classifier: Topic :: Software Development :: Libraries
23
- Requires-Python: <3.15,>=3.10
22
+ Requires-Python: <3.15,>=3.11
24
23
  Requires-Dist: amplitude-analytics<2.0.0,>=1.2.1
25
24
  Requires-Dist: anyio<5.0.0,>=4.4.0
26
25
  Requires-Dist: asgi-lifespan<3.0,>=1.0
@@ -95,7 +94,7 @@ or other resource-constrained environments.
95
94
 
96
95
  ## Getting started
97
96
 
98
- `prefect-client` shares the same installation requirements as prefect. To install, make sure you are on Python 3.10 or
97
+ `prefect-client` shares the same installation requirements as prefect. To install, make sure you are on Python 3.11 or
99
98
  later and run the following command:
100
99
 
101
100
  ```bash
@@ -26,7 +26,7 @@ or other resource-constrained environments.
26
26
 
27
27
  ## Getting started
28
28
 
29
- `prefect-client` shares the same installation requirements as prefect. To install, make sure you are on Python 3.10 or
29
+ `prefect-client` shares the same installation requirements as prefect. To install, make sure you are on Python 3.11 or
30
30
  later and run the following command:
31
31
 
32
32
  ```bash
@@ -7,7 +7,7 @@ name = "prefect-client"
7
7
  dynamic = ["version"]
8
8
  description = "Workflow orchestration and management."
9
9
  readme = "README.md"
10
- requires-python = ">=3.10,<3.15"
10
+ requires-python = ">=3.11,<3.15"
11
11
  license = { text = "Apache-2.0" }
12
12
  authors = [{ name = "Prefect Technologies, Inc.", email = "help@prefect.io" }]
13
13
  classifiers = [
@@ -16,7 +16,6 @@ classifiers = [
16
16
  "Intended Audience :: System Administrators",
17
17
  "License :: OSI Approved :: Apache Software License",
18
18
  "Programming Language :: Python :: 3 :: Only",
19
- "Programming Language :: Python :: 3.10",
20
19
  "Programming Language :: Python :: 3.11",
21
20
  "Programming Language :: Python :: 3.12",
22
21
  "Programming Language :: Python :: 3.13",
@@ -2,7 +2,6 @@
2
2
 
3
3
  # Setup version and path constants
4
4
 
5
- import sys
6
5
  from . import _build_info
7
6
  import importlib
8
7
  import pathlib
@@ -212,8 +211,9 @@ def __getattr__(attr_name: str) -> Any:
212
211
  return getattr(module, attr_name)
213
212
  except ModuleNotFoundError as ex:
214
213
  mname, _, attr = (ex.name or "").rpartition(".")
215
- ctx = {"name": mname, "obj": attr} if sys.version_info >= (3, 10) else {}
216
- raise AttributeError(f"module {mname} has no attribute {attr}", **ctx) from ex
214
+ raise AttributeError(
215
+ f"module {mname} has no attribute {attr}", name=mname, obj=attr
216
+ ) from ex
217
217
 
218
218
 
219
219
  # Initialize plugins on import if enabled
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.8.9.dev2"
3
+ __build_date__ = "2026-10-10 08:18:57.182238+00:00"
4
+ __git_commit__ = "e9bc08239af12f2bbfccab7a8e15b9f0a0ec6865"
5
+ __dirty__ = False
@@ -1,14 +1,8 @@
1
1
  import logging
2
- import sys
3
2
 
4
3
  from typing_extensions import Self
5
4
 
6
- if sys.version_info < (3, 11):
7
-
8
- def getLevelNamesMapping() -> dict[str, int]:
9
- return getattr(logging, "_nameToLevel").copy()
10
- else:
11
- getLevelNamesMapping = logging.getLevelNamesMapping # novermin
5
+ getLevelNamesMapping = logging.getLevelNamesMapping
12
6
 
13
7
 
14
8
  class SafeLogger(logging.Logger):
@@ -8,6 +8,7 @@ typically to register Blocks or other Prefect-aware classes.
8
8
  Public API is re-exported from `prefect.plugins`.
9
9
  """
10
10
 
11
+ import importlib
11
12
  from importlib.metadata import EntryPoints, entry_points
12
13
  from types import ModuleType
13
14
  from typing import Any, Union
@@ -40,26 +41,45 @@ def safe_load_entrypoints(entrypoints: EntryPoints) -> dict[str, Union[Exception
40
41
  return results
41
42
 
42
43
 
43
- def load_prefect_collections() -> dict[str, Union[ModuleType, Exception]]:
44
+ def load_prefect_collections(
45
+ reload: bool = False,
46
+ ) -> dict[str, Union[ModuleType, Exception]]:
44
47
  """
45
48
  Load all Prefect collections that define an entrypoint in the group
46
49
  `prefect.collections`.
50
+
51
+ Results are cached. With `reload=True`, import and metadata caches are
52
+ invalidated and entry points that are new or failed on a previous call are
53
+ loaded, so packages installed or repaired after the first call are picked up.
47
54
  """
48
55
  global _collections
49
56
 
50
- if _collections is not None:
57
+ if _collections is not None and not reload:
51
58
  return _collections
52
59
 
60
+ if _collections is not None:
61
+ importlib.invalidate_caches()
62
+
53
63
  collection_entrypoints: EntryPoints = entry_points(group="prefect.collections")
54
- collections: dict[str, Union[Exception, Any]] = safe_load_entrypoints(
64
+ if _collections is not None:
65
+ known = {
66
+ name
67
+ for name, result in _collections.items()
68
+ if not isinstance(result, Exception)
69
+ }
70
+ collection_entrypoints = EntryPoints(
71
+ ep for ep in collection_entrypoints if (ep.name or ep.value) not in known
72
+ )
73
+ loaded: dict[str, Union[Exception, Any]] = safe_load_entrypoints(
55
74
  collection_entrypoints
56
75
  )
76
+ collections = {**_collections, **loaded} if _collections is not None else loaded
57
77
 
58
78
  # TODO: Consider the utility of this once we've established this pattern.
59
79
  # We cannot use a logger here because logging is not yet initialized.
60
80
  # It would be nice if logging was initialized so we could log failures
61
81
  # at least.
62
- for name, result in collections.items():
82
+ for name, result in loaded.items():
63
83
  if isinstance(result, Exception):
64
84
  print(
65
85
  # TODO: Use exc_info if we have a logger
@@ -7,7 +7,6 @@ from __future__ import annotations
7
7
  import importlib.metadata as md
8
8
  import inspect
9
9
  import logging
10
- import sys
11
10
  from typing import Any
12
11
 
13
12
  import pluggy
@@ -55,12 +54,7 @@ def load_entry_point_plugins(
55
54
  deny: If set, skip plugins with names in this set
56
55
  logger: Logger for reporting load failures
57
56
  """
58
- # Python 3.10+ supports group parameter, 3.9 requires dict access
59
- if sys.version_info >= (3, 10):
60
- entry_points_list = md.entry_points(group=ENTRYPOINTS_GROUP)
61
- else:
62
- # Python 3.9 returns a dict-like object
63
- entry_points_list = md.entry_points().get(ENTRYPOINTS_GROUP, [])
57
+ entry_points_list = md.entry_points(group=ENTRYPOINTS_GROUP)
64
58
 
65
59
  for ep in entry_points_list:
66
60
  if allow and ep.name not in allow:
@@ -0,0 +1,58 @@
1
+ """
2
+ Process-wide record of requests waiting out Prefect API maintenance.
3
+
4
+ When the API answers with a `Prefect-Maintenance: true` header, the HTTP clients
5
+ retry indefinitely, sleeping for the `Retry-After` they were given. Health checks
6
+ read this record so that a process deliberately waiting is not reported as stuck.
7
+ """
8
+
9
+ import datetime
10
+ import threading
11
+
12
+ import prefect.types._datetime
13
+
14
+ _backoff_ends_at: datetime.datetime | None = None
15
+ _backoff_lock = threading.Lock()
16
+
17
+
18
+ def record_maintenance_backoff(retry_seconds: float) -> None:
19
+ """
20
+ Record that a request is sleeping for `retry_seconds` before retrying a
21
+ maintenance response.
22
+ """
23
+ global _backoff_ends_at
24
+ ends_at = prefect.types._datetime.now("UTC") + datetime.timedelta(
25
+ seconds=retry_seconds
26
+ )
27
+ with _backoff_lock:
28
+ # Concurrent requests each back off; the latest end wins.
29
+ if _backoff_ends_at is None or ends_at > _backoff_ends_at:
30
+ _backoff_ends_at = ends_at
31
+
32
+
33
+ def maintenance_backoff_ends_at() -> datetime.datetime | None:
34
+ """
35
+ When the latest maintenance back-off in this process ends, or `None` if no
36
+ request has backed off for maintenance.
37
+ """
38
+ with _backoff_lock:
39
+ return _backoff_ends_at
40
+
41
+
42
+ def polling_window_start(last_polled: datetime.datetime) -> datetime.datetime:
43
+ """
44
+ When the polling window of a process that last polled at `last_polled`
45
+ starts: the later of `last_polled` and the end of the latest maintenance
46
+ back-off, since a poll cannot complete while it waits out maintenance.
47
+ """
48
+ backoff_ends_at = maintenance_backoff_ends_at()
49
+ if backoff_ends_at is not None and backoff_ends_at > last_polled:
50
+ return backoff_ends_at
51
+ return last_polled
52
+
53
+
54
+ def reset_maintenance_backoff() -> None:
55
+ """Forget any recorded maintenance back-off (for tests)."""
56
+ global _backoff_ends_at
57
+ with _backoff_lock:
58
+ _backoff_ends_at = None
@@ -81,10 +81,7 @@ R = TypeVar("R")
81
81
  P = ParamSpec("P")
82
82
 
83
83
  ResourceTuple = tuple[dict[str, Any], list[dict[str, Any]]]
84
- UnionTypes: tuple[object, ...] = (Union,)
85
- if hasattr(types, "UnionType"):
86
- # Python 3.10+ only
87
- UnionTypes = (*UnionTypes, types.UnionType)
84
+ UnionTypes: tuple[object, ...] = (Union, types.UnionType)
88
85
 
89
86
 
90
87
  def _nested_type_args(annotation: Any) -> tuple[Any, ...]:
@@ -174,15 +174,11 @@ def _is_local_module(module_name: str, module_path: str | None = None) -> bool:
174
174
  if module_name in sys.builtin_module_names:
175
175
  return False
176
176
 
177
- # Check if it's in the standard library (Python 3.10+)
178
- if hasattr(sys, "stdlib_module_names"):
179
- # Check both full module name and base module name
180
- base_module = module_name.split(".")[0]
181
- if (
182
- module_name in sys.stdlib_module_names
183
- or base_module in sys.stdlib_module_names
184
- ):
185
- return False
177
+ # Check if it's in the standard library
178
+ # Check both full module name and base module name
179
+ base_module = module_name.split(".")[0]
180
+ if module_name in sys.stdlib_module_names or base_module in sys.stdlib_module_names:
181
+ return False
186
182
 
187
183
  # If we have the module path, check if it's in site-packages or dist-packages
188
184
  if module_path:
@@ -20,6 +20,7 @@ from typing_extensions import Self
20
20
 
21
21
  import prefect
22
22
  from prefect._internal.compatibility.starlette import status
23
+ from prefect._internal.server_maintenance import record_maintenance_backoff
23
24
  from prefect.client import constants
24
25
  from prefect.client.attribution import get_attribution_headers
25
26
  from prefect.client.schemas.objects import CsrfToken
@@ -46,6 +47,20 @@ APP_LIFESPANS_REF_COUNTS: dict[tuple[int, int], int] = {}
46
47
  APP_LIFESPANS_LOCKS: dict[int, anyio.Lock] = defaultdict(anyio.Lock)
47
48
 
48
49
 
50
+ def _record_if_maintenance_backoff(
51
+ response: Optional[Response],
52
+ exc_info: Optional[tuple[Any, ...]],
53
+ retry_seconds: float,
54
+ ) -> None:
55
+ # After a retryable exception, `response` is still the previous attempt's.
56
+ if (
57
+ exc_info is None
58
+ and response is not None
59
+ and response.headers.get("Prefect-Maintenance") == "true"
60
+ ):
61
+ record_maintenance_backoff(retry_seconds)
62
+
63
+
49
64
  logger: Logger = get_logger("client")
50
65
 
51
66
 
@@ -356,6 +371,7 @@ class PrefectHttpxAsyncClient(httpx.AsyncClient):
356
371
  f" {try_count}/{PREFECT_CLIENT_MAX_RETRIES.value() + 1}.",
357
372
  exc_info=exc_info,
358
373
  )
374
+ _record_if_maintenance_backoff(response, exc_info, retry_seconds)
359
375
  await anyio.sleep(retry_seconds)
360
376
 
361
377
  assert response is not None, (
@@ -628,6 +644,7 @@ class PrefectHttpxSyncClient(httpx.Client):
628
644
  f" {try_count}/{PREFECT_CLIENT_MAX_RETRIES.value() + 1}.",
629
645
  exc_info=exc_info,
630
646
  )
647
+ _record_if_maintenance_backoff(response, exc_info, retry_seconds)
631
648
  time.sleep(retry_seconds)
632
649
 
633
650
  assert response is not None, (
@@ -1,5 +1,4 @@
1
1
  import importlib
2
- import sys
3
2
  from typing import Any, TYPE_CHECKING
4
3
 
5
4
  if TYPE_CHECKING:
@@ -90,5 +89,6 @@ def __getattr__(attr_name: str) -> Any:
90
89
  return getattr(module, attr_name)
91
90
  except ModuleNotFoundError as ex:
92
91
  mname, _, attr = (ex.name or "").rpartition(".")
93
- ctx = {"name": mname, "obj": attr} if sys.version_info >= (3, 10) else {}
94
- raise AttributeError(f"module {mname} has no attribute {attr}", **ctx) from ex
92
+ raise AttributeError(
93
+ f"module {mname} has no attribute {attr}", name=mname, obj=attr
94
+ ) from ex
@@ -47,6 +47,12 @@ def create_default_prefect_yaml(
47
47
 
48
48
  import prefect
49
49
 
50
+ if name is None:
51
+ name = path.resolve().name
52
+
53
+ if contents is None:
54
+ contents = {}
55
+
50
56
  contents["prefect-version"] = prefect.__version__
51
57
  contents["name"] = name
52
58
 
@@ -191,13 +191,15 @@ class LocalFileSystem(WritableFileSystem, WritableDeploymentStorage):
191
191
  with open(from_path / Path(".prefectignore")) as f:
192
192
  ignore_patterns = f.readlines()
193
193
  included_files = filter_files(
194
- root=from_path, ignore_patterns=ignore_patterns
194
+ root=from_path, ignore_patterns=ignore_patterns, as_posix=True
195
195
  )
196
196
 
197
197
  def ignore_func(directory, files):
198
198
  relative_path = Path(directory).relative_to(from_path)
199
199
  files_to_ignore = [
200
- f for f in files if str(relative_path / f) not in included_files
200
+ f
201
+ for f in files
202
+ if (relative_path / f).as_posix() not in included_files
201
203
  ]
202
204
  return files_to_ignore
203
205
  else:
@@ -210,13 +212,15 @@ class LocalFileSystem(WritableFileSystem, WritableDeploymentStorage):
210
212
  async def _get_ignore_func(self, local_path: str, ignore_file: str):
211
213
  with open(ignore_file) as f:
212
214
  ignore_patterns = f.readlines()
213
- included_files = filter_files(root=local_path, ignore_patterns=ignore_patterns)
215
+ included_files = filter_files(
216
+ root=local_path, ignore_patterns=ignore_patterns, as_posix=True
217
+ )
214
218
 
215
219
  def ignore_func(directory, files):
216
220
  relative_path = Path(directory).relative_to(local_path)
217
221
 
218
222
  files_to_ignore = [
219
- f for f in files if str(relative_path / f) not in included_files
223
+ f for f in files if (relative_path / f).as_posix() not in included_files
220
224
  ]
221
225
  return files_to_ignore
222
226
 
@@ -278,13 +282,15 @@ class LocalFileSystem(WritableFileSystem, WritableDeploymentStorage):
278
282
  with open(ignore_file) as f:
279
283
  ignore_patterns = f.readlines()
280
284
  included_files = filter_files(
281
- root=local_path, ignore_patterns=ignore_patterns
285
+ root=local_path, ignore_patterns=ignore_patterns, as_posix=True
282
286
  )
283
287
 
284
288
  def ignore_func(directory, files):
285
289
  relative_path = Path(directory).relative_to(local_path)
286
290
  files_to_ignore = [
287
- f for f in files if str(relative_path / f) not in included_files
291
+ f
292
+ for f in files
293
+ if (relative_path / f).as_posix() not in included_files
288
294
  ]
289
295
  return files_to_ignore
290
296
  else:
@@ -539,13 +545,13 @@ class RemoteFileSystem(WritableFileSystem, WritableDeploymentStorage):
539
545
  ignore_patterns = f.readlines()
540
546
 
541
547
  included_files = filter_files(
542
- local_path, ignore_patterns, include_dirs=True
548
+ local_path, ignore_patterns, include_dirs=True, as_posix=True
543
549
  )
544
550
 
545
551
  counter = 0
546
552
  for f in Path(local_path).rglob("*"):
547
553
  relative_path = f.relative_to(local_path)
548
- if included_files and str(relative_path) not in included_files:
554
+ if included_files and relative_path.as_posix() not in included_files:
549
555
  continue
550
556
 
551
557
  if to_path.endswith("/"):
@@ -595,13 +601,13 @@ class RemoteFileSystem(WritableFileSystem, WritableDeploymentStorage):
595
601
  ignore_patterns = f.readlines()
596
602
 
597
603
  included_files = filter_files(
598
- local_path, ignore_patterns, include_dirs=True
604
+ local_path, ignore_patterns, include_dirs=True, as_posix=True
599
605
  )
600
606
 
601
607
  counter = 0
602
608
  for f in Path(local_path).rglob("*"):
603
609
  relative_path = f.relative_to(local_path)
604
- if included_files and str(relative_path) not in included_files:
610
+ if included_files and relative_path.as_posix() not in included_files:
605
611
  continue
606
612
 
607
613
  if to_path.endswith("/"):
@@ -1,7 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import logging
4
- import sys
5
4
  import traceback
6
5
  from types import TracebackType
7
6
  from typing import Any, Literal, Optional, Tuple, Type, Union
@@ -119,10 +118,8 @@ class PrefectFormatter(logging.Formatter):
119
118
  init_kwargs: dict[str, Any] = {}
120
119
  style_kwargs: dict[str, Any] = {}
121
120
 
122
- # defaults added in 3.10
123
- if sys.version_info >= (3, 10):
124
- init_kwargs["defaults"] = defaults
125
- style_kwargs["defaults"] = defaults
121
+ init_kwargs["defaults"] = defaults
122
+ style_kwargs["defaults"] = defaults
126
123
 
127
124
  init_kwargs["validate"] = validate
128
125
 
@@ -380,11 +380,7 @@ def print_as_log(*args: Any, **kwargs: Any) -> None:
380
380
 
381
381
  msg = buffer.getvalue().rstrip()
382
382
 
383
- if isinstance(logger, logging.LoggerAdapter) and sys.version_info < (3, 11):
384
- if logger.isEnabledFor(logging.INFO):
385
- logger.logger._log(logging.INFO, msg, (), extra=logger.extra, stacklevel=1)
386
- else:
387
- logger.info(msg, stacklevel=2)
383
+ logger.info(msg, stacklevel=2)
388
384
 
389
385
 
390
386
  @contextmanager
@@ -47,6 +47,10 @@ Thin facade over single-responsibility extracted classes. New behavior belongs i
47
47
 
48
48
  These will be removed once internal callers are migrated. Direct ProcessWorker flow runs already use `FlowRunExecutorContext`; generated commands use `WorkspaceResolvingEngineCommandStarter`, while explicitly configured commands use `EngineCommandStarter`. Only the ad hoc bundle path still calls deprecated `Runner.execute_bundle()`. Keep lifecycle behavior in the extracted classes and do not route direct worker execution back through Runner.
49
49
 
50
+ ## Webserver Health Check
51
+
52
+ The health check must not count a maintenance wait as a missed poll. Requests answered with `Prefect-Maintenance: true` retry indefinitely, so a poll can block for an entire Cloud maintenance window. `perform_health_check()` in `server.py` measures from `polling_window_start()` (`prefect._internal.server_maintenance`), the same rule the worker health check uses. `last_polled` is `None` until the first poll completes, so the health check measures from its own creation until then.
53
+
50
54
  ## EventEmitter WebSocket Degradation
51
55
 
52
56
  `EventEmitter.__aenter__` catches connection failures and silently swaps the failed client for a `NullEventsClient` — events are non-critical telemetry (the runner emits only `prefect.runner.cancelled-flow-run`), so the flow run must not crash when the events WebSocket is unreachable. Two failure classes are caught (`_NONFATAL_CONNECTION_EXCEPTIONS`): permanent rejections (`websockets.exceptions.InvalidStatus`, i.e. HTTP 4xx — e.g. a client ≤3.6.13 connecting to a server ≥3.6.14 with `PREFECT_SERVER_API_AUTH_STRING` configured) and transient failures (`RETRYABLE_EXCEPTIONS` from `events/clients.py`: `ConnectionClosed`, `TimeoutError`, `OSError`) that outlive the events client's own reconnection attempts. A `WARNING` is logged. If `__aenter__` raises, `__aexit__` is **not** called on the original client (it was never successfully entered); the replacement `NullEventsClient` is entered instead.
@@ -8,6 +8,7 @@ from fastapi import APIRouter, FastAPI, status
8
8
  from fastapi.responses import JSONResponse
9
9
  from typing_extensions import Literal
10
10
 
11
+ from prefect._internal.server_maintenance import polling_window_start
11
12
  from prefect.logging import get_logger
12
13
  from prefect.settings import (
13
14
  PREFECT_RUNNER_POLL_FREQUENCY,
@@ -46,9 +47,13 @@ def perform_health_check(
46
47
  * PREFECT_RUNNER_POLL_FREQUENCY.value()
47
48
  )
48
49
 
50
+ # Until the first poll completes, measure from when the health check
51
+ # started: startup and the first poll may be waiting out API maintenance.
52
+ started_at = now_fn("UTC")
53
+
49
54
  def _health_check():
50
- now = now_fn("UTC")
51
- poll_delay = (now - runner.last_polled).total_seconds()
55
+ last_polled = runner.last_polled or started_at
56
+ poll_delay = (now_fn("UTC") - polling_window_start(last_polled)).total_seconds()
52
57
 
53
58
  if TYPE_CHECKING:
54
59
  assert delay_threshold is not None
@@ -492,7 +492,7 @@ def parameter_schema(fn: Callable[..., Any]) -> ParameterSchema:
492
492
  try:
493
493
  signature = inspect.signature(fn, eval_str=True) # novm
494
494
  except (NameError, TypeError):
495
- # `eval_str` is not available in Python < 3.10
495
+ # Some annotations can't be resolved (e.g. defined under TYPE_CHECKING)
496
496
  signature = inspect.signature(fn)
497
497
 
498
498
  docstrings = parameter_docstrings(inspect.getdoc(fn))
@@ -8,7 +8,7 @@ Path normalization, file filtering compatible with `.gitignore`/`.prefectignore`
8
8
 
9
9
  ## Entry Points
10
10
 
11
- - `filter_files(root, ignore_patterns, include_dirs=True) -> set[str]` — return the set of paths under `root` that should be *ignored* according to pathspec patterns. Intended as input to `shutil.copytree`'s `ignore` callback.
11
+ - `filter_files(root, ignore_patterns, include_dirs=True, *, as_posix=False) -> set[str]` — return the set of included paths under `root` according to pathspec patterns. Returned paths are relative to `root` and use platform-native separators by default. Callers comparing against `Path.as_posix()` must opt in with `as_posix=True`. Used to build `shutil.copytree`'s `ignore` callback.
12
12
  - `tmpchdir(path)` — context manager that `chdir`s into `path` and restores the previous cwd on exit.
13
13
  - `get_open_file_limit() -> int` — platform-specific maximum open-file count, with a conservative Windows default.
14
14
 
@@ -38,12 +38,19 @@ def filter_files(
38
38
  root: str = ".",
39
39
  ignore_patterns: Optional[Iterable[AnyStr]] = None,
40
40
  include_dirs: bool = True,
41
+ *,
42
+ as_posix: bool = False,
41
43
  ) -> set[str]:
42
44
  """
43
45
  This function accepts a root directory path and a list of file patterns to ignore, and returns
44
- a list of files that excludes those that should be ignored.
46
+ a set of paths that excludes those that should be ignored.
45
47
 
46
48
  The specification matches that of [.gitignore files](https://git-scm.com/docs/gitignore).
49
+
50
+ Returned paths are relative to `root` and use platform-native separators
51
+ by default. Set `as_posix=True` to return forward-slash-separated paths.
52
+ When `include_dirs=True`, ancestor directories of included files are also
53
+ included so directory traversal can reach those files.
47
54
  """
48
55
  spec = pathspec.GitIgnoreSpec.from_lines(ignore_patterns or [])
49
56
  ignored_files = {p.path for p in spec.match_tree_entries(root)}
@@ -66,6 +73,8 @@ def filter_files(
66
73
  parent_dirs.add(parent_str)
67
74
  included_files |= parent_dirs
68
75
 
76
+ if as_posix:
77
+ return {Path(path).as_posix() for path in included_files}
69
78
  return included_files
70
79
 
71
80
 
@@ -48,6 +48,7 @@ Work-pool-level launchers are configured via `prefect work-pool storage configur
48
48
  ## Pitfalls
49
49
 
50
50
  - `backend_id` is `None` until the first heartbeat succeeds; `PREFECT__WORKER_ID` is not set until then. Code that reads `self.backend_id` early in the lifecycle may get `None`.
51
+ - Requests answered with `Prefect-Maintenance: true` retry indefinitely, so any API call can block for an entire Cloud maintenance window. Worker health must be served before the first API call and must not count that wait as a missed poll (`_is_within_polling_window()` handles this).
51
52
  - Direct `ProcessWorker.run()` execution uses `FlowRunExecutorContext` with `propose_submitting=False` because `BaseWorker` already proposed Submitting. Generated commands use `WorkspaceResolvingEngineCommandStarter` and pass its `hook_runner`; explicitly configured commands use `EngineCommandStarter` and retain their own pull-step behavior. Consume the executor's normalized infrastructure status rather than the raw child exit code. The ad hoc bundle path still uses deprecated `Runner.execute_bundle()` and remains a migration gap (see `runner/AGENTS.md`).
52
53
 
53
54
  ## Related