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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/PKG-INFO +3 -4
  2. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/README.md +1 -1
  3. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/pyproject.toml +1 -2
  4. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/__init__.py +3 -3
  5. prefect_client-3.8.9.dev1/src/prefect/_build_info.py +5 -0
  6. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/_logging.py +1 -7
  7. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/collections.py +24 -4
  8. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/manager.py +1 -7
  9. prefect_client-3.8.9.dev1/src/prefect/_internal/server_maintenance.py +46 -0
  10. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/core.py +1 -4
  11. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/__init__.py +5 -9
  12. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/base.py +17 -0
  13. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/__init__.py +3 -3
  14. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/filesystems.py +16 -10
  15. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/formatters.py +2 -5
  16. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/loggers.py +1 -5
  17. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/callables/__init__.py +1 -1
  18. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/filesystem/AGENTS.md +1 -1
  19. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/filesystem/__init__.py +10 -1
  20. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/AGENTS.md +1 -0
  21. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/base.py +53 -32
  22. prefect_client-3.8.9.dev1/src/prefect/workers/server.py +128 -0
  23. prefect_client-3.8.8.dev4/src/prefect/_build_info.py +0 -5
  24. prefect_client-3.8.8.dev4/src/prefect/workers/server.py +0 -66
  25. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/.gitignore +0 -0
  26. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/LICENSE +0 -0
  27. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/hatch_build.py +0 -0
  28. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/.prefectignore +0 -0
  29. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/AGENTS.md +0 -0
  30. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/__main__.py +0 -0
  31. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/__init__.py +0 -0
  32. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/_launchers.py +0 -0
  33. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/bundles/__init__.py +0 -0
  34. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/bundles/execute.py +0 -0
  35. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/__init__.py +0 -0
  36. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/apply.py +0 -0
  37. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  38. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/manager.py +0 -0
  39. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/spec.py +0 -0
  40. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
  41. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/sla/client.py +0 -0
  42. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
  43. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_flow_run_suspension.py +0 -0
  44. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/__init__.py +0 -0
  45. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/__init__.py +0 -0
  46. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  47. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/client.py +0 -0
  48. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/device_id.py +0 -0
  49. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/emit.py +0 -0
  50. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/enabled.py +0 -0
  51. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/events.py +0 -0
  52. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/milestones.py +0 -0
  53. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/notice.py +0 -0
  54. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/service.py +0 -0
  55. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/ast_utils.py +0 -0
  56. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/attempt_control.py +0 -0
  57. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/buildx.py +0 -0
  58. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
  59. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  60. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/backports.py +0 -0
  61. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/blocks.py +0 -0
  62. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  63. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  64. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
  65. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/starlette.py +0 -0
  66. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
  67. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
  68. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
  69. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  70. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  71. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
  72. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
  73. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/services.py +0 -0
  74. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
  75. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
  76. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/control_listener.py +0 -0
  77. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/deprecated.py +0 -0
  78. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/engine.py +0 -0
  79. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/git.py +0 -0
  80. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  81. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/installation.py +0 -0
  82. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/integrations.py +0 -0
  83. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/launchers.py +0 -0
  84. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/lazy.py +0 -0
  85. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/metrics.py +0 -0
  86. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/observability.py +0 -0
  87. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/observers.py +0 -0
  88. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/__init__.py +0 -0
  89. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/apply.py +0 -0
  90. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  91. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/spec.py +0 -0
  92. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/startup.py +0 -0
  93. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
  94. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
  95. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  96. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  97. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  98. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pytz.py +0 -0
  99. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/result_records.py +0 -0
  100. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/retries.py +0 -0
  101. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schema.py +0 -0
  102. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
  103. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/_registry.py +0 -0
  104. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
  105. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
  106. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
  107. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
  108. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  109. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/states.py +0 -0
  110. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/testing.py +0 -0
  111. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/urls.py +0 -0
  112. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/uuid7.py +0 -0
  113. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/version_checking.py +0 -0
  114. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/versioning.py +0 -0
  115. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/waiters.py +0 -0
  116. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_internal/websockets.py +0 -0
  117. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/__init__.py +0 -0
  118. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/fetcher.py +0 -0
  119. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/generator.py +0 -0
  120. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/models.py +0 -0
  121. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/naming.py +0 -0
  122. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/renderer.py +0 -0
  123. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/schema_converter.py +0 -0
  124. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/templates/__init__.py +0 -0
  125. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  126. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/types.py +0 -0
  127. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/unions.py +0 -0
  128. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
  129. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
  130. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/agent.py +0 -0
  131. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/analytics/__init__.py +0 -0
  132. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/artifacts.py +0 -0
  133. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/assets/__init__.py +0 -0
  134. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/assets/core.py +0 -0
  135. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/assets/materialize.py +0 -0
  136. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/automations.py +0 -0
  137. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/AGENTS.md +0 -0
  138. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/__init__.py +0 -0
  139. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/abstract.py +0 -0
  140. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/fields.py +0 -0
  141. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/notifications.py +0 -0
  142. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/redis.py +0 -0
  143. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/system.py +0 -0
  144. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/blocks/webhook.py +0 -0
  145. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_file_collector.py +0 -0
  146. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_ignore_filter.py +0 -0
  147. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_path_resolver.py +0 -0
  148. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_zip_builder.py +0 -0
  149. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_zip_extractor.py +0 -0
  150. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/bundles/execute.py +0 -0
  151. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/cache_policies.py +0 -0
  152. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/AGENTS.md +0 -0
  153. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/__init__.py +0 -0
  154. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/attribution.py +0 -0
  155. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/cloud.py +0 -0
  156. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/collections.py +0 -0
  157. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/constants.py +0 -0
  158. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/__init__.py +0 -0
  159. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  160. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  161. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  162. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
  163. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  164. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  165. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  166. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  167. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  168. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  169. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  170. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  171. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  172. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  173. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  174. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_events/client.py +0 -0
  175. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  176. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  177. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  178. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
  179. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  180. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
  181. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  182. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
  183. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  184. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  185. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/base.py +0 -0
  186. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/routes.py +0 -0
  187. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/actions.py +0 -0
  188. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/events.py +0 -0
  189. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/filters.py +0 -0
  190. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/objects.py +0 -0
  191. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/responses.py +0 -0
  192. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/schedules.py +0 -0
  193. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/sorting.py +0 -0
  194. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/worker_channel.py +0 -0
  195. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/subscriptions.py +0 -0
  196. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/types/__init__.py +0 -0
  197. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  198. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/client/utilities.py +0 -0
  199. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/AGENTS.md +0 -0
  200. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/__init__.py +0 -0
  201. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_asyncio.py +0 -0
  202. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_events.py +0 -0
  203. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_leases.py +0 -0
  204. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_sync.py +0 -0
  205. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/asyncio.py +0 -0
  206. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/context.py +0 -0
  207. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/services.py +0 -0
  208. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/sync.py +0 -0
  209. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
  210. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  211. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
  212. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
  213. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/context.py +0 -0
  214. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/services.py +0 -0
  215. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
  216. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/context.py +0 -0
  217. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/AGENTS.md +0 -0
  218. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/__init__.py +0 -0
  219. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/base.py +0 -0
  220. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/deployments.py +0 -0
  221. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/flow_runs.py +0 -0
  222. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/runner.py +0 -0
  223. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/schedules.py +0 -0
  224. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
  225. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/core.py +0 -0
  226. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/pull.py +0 -0
  227. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/utility.py +0 -0
  228. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/docker/__init__.py +0 -0
  229. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/docker/_buildx.py +0 -0
  230. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/docker/docker_image.py +0 -0
  231. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/engine.py +0 -0
  232. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/AGENTS.md +0 -0
  233. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/__init__.py +0 -0
  234. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/actions.py +0 -0
  235. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/clients.py +0 -0
  236. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/filters.py +0 -0
  237. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/related.py +0 -0
  238. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/__init__.py +0 -0
  239. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/automations.py +0 -0
  240. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  241. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/events.py +0 -0
  242. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/labelling.py +0 -0
  243. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/subscribers.py +0 -0
  244. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/utilities.py +0 -0
  245. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/events/worker.py +0 -0
  246. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/exceptions.py +0 -0
  247. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/flow_engine.py +0 -0
  248. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/flow_runs.py +0 -0
  249. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/flows.py +0 -0
  250. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/futures.py +0 -0
  251. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/__init__.py +0 -0
  252. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/base.py +0 -0
  253. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  254. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  255. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  256. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  257. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  258. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  259. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/input/__init__.py +0 -0
  260. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/input/actions.py +0 -0
  261. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/input/run_input.py +0 -0
  262. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/locking/__init__.py +0 -0
  263. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/locking/_filelock.py +0 -0
  264. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/locking/filesystem.py +0 -0
  265. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/locking/memory.py +0 -0
  266. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/locking/protocol.py +0 -0
  267. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/AGENTS.md +0 -0
  268. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/__init__.py +0 -0
  269. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/clients.py +0 -0
  270. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/configuration.py +0 -0
  271. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/filters.py +0 -0
  272. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/handlers.py +0 -0
  273. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/highlighters.py +0 -0
  274. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/logging/logging.yml +0 -0
  275. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/main.py +0 -0
  276. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/plugins.py +0 -0
  277. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/py.typed +0 -0
  278. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/results.py +0 -0
  279. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/AGENTS.md +0 -0
  280. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/__init__.py +0 -0
  281. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_cancel_finalizer.py +0 -0
  282. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_cancellation_manager.py +0 -0
  283. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_control_channel.py +0 -0
  284. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_deployment_registry.py +0 -0
  285. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_event_emitter.py +0 -0
  286. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_flow_resolver.py +0 -0
  287. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_flow_run_executor.py +0 -0
  288. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_hook_runner.py +0 -0
  289. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_limit_manager.py +0 -0
  290. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_process_manager.py +0 -0
  291. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  292. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_starter_bundle.py +0 -0
  293. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_starter_direct.py +0 -0
  294. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_starter_engine.py +0 -0
  295. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_state_proposer.py +0 -0
  296. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_uv_command.py +0 -0
  297. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_hook_runner.py +0 -0
  298. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_resolver.py +0 -0
  299. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_runtime.py +0 -0
  300. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
  301. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_starter.py +0 -0
  302. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_supervisor.py +0 -0
  303. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/runner.py +0 -0
  304. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/server.py +0 -0
  305. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runner/storage.py +0 -0
  306. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runtime/__init__.py +0 -0
  307. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runtime/deployment.py +0 -0
  308. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runtime/flow_run.py +0 -0
  309. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/runtime/task_run.py +0 -0
  310. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/schedules.py +0 -0
  311. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/serializers.py +0 -0
  312. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/__init__.py +0 -0
  313. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/_ui_static.py +0 -0
  314. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/admin.py +0 -0
  315. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/artifacts.py +0 -0
  316. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/automations.py +0 -0
  317. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/background_workers.py +0 -0
  318. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
  319. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_documents.py +0 -0
  320. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_schemas.py +0 -0
  321. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_types.py +0 -0
  322. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/clients.py +0 -0
  323. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/collections.py +0 -0
  324. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/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.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
  326. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  327. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/csrf_token.py +0 -0
  328. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/dependencies.py +0 -0
  329. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/deployments.py +0 -0
  330. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/events.py +0 -0
  331. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
  332. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/flow_runs.py +0 -0
  333. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/flows.py +0 -0
  334. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/logs.py +0 -0
  335. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/middleware.py +0 -0
  336. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/root.py +0 -0
  337. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/run_history.py +0 -0
  338. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/saved_searches.py +0 -0
  339. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/server.py +0 -0
  340. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  341. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/task_run_states.py +0 -0
  342. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/task_runs.py +0 -0
  343. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/task_workers.py +0 -0
  344. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/templates.py +0 -0
  345. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
  346. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/flow_runs.py +0 -0
  347. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/flows.py +0 -0
  348. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
  349. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/task_runs.py +0 -0
  350. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/validation.py +0 -0
  351. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/variables.py +0 -0
  352. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/work_queues.py +0 -0
  353. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/server/api/workers.py +0 -0
  354. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/AGENTS.md +0 -0
  355. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/__init__.py +0 -0
  356. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/_types.py +0 -0
  357. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/base.py +0 -0
  358. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/constants.py +0 -0
  359. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/context.py +0 -0
  360. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/legacy.py +0 -0
  361. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/__init__.py +0 -0
  362. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/_defaults.py +0 -0
  363. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/api.py +0 -0
  364. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/cli.py +0 -0
  365. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/client.py +0 -0
  366. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/cloud.py +0 -0
  367. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/deployments.py +0 -0
  368. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/events.py +0 -0
  369. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/experiments.py +0 -0
  370. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/flows.py +0 -0
  371. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/internal.py +0 -0
  372. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/logging.py +0 -0
  373. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/plugins.py +0 -0
  374. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/results.py +0 -0
  375. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/root.py +0 -0
  376. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/runner.py +0 -0
  377. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
  378. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/api.py +0 -0
  379. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/concurrency.py +0 -0
  380. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/database.py +0 -0
  381. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
  382. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/docket.py +0 -0
  383. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
  384. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/events.py +0 -0
  385. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  386. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/logs.py +0 -0
  387. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/root.py +0 -0
  388. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/services.py +0 -0
  389. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/tasks.py +0 -0
  390. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/ui.py +0 -0
  391. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/worker_channel.py +0 -0
  392. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/tasks.py +0 -0
  393. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/telemetry.py +0 -0
  394. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/testing.py +0 -0
  395. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/worker.py +0 -0
  396. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/profiles.py +0 -0
  397. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/profiles.toml +0 -0
  398. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/settings/sources.py +0 -0
  399. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/states.py +0 -0
  400. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/task_engine.py +0 -0
  401. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/task_runners.py +0 -0
  402. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/task_runs.py +0 -0
  403. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/task_worker.py +0 -0
  404. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/tasks.py +0 -0
  405. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/telemetry/__init__.py +0 -0
  406. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
  407. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/transactions.py +0 -0
  408. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/types/__init__.py +0 -0
  409. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/types/_concurrency.py +0 -0
  410. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/types/_datetime.py +0 -0
  411. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/types/entrypoint.py +0 -0
  412. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/types/names.py +0 -0
  413. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/AGENTS.md +0 -0
  414. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/__init__.py +0 -0
  415. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/annotations.py +0 -0
  416. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  417. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  418. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/callables/AGENTS.md +0 -0
  419. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/collections.py +0 -0
  420. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/compat.py +0 -0
  421. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/context.py +0 -0
  422. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/dispatch.py +0 -0
  423. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/dockerutils.py +0 -0
  424. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/engine/AGENTS.md +0 -0
  425. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/engine/__init__.py +0 -0
  426. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/generics.py +0 -0
  427. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/hashing.py +0 -0
  428. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/importtools.py +0 -0
  429. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/math.py +0 -0
  430. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/names.py +0 -0
  431. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  432. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/processutils/__init__.py +0 -0
  433. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/pydantic.py +0 -0
  434. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/render_swagger.py +0 -0
  435. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  436. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  437. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  438. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/validation.py +0 -0
  439. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/services.py +0 -0
  440. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/slugify.py +0 -0
  441. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/templating/AGENTS.md +0 -0
  442. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/templating/__init__.py +0 -0
  443. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/text.py +0 -0
  444. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/timeout.py +0 -0
  445. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/urls.py +0 -0
  446. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/utilities/visualization.py +0 -0
  447. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/variables.py +0 -0
  448. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/__init__.py +0 -0
  449. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_cleanup.py +0 -0
  450. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_cleanup_handlers.py +0 -0
  451. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  452. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  453. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_state.py +0 -0
  454. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  455. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  456. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/block.py +0 -0
  457. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/cloud.py +0 -0
  458. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/src/prefect/workers/process.py +0 -0
  459. {prefect_client-3.8.8.dev4 → prefect_client-3.8.9.dev1}/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.dev1
