prefect-client 3.8.8.dev3__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.dev3 → prefect_client-3.8.9.dev1}/PKG-INFO +3 -4
  2. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/README.md +1 -1
  3. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/pyproject.toml +1 -2
  4. {prefect_client-3.8.8.dev3 → 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.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/_logging.py +1 -7
  7. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/services.py +33 -12
  8. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/collections.py +24 -4
  9. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/manager.py +1 -7
  10. prefect_client-3.8.9.dev1/src/prefect/_internal/server_maintenance.py +46 -0
  11. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/blocks/core.py +1 -4
  12. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/blocks/notifications.py +1 -0
  13. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/bundles/__init__.py +5 -9
  14. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/cache_policies.py +3 -3
  15. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/base.py +52 -4
  16. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/__init__.py +3 -3
  17. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/filesystems.py +16 -10
  18. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/logging/formatters.py +2 -5
  19. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/logging/loggers.py +1 -5
  20. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/runner.py +8 -1
  21. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/task_engine.py +14 -10
  22. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/tasks.py +3 -0
  23. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/callables/__init__.py +1 -1
  24. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/filesystem/AGENTS.md +1 -1
  25. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/filesystem/__init__.py +10 -1
  26. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/validation.py +5 -2
  27. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/templating/__init__.py +9 -2
  28. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/AGENTS.md +1 -0
  29. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/base.py +53 -32
  30. prefect_client-3.8.9.dev1/src/prefect/workers/server.py +128 -0
  31. prefect_client-3.8.8.dev3/src/prefect/_build_info.py +0 -5
  32. prefect_client-3.8.8.dev3/src/prefect/workers/server.py +0 -66
  33. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/.gitignore +0 -0
  34. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/LICENSE +0 -0
  35. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/hatch_build.py +0 -0
  36. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/.prefectignore +0 -0
  37. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/AGENTS.md +0 -0
  38. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/__main__.py +0 -0
  39. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/__init__.py +0 -0
  40. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/_launchers.py +0 -0
  41. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/bundles/__init__.py +0 -0
  42. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/bundles/execute.py +0 -0
  43. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/__init__.py +0 -0
  44. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/apply.py +0 -0
  45. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  46. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/manager.py +0 -0
  47. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/plugins/spec.py +0 -0
  48. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
  49. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/sla/client.py +0 -0
  50. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
  51. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_flow_run_suspension.py +0 -0
  52. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/__init__.py +0 -0
  53. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/__init__.py +0 -0
  54. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  55. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/client.py +0 -0
  56. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/device_id.py +0 -0
  57. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/emit.py +0 -0
  58. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/enabled.py +0 -0
  59. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/events.py +0 -0
  60. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/milestones.py +0 -0
  61. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/notice.py +0 -0
  62. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/analytics/service.py +0 -0
  63. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/ast_utils.py +0 -0
  64. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/attempt_control.py +0 -0
  65. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/buildx.py +0 -0
  66. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
  67. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  68. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/backports.py +0 -0
  69. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/blocks.py +0 -0
  70. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  71. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  72. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
  73. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/compatibility/starlette.py +0 -0
  74. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
  75. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
  76. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
  77. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  78. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  79. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
  80. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
  81. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
  82. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
  83. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/control_listener.py +0 -0
  84. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/deprecated.py +0 -0
  85. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/engine.py +0 -0
  86. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/git.py +0 -0
  87. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  88. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/installation.py +0 -0
  89. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/integrations.py +0 -0
  90. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/launchers.py +0 -0
  91. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/lazy.py +0 -0
  92. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/metrics.py +0 -0
  93. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/observability.py +0 -0
  94. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/observers.py +0 -0
  95. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/__init__.py +0 -0
  96. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/apply.py +0 -0
  97. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  98. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/spec.py +0 -0
  99. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/plugins/startup.py +0 -0
  100. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
  101. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
  102. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  103. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  104. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  105. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/pytz.py +0 -0
  106. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/result_records.py +0 -0
  107. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/retries.py +0 -0
  108. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schema.py +0 -0
  109. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
  110. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/_registry.py +0 -0
  111. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
  112. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
  113. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
  114. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
  115. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  116. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/states.py +0 -0
  117. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/testing.py +0 -0
  118. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/urls.py +0 -0
  119. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/uuid7.py +0 -0
  120. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/version_checking.py +0 -0
  121. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/versioning.py +0 -0
  122. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/waiters.py +0 -0
  123. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_internal/websockets.py +0 -0
  124. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/__init__.py +0 -0
  125. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/fetcher.py +0 -0
  126. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/generator.py +0 -0
  127. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/models.py +0 -0
  128. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/naming.py +0 -0
  129. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/renderer.py +0 -0
  130. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/schema_converter.py +0 -0
  131. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/templates/__init__.py +0 -0
  132. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  133. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/types.py +0 -0
  134. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_sdk/unions.py +0 -0
  135. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
  136. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
  137. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/agent.py +0 -0
  138. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/analytics/__init__.py +0 -0
  139. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/artifacts.py +0 -0
  140. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/assets/__init__.py +0 -0
  141. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/assets/core.py +0 -0
  142. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/assets/materialize.py +0 -0
  143. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/automations.py +0 -0
  144. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/blocks/AGENTS.md +0 -0
  145. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/blocks/__init__.py +0 -0
  146. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/blocks/abstract.py +0 -0
  147. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/blocks/fields.py +0 -0
  148. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/blocks/redis.py +0 -0
  149. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/blocks/system.py +0 -0
  150. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/blocks/webhook.py +0 -0
  151. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_file_collector.py +0 -0
  152. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_ignore_filter.py +0 -0
  153. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_path_resolver.py +0 -0
  154. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_zip_builder.py +0 -0
  155. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/bundles/_zip_extractor.py +0 -0
  156. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/bundles/execute.py +0 -0
  157. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/AGENTS.md +0 -0
  158. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/__init__.py +0 -0
  159. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/attribution.py +0 -0
  160. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/cloud.py +0 -0
  161. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/collections.py +0 -0
  162. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/constants.py +0 -0
  163. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/__init__.py +0 -0
  164. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  165. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  166. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  167. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
  168. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  169. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  170. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  171. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  172. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  173. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  174. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  175. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  176. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  177. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  178. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  179. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_events/client.py +0 -0
  180. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  181. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  182. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  183. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
  184. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  185. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
  186. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  187. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
  188. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  189. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  190. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/base.py +0 -0
  191. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/orchestration/routes.py +0 -0
  192. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/actions.py +0 -0
  193. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/events.py +0 -0
  194. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/filters.py +0 -0
  195. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/objects.py +0 -0
  196. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/responses.py +0 -0
  197. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/schedules.py +0 -0
  198. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/sorting.py +0 -0
  199. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/schemas/worker_channel.py +0 -0
  200. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/subscriptions.py +0 -0
  201. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/types/__init__.py +0 -0
  202. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  203. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/client/utilities.py +0 -0
  204. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/AGENTS.md +0 -0
  205. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/__init__.py +0 -0
  206. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_asyncio.py +0 -0
  207. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_events.py +0 -0
  208. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_leases.py +0 -0
  209. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/_sync.py +0 -0
  210. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/asyncio.py +0 -0
  211. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/context.py +0 -0
  212. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/services.py +0 -0
  213. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/sync.py +0 -0
  214. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
  215. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  216. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
  217. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
  218. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/context.py +0 -0
  219. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/services.py +0 -0
  220. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
  221. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/context.py +0 -0
  222. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/AGENTS.md +0 -0
  223. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/__init__.py +0 -0
  224. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/base.py +0 -0
  225. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/deployments.py +0 -0
  226. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/flow_runs.py +0 -0
  227. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/runner.py +0 -0
  228. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/schedules.py +0 -0
  229. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
  230. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/core.py +0 -0
  231. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/pull.py +0 -0
  232. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/deployments/steps/utility.py +0 -0
  233. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/docker/__init__.py +0 -0
  234. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/docker/_buildx.py +0 -0
  235. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/docker/docker_image.py +0 -0
  236. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/engine.py +0 -0
  237. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/AGENTS.md +0 -0
  238. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/__init__.py +0 -0
  239. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/actions.py +0 -0
  240. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/clients.py +0 -0
  241. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/filters.py +0 -0
  242. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/related.py +0 -0
  243. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/__init__.py +0 -0
  244. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/automations.py +0 -0
  245. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  246. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/events.py +0 -0
  247. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/schemas/labelling.py +0 -0
  248. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/subscribers.py +0 -0
  249. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/utilities.py +0 -0
  250. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/events/worker.py +0 -0
  251. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/exceptions.py +0 -0
  252. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/flow_engine.py +0 -0
  253. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/flow_runs.py +0 -0
  254. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/flows.py +0 -0
  255. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/futures.py +0 -0
  256. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/__init__.py +0 -0
  257. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/base.py +0 -0
  258. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  259. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  260. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  261. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  262. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  263. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  264. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/input/__init__.py +0 -0
  265. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/input/actions.py +0 -0
  266. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/input/run_input.py +0 -0
  267. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/locking/__init__.py +0 -0
  268. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/locking/_filelock.py +0 -0
  269. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/locking/filesystem.py +0 -0
  270. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/locking/memory.py +0 -0
  271. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/locking/protocol.py +0 -0
  272. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/logging/AGENTS.md +0 -0
  273. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/logging/__init__.py +0 -0
  274. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/logging/clients.py +0 -0
  275. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/logging/configuration.py +0 -0
  276. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/logging/filters.py +0 -0
  277. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/logging/handlers.py +0 -0
  278. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/logging/highlighters.py +0 -0
  279. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/logging/logging.yml +0 -0
  280. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/main.py +0 -0
  281. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/plugins.py +0 -0
  282. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/py.typed +0 -0
  283. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/results.py +0 -0
  284. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/AGENTS.md +0 -0
  285. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/__init__.py +0 -0
  286. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_cancel_finalizer.py +0 -0
  287. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_cancellation_manager.py +0 -0
  288. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_control_channel.py +0 -0
  289. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_deployment_registry.py +0 -0
  290. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_event_emitter.py +0 -0
  291. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_flow_resolver.py +0 -0
  292. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_flow_run_executor.py +0 -0
  293. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_hook_runner.py +0 -0
  294. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_limit_manager.py +0 -0
  295. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_process_manager.py +0 -0
  296. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  297. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_starter_bundle.py +0 -0
  298. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_starter_direct.py +0 -0
  299. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_starter_engine.py +0 -0
  300. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_state_proposer.py +0 -0
  301. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_uv_command.py +0 -0
  302. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_hook_runner.py +0 -0
  303. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_resolver.py +0 -0
  304. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_runtime.py +0 -0
  305. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
  306. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_starter.py +0 -0
  307. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/_workspace_supervisor.py +0 -0
  308. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/server.py +0 -0
  309. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runner/storage.py +0 -0
  310. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runtime/__init__.py +0 -0
  311. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runtime/deployment.py +0 -0
  312. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runtime/flow_run.py +0 -0
  313. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/runtime/task_run.py +0 -0
  314. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/schedules.py +0 -0
  315. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/serializers.py +0 -0
  316. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/__init__.py +0 -0
  317. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/_ui_static.py +0 -0
  318. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/admin.py +0 -0
  319. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/artifacts.py +0 -0
  320. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/automations.py +0 -0
  321. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/background_workers.py +0 -0
  322. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
  323. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_documents.py +0 -0
  324. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_schemas.py +0 -0
  325. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/block_types.py +0 -0
  326. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/clients.py +0 -0
  327. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/collections.py +0 -0
  328. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  329. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
  330. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  331. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/csrf_token.py +0 -0
  332. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/dependencies.py +0 -0
  333. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/deployments.py +0 -0
  334. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/events.py +0 -0
  335. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
  336. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/flow_runs.py +0 -0
  337. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/flows.py +0 -0
  338. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/logs.py +0 -0
  339. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/middleware.py +0 -0
  340. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/root.py +0 -0
  341. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/run_history.py +0 -0
  342. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/saved_searches.py +0 -0
  343. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/server.py +0 -0
  344. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  345. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/task_run_states.py +0 -0
  346. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/task_runs.py +0 -0
  347. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/task_workers.py +0 -0
  348. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/templates.py +0 -0
  349. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
  350. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/flow_runs.py +0 -0
  351. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/flows.py +0 -0
  352. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
  353. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/ui/task_runs.py +0 -0
  354. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/validation.py +0 -0
  355. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/variables.py +0 -0
  356. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/work_queues.py +0 -0
  357. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/server/api/workers.py +0 -0
  358. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/AGENTS.md +0 -0
  359. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/__init__.py +0 -0
  360. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/_types.py +0 -0
  361. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/base.py +0 -0
  362. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/constants.py +0 -0
  363. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/context.py +0 -0
  364. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/legacy.py +0 -0
  365. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/__init__.py +0 -0
  366. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/_defaults.py +0 -0
  367. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/api.py +0 -0
  368. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/cli.py +0 -0
  369. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/client.py +0 -0
  370. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/cloud.py +0 -0
  371. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/deployments.py +0 -0
  372. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/events.py +0 -0
  373. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/experiments.py +0 -0
  374. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/flows.py +0 -0
  375. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/internal.py +0 -0
  376. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/logging.py +0 -0
  377. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/plugins.py +0 -0
  378. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/results.py +0 -0
  379. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/root.py +0 -0
  380. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/runner.py +0 -0
  381. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
  382. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/api.py +0 -0
  383. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/concurrency.py +0 -0
  384. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/database.py +0 -0
  385. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
  386. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/docket.py +0 -0
  387. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
  388. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/events.py +0 -0
  389. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  390. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/logs.py +0 -0
  391. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/root.py +0 -0
  392. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/services.py +0 -0
  393. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/tasks.py +0 -0
  394. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/ui.py +0 -0
  395. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/server/worker_channel.py +0 -0
  396. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/tasks.py +0 -0
  397. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/telemetry.py +0 -0
  398. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/testing.py +0 -0
  399. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/models/worker.py +0 -0
  400. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/profiles.py +0 -0
  401. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/profiles.toml +0 -0
  402. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/settings/sources.py +0 -0
  403. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/states.py +0 -0
  404. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/task_runners.py +0 -0
  405. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/task_runs.py +0 -0
  406. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/task_worker.py +0 -0
  407. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/telemetry/__init__.py +0 -0
  408. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
  409. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/transactions.py +0 -0
  410. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/types/__init__.py +0 -0
  411. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/types/_concurrency.py +0 -0
  412. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/types/_datetime.py +0 -0
  413. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/types/entrypoint.py +0 -0
  414. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/types/names.py +0 -0
  415. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/AGENTS.md +0 -0
  416. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/__init__.py +0 -0
  417. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/annotations.py +0 -0
  418. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  419. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  420. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/callables/AGENTS.md +0 -0
  421. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/collections.py +0 -0
  422. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/compat.py +0 -0
  423. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/context.py +0 -0
  424. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/dispatch.py +0 -0
  425. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/dockerutils.py +0 -0
  426. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/engine/AGENTS.md +0 -0
  427. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/engine/__init__.py +0 -0
  428. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/generics.py +0 -0
  429. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/hashing.py +0 -0
  430. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/importtools.py +0 -0
  431. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/math.py +0 -0
  432. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/names.py +0 -0
  433. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  434. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/processutils/__init__.py +0 -0
  435. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/pydantic.py +0 -0
  436. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/render_swagger.py +0 -0
  437. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  438. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  439. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  440. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/services.py +0 -0
  441. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/slugify.py +0 -0
  442. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/templating/AGENTS.md +0 -0
  443. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/text.py +0 -0
  444. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/timeout.py +0 -0
  445. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/urls.py +0 -0
  446. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/utilities/visualization.py +0 -0
  447. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/variables.py +0 -0
  448. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/__init__.py +0 -0
  449. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/_cleanup.py +0 -0
  450. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/_cleanup_handlers.py +0 -0
  451. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  452. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  453. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_state.py +0 -0
  454. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  455. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  456. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/block.py +0 -0
  457. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/cloud.py +0 -0
  458. {prefect_client-3.8.8.dev3 → prefect_client-3.8.9.dev1}/src/prefect/workers/process.py +0 -0
  459. {prefect_client-3.8.8.dev3 → 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.dev3
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):
@@ -57,6 +57,9 @@ if hasattr(os, "register_at_fork"):
57
57
  class _QueueServiceBase(abc.ABC, Generic[T]):
58
58
  _instances: dict[int, Self] = {}
59
59
  _instance_lock = threading.Lock()
60
+ # Keep cache access separate from startup serialization: instance() waits for
61
+ # the global loop, whose service cleanup must be able to evict instances.
62
+ _instance_cache_lock = threading.Lock()
60
63
  _max_queue_size: int = 0 # 0 means unbounded
61
64
 
62
65
  def __init__(self, *args: Hashable) -> None:
@@ -96,6 +99,7 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
96
99
  """Reset class-level state after fork() to prevent deadlocks in child process."""
97
100
  cls._instances.clear()
98
101
  cls._instance_lock = threading.Lock()
102
+ cls._instance_cache_lock = threading.Lock()
99
103
 
100
104
  def start(self) -> None:
101
105
  logger.debug("Starting service %r", self)
@@ -281,7 +285,8 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
281
285
  """
282
286
  futures: list[concurrent.futures.Future[bool]] = []
283
287
  with cls._instance_lock:
284
- instances = tuple(cls._instances.values())
288
+ with cls._instance_cache_lock:
289
+ instances = tuple(cls._instances.values())
285
290
 
286
291
  for instance in instances:
287
292
  futures.append(instance._drain(at_exit=at_exit))
@@ -312,28 +317,44 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
312
317
  """
313
318
  with cls._instance_lock:
314
319
  key = hash((cls, *args))
315
- if key not in cls._instances:
316
- cls._instances[key] = cls._new_instance(*args)
320
+ with cls._instance_cache_lock:
321
+ instance = cls._instances.get(key)
322
+ if instance is None or instance._stopped:
323
+ instance = cls._new_instance(*args)
317
324
 
318
- return cls._instances[key]
325
+ return instance
319
326
 
320
327
  def _remove_instance(self):
321
- self._instances.pop(self._key, None)
328
+ # Only evict this instance; a newer instance may already be cached under
329
+ # the same key
330
+ with self._instance_cache_lock:
331
+ if self._instances.get(self._key) is self:
332
+ self._instances.pop(self._key, None)
322
333
 
323
334
  @classmethod
324
335
  def _new_instance(cls, *args: Hashable) -> Self:
325
336
  """
326
- Create and start a new instance of the service.
337
+ Create, cache, and start a new instance of the service.
327
338
  """
328
339
  instance = cls(*args)
329
340
 
330
- # If already on the global loop, just start it here to avoid deadlock
331
- if threading.get_ident() == get_global_loop().thread.ident:
332
- instance.start()
341
+ # Cache before starting so that a service which stops while starting, e.g.
342
+ # because its lifespan failed, evicts itself instead of being cached after
343
+ # it has already stopped
344
+ with cls._instance_cache_lock:
345
+ cls._instances[instance._key] = instance
333
346
 
334
- # Otherwise, bind the service to the global loop
335
- else:
336
- from_sync.call_soon_in_loop_thread(create_call(instance.start)).result()
347
+ try:
348
+ # If already on the global loop, just start it here to avoid deadlock
349
+ if threading.get_ident() == get_global_loop().thread.ident:
350
+ instance.start()
351
+
352
+ # Otherwise, bind the service to the global loop
353
+ else:
354
+ from_sync.call_soon_in_loop_thread(create_call(instance.start)).result()
355
+ except BaseException:
356
+ instance._remove_instance()
357
+ raise
337
358
 
338
359
  return instance
339
360
 
@@ -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, ...]:
@@ -751,6 +751,7 @@ class MattermostWebhook(AbstractAppriseNotificationBlock):
751
751
  token=self.token.get_secret_value(),
752
752
  fullpath=self.path,
753
753
  host=self.hostname,
754
+ user=self.botname,
754
755
  targets=self.channels,
755
756
  include_image=self.include_image,
756
757
  port=self.port,
@@ -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:
@@ -1,7 +1,7 @@
1
1
  import inspect
2
2
  import sys
3
3
  from copy import deepcopy
4
- from dataclasses import dataclass, field
4
+ from dataclasses import dataclass, field, replace
5
5
  from logging import Logger
6
6
  from pathlib import Path
7
7
  from typing import (
@@ -255,7 +255,7 @@ class CompoundCachePolicy(CachePolicy):
255
255
 
256
256
  if inputs_policies:
257
257
  new = Inputs(exclude=[other])
258
- return CompoundCachePolicy(policies=[*self.policies, new])
258
+ return replace(self, policies=[*self.policies, new])
259
259
  else:
260
260
  # no dependency on inputs already
261
261
  return self
@@ -404,7 +404,7 @@ class Inputs(CachePolicy):
404
404
  def __sub__(self, other: str) -> "CachePolicy":
405
405
  if not isinstance(other, str): # type: ignore[reportUnnecessaryIsInstance]
406
406
  raise TypeError("Can only subtract strings from key policies.")
407
- return Inputs(exclude=self.exclude + [other])
407
+ return replace(self, exclude=self.exclude + [other])
408
408
 
409
409
 
410
410
  INPUTS = Inputs()
@@ -1,4 +1,5 @@
1
1
  import copy
2
+ import math
2
3
  import sys
3
4
  import threading
4
5
  import time
@@ -7,6 +8,7 @@ from collections import defaultdict
7
8
  from collections.abc import AsyncGenerator, Awaitable, MutableMapping
8
9
  from contextlib import asynccontextmanager
9
10
  from datetime import datetime, timezone
11
+ from email.utils import parsedate_to_datetime
10
12
  from logging import Logger
11
13
  from typing import TYPE_CHECKING, Any, Callable, Optional, Protocol, runtime_checkable
12
14
 
@@ -18,6 +20,7 @@ from typing_extensions import Self
18
20
 
19
21
  import prefect
20
22
  from prefect._internal.compatibility.starlette import status
23
+ from prefect._internal.server_maintenance import record_maintenance_backoff
21
24
  from prefect.client import constants
22
25
  from prefect.client.attribution import get_attribution_headers
23
26
  from prefect.client.schemas.objects import CsrfToken
@@ -44,6 +47,20 @@ APP_LIFESPANS_REF_COUNTS: dict[tuple[int, int], int] = {}
44
47
  APP_LIFESPANS_LOCKS: dict[int, anyio.Lock] = defaultdict(anyio.Lock)
45
48
 
46
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
+
47
64
  logger: Logger = get_logger("client")
48
65
 
49
66
 
@@ -177,6 +194,31 @@ class PrefectResponse(httpx.Response):
177
194
  return new_response
178
195
 
179
196
 
197
+ def _parse_retry_after(value: str) -> float | None:
198
+ """
199
+ Parse a `Retry-After` header value into a number of seconds to wait.
200
+
201
+ Supports both forms allowed by RFC 9110: delay-seconds and HTTP-date. Returns
202
+ `None` if the value cannot be interpreted so callers can fall back to their
203
+ default backoff.
204
+ """
205
+ try:
206
+ seconds = float(value)
207
+ except ValueError:
208
+ try:
209
+ retry_at = parsedate_to_datetime(value)
210
+ except (TypeError, ValueError, OverflowError):
211
+ return None
212
+ if retry_at.tzinfo is None:
213
+ retry_at = retry_at.replace(tzinfo=timezone.utc)
214
+ seconds = (retry_at - datetime.now(timezone.utc)).total_seconds()
215
+
216
+ if not math.isfinite(seconds):
217
+ return None
218
+
219
+ return max(0.0, seconds)
220
+
221
+
180
222
  class PrefectHttpxAsyncClient(httpx.AsyncClient):
181
223
  """
182
224
  A Prefect wrapper for the async httpx client with support for retry-after headers
@@ -293,7 +335,9 @@ class PrefectHttpxAsyncClient(httpx.AsyncClient):
293
335
  return response
294
336
 
295
337
  if "Retry-After" in response.headers:
296
- retry_seconds = float(response.headers["Retry-After"])
338
+ retry_seconds = _parse_retry_after(response.headers["Retry-After"])
339
+
340
+ retry_after_from_header = retry_seconds is not None
297
341
 
298
342
  # Use an exponential back-off if not set in a header
299
343
  if retry_seconds is None:
@@ -302,7 +346,7 @@ class PrefectHttpxAsyncClient(httpx.AsyncClient):
302
346
  # Add jitter
303
347
  jitter_factor = PREFECT_CLIENT_RETRY_JITTER_FACTOR.value()
304
348
  if retry_seconds > 0 and jitter_factor > 0:
305
- if response is not None and "Retry-After" in response.headers:
349
+ if retry_after_from_header:
306
350
  # Always wait for _at least_ retry seconds if requested by the API
307
351
  retry_seconds = bounded_poisson_interval(
308
352
  retry_seconds, retry_seconds * (1 + jitter_factor)
@@ -327,6 +371,7 @@ class PrefectHttpxAsyncClient(httpx.AsyncClient):
327
371
  f" {try_count}/{PREFECT_CLIENT_MAX_RETRIES.value() + 1}.",
328
372
  exc_info=exc_info,
329
373
  )
374
+ _record_if_maintenance_backoff(response, exc_info, retry_seconds)
330
375
  await anyio.sleep(retry_seconds)
331
376
 
332
377
  assert response is not None, (
@@ -563,7 +608,9 @@ class PrefectHttpxSyncClient(httpx.Client):
563
608
  return response
564
609
 
565
610
  if "Retry-After" in response.headers:
566
- retry_seconds = float(response.headers["Retry-After"])
611
+ retry_seconds = _parse_retry_after(response.headers["Retry-After"])
612
+
613
+ retry_after_from_header = retry_seconds is not None
567
614
 
568
615
  # Use an exponential back-off if not set in a header
569
616
  if retry_seconds is None:
@@ -572,7 +619,7 @@ class PrefectHttpxSyncClient(httpx.Client):
572
619
  # Add jitter
573
620
  jitter_factor = PREFECT_CLIENT_RETRY_JITTER_FACTOR.value()
574
621
  if retry_seconds > 0 and jitter_factor > 0:
575
- if response is not None and "Retry-After" in response.headers:
622
+ if retry_after_from_header:
576
623
  # Always wait for _at least_ retry seconds if requested by the API
577
624
  retry_seconds = bounded_poisson_interval(
578
625
  retry_seconds, retry_seconds * (1 + jitter_factor)
@@ -597,6 +644,7 @@ class PrefectHttpxSyncClient(httpx.Client):
597
644
  f" {try_count}/{PREFECT_CLIENT_MAX_RETRIES.value() + 1}.",
598
645
  exc_info=exc_info,
599
646
  )
647
+ _record_if_maintenance_backoff(response, exc_info, retry_seconds)
600
648
  time.sleep(retry_seconds)
601
649
 
602
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