4
4
  Summary: Workflow orchestration and management.
5
5
  Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
6
6
  Project-URL: Documentation, https://docs.prefect.io
@@ -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.dev1"
3
+ __build_date__ = "2026-10-07 08:22:05.387495+00:00"
4
+ __git_commit__ = "6c7fefcb8729546e9a7b5b63e310669370348106"
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,46 @@
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 reset_maintenance_backoff() -> None:
43
+ """Forget any recorded maintenance back-off (for tests)."""
44
+ global _backoff_ends_at
45
+ with _backoff_lock:
46
+ _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
@@ -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
@@ -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
@@ -6,10 +6,9 @@ import copy
6
6
  import datetime
7
7
  import logging
8
8
  import os
9
- import threading
10
9
  import uuid
11
10
  import warnings
12
- from contextlib import AsyncExitStack
11
+ from contextlib import AsyncExitStack, ExitStack
13
12
  from functools import partial
14
13
  from importlib.metadata import distributions
15
14
  from typing import (
@@ -39,6 +38,7 @@ from prefect._internal.infrastructure_exit_codes import get_infrastructure_exit_
39
38
  from prefect._internal.launchers import resolve_bundle_step_with_launcher
40
39
  from prefect._internal.observers import FlowRunCancellingObserver
41
40
  from prefect._internal.schemas.validators import return_v_or_none
41
+ from prefect._internal.server_maintenance import maintenance_backoff_ends_at
42
42
  from prefect.client.orchestration import PrefectClient, get_client
43
43
  from prefect.client.schemas.objects import Flow as APIFlow
44
44
  from prefect.client.schemas.objects import (
@@ -126,6 +126,28 @@ def _is_transient_api_error(exc: httpx.HTTPError) -> bool:
126
126
  return isinstance(exc, httpx.TransportError)
127
127
 
128
128
 
129
+ def _is_within_polling_window(
130
+ last_polled_time: datetime.datetime, query_interval_seconds: float
131
+ ) -> bool:
132
+ """
133
+ Whether a worker that last polled at `last_polled_time` is within its
134
+ polling window of `query_interval_seconds` x 30.
135
+
136
+ While the Prefect API is in maintenance, requests wait out the `Retry-After`
137
+ it sends, so the window counts from the later of `last_polled_time` and the
138
+ end of the latest maintenance back-off.
139
+ """
140
+ window_start = last_polled_time
141
+ backoff_ends_at = maintenance_backoff_ends_at()
142
+ if backoff_ends_at is not None and backoff_ends_at > window_start:
143
+ window_start = backoff_ends_at
144
+
145
+ seconds_since_window_start = (
146
+ prefect.types._datetime.now("UTC") - window_start
147
+ ).total_seconds()
148
+ return seconds_since_window_start <= query_interval_seconds * 30
149
+
150
+
129
151
  class BaseJobConfiguration(BaseModel):
130
152
  command: Optional[str] = Field(
131
153
  default=None,
@@ -843,9 +865,25 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
843
865
  with_healthcheck: If set, the worker will start a healthcheck server.
844
866
  printer: A `print`-like function where logs will be reported.
845
867
  """
846
- healthcheck_server = None
847
- healthcheck_thread = None
868
+ healthcheck_stack = ExitStack()
848
869
  try:
870
+ if with_healthcheck:
871
+ from prefect.workers.server import (
872
+ _run_healthcheck_server, # pyright: ignore[reportPrivateUsage]
873
+ )
874
+
875
+ # Started before setup, which syncs with the API: while the API is
876
+ # in maintenance that sync waits, and the healthcheck must still
877
+ # answer.
878
+ query_interval_seconds = PREFECT_WORKER_QUERY_SECONDS.value()
879
+ healthcheck_stack.enter_context(
880
+ _run_healthcheck_server(
881
+ lambda: self.is_worker_still_polling(
882
+ query_interval_seconds=query_interval_seconds
883
+ )
884
+ )
885
+ )
886
+
849
887
  async with self as worker:
850
888
  polling_service = partial(
851
889
  critical_service_loop,
@@ -882,21 +920,6 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
882
920
 
883
921
  start_client_metrics_server()
884
922
 
885
- if with_healthcheck:
886
- from prefect.workers.server import build_healthcheck_server
887
-
888
- # we'll start the ASGI server in a separate thread so that
889
- # uvicorn does not block the main thread
890
- healthcheck_server = build_healthcheck_server(
891
- worker=worker,
892
- query_interval_seconds=PREFECT_WORKER_QUERY_SECONDS.value(),
893
- )
894
- healthcheck_thread = threading.Thread(
895
- name="healthcheck-server-thread",
896
- target=healthcheck_server.run,
897
- daemon=True,
898
- )
899
- healthcheck_thread.start()
900
923
  printer(f"Worker {worker.name!r} started!")
901
924
 
902
925
  # If running once, wait for active runs to finish before teardown
@@ -910,12 +933,7 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
910
933
  await anyio.sleep(0.1)
911
934
  finally:
912
935
  stop_client_metrics_server()
913
-
914
- if healthcheck_server and healthcheck_thread:
915
- self._logger.debug("Stopping healthcheck server...")
916
- healthcheck_server.should_exit = True
917
- healthcheck_thread.join()
918
- self._logger.debug("Healthcheck server stopped.")
936
+ healthcheck_stack.close()
919
937
 
920
938
  printer(f"Worker {worker.name!r} stopped!")
921
939
 
@@ -1294,18 +1312,21 @@ class BaseWorker(abc.ABC, Generic[C, V, R]):
1294
1312
  the loop services - we will evaluate if the _last_polled_time
1295
1313
  was within that interval x 30 (so 10s -> 5m)
1296
1314
 
1315
+ While the Prefect API is in maintenance, requests wait out the
1316
+ `Retry-After` it sends, so the window counts from the later of
1317
+ `self._last_polled_time` and the end of the latest maintenance back-off.
1318
+
1297
1319
  The instance property `self._last_polled_time`
1298
1320
  is currently set/updated in `get_and_submit_flow_runs()`
1299
1321
  """
1300
- threshold_seconds = query_interval_seconds * 30
1301
-
1302
- seconds_since_last_poll = (
1303
- prefect.types._datetime.now("UTC") - self._last_polled_time
1304
- ).total_seconds()
1305
-
1306
- is_still_polling = seconds_since_last_poll <= threshold_seconds
1322
+ is_still_polling = _is_within_polling_window(
1323
+ self._last_polled_time, query_interval_seconds
1324
+ )
1307
1325
 
1308
1326
  if not is_still_polling:
1327
+ seconds_since_last_poll = (
1328
+ prefect.types._datetime.now("UTC") - self._last_polled_time
1329
+ ).total_seconds()
1309
1330
  self._logger.error(
1310
1331
  f"Worker has not polled in the last {seconds_since_last_poll} seconds "
1311
1332
  "and should be restarted"