prefect-client 3.8.9.dev6__tar.gz → 3.9.0__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 (461) hide show
  1. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/PKG-INFO +7 -6
  2. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/pyproject.toml +7 -5
  3. prefect_client-3.9.0/src/prefect/_build_info.py +5 -0
  4. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/compatibility/deprecated.py +5 -3
  5. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/concurrency/services.py +33 -6
  6. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/runner.py +85 -10
  7. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/__init__.py +2 -0
  8. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/actions.py +62 -2
  9. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/schemas/automations.py +23 -11
  10. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/flow_runs.py +1 -1
  11. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/flows.py +5 -5
  12. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/futures.py +2 -2
  13. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/logging/AGENTS.md +2 -1
  14. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/logging/handlers.py +40 -9
  15. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/AGENTS.md +4 -13
  16. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_process_manager.py +9 -0
  17. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_scheduled_run_poller.py +1 -2
  18. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_starter_bundle.py +0 -1
  19. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_starter_direct.py +0 -1
  20. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_starter_engine.py +2 -3
  21. prefect_client-3.9.0/src/prefect/runner/runner.py +918 -0
  22. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/server.py +1 -1
  23. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runtime/flow_run.py +7 -2
  24. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/concurrency_limits_v2.py +3 -3
  25. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/flow_runs.py +1 -2
  26. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/ui/flow_runs.py +1 -1
  27. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/ui/flows.py +2 -2
  28. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/ui/task_runs.py +4 -2
  29. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/_types.py +1 -0
  30. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/deployments.py +11 -0
  31. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/task_engine.py +11 -8
  32. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/tasks.py +19 -8
  33. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/types/__init__.py +22 -1
  34. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/types/_datetime.py +80 -28
  35. prefect_client-3.9.0/src/prefect/types/_datetime_deprecations.py +332 -0
  36. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/callables/__init__.py +12 -3
  37. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/collections.py +1 -1
  38. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/pydantic.py +2 -1
  39. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/AGENTS.md +2 -2
  40. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/process.py +16 -25
  41. prefect_client-3.8.9.dev6/src/prefect/_build_info.py +0 -5
  42. prefect_client-3.8.9.dev6/src/prefect/runner/runner.py +0 -1891
  43. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/.gitignore +0 -0
  44. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/LICENSE +0 -0
  45. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/README.md +0 -0
  46. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/hatch_build.py +0 -0
  47. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/.prefectignore +0 -0
  48. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/AGENTS.md +0 -0
  49. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/__init__.py +0 -0
  50. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/__main__.py +0 -0
  51. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/__init__.py +0 -0
  52. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/_launchers.py +0 -0
  53. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/bundles/__init__.py +0 -0
  54. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/bundles/execute.py +0 -0
  55. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/plugins/__init__.py +0 -0
  56. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/plugins/apply.py +0 -0
  57. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  58. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/plugins/manager.py +0 -0
  59. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/plugins/spec.py +0 -0
  60. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/sla/__init__.py +0 -0
  61. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/sla/client.py +0 -0
  62. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_experimental/sla/objects.py +0 -0
  63. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_flow_run_suspension.py +0 -0
  64. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/__init__.py +0 -0
  65. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/_logging.py +0 -0
  66. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/_observation_delivery.py +0 -0
  67. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/analytics/__init__.py +0 -0
  68. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  69. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/analytics/client.py +0 -0
  70. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/analytics/device_id.py +0 -0
  71. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/analytics/emit.py +0 -0
  72. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/analytics/enabled.py +0 -0
  73. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/analytics/events.py +0 -0
  74. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/analytics/milestones.py +0 -0
  75. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/analytics/notice.py +0 -0
  76. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/analytics/service.py +0 -0
  77. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/ast_utils.py +0 -0
  78. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/attempt_control.py +0 -0
  79. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/buildx.py +0 -0
  80. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/compatibility/__init__.py +0 -0
  81. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  82. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/compatibility/backports.py +0 -0
  83. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/compatibility/blocks.py +0 -0
  84. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  85. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/compatibility/migration.py +0 -0
  86. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/compatibility/starlette.py +0 -0
  87. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/concurrency/__init__.py +0 -0
  88. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/concurrency/api.py +0 -0
  89. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/concurrency/calls.py +0 -0
  90. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  91. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  92. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/concurrency/inspection.py +0 -0
  93. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/concurrency/primitives.py +0 -0
  94. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/concurrency/threads.py +0 -0
  95. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/concurrency/waiters.py +0 -0
  96. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/control_listener.py +0 -0
  97. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/deprecated.py +0 -0
  98. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/engine.py +0 -0
  99. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/git.py +0 -0
  100. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  101. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/installation.py +0 -0
  102. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/integrations.py +0 -0
  103. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/launchers.py +0 -0
  104. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/lazy.py +0 -0
  105. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/metrics.py +0 -0
  106. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/observability.py +0 -0
  107. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/observers.py +0 -0
  108. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/plugins/__init__.py +0 -0
  109. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/plugins/apply.py +0 -0
  110. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/plugins/collections.py +0 -0
  111. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  112. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/plugins/manager.py +0 -0
  113. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/plugins/spec.py +0 -0
  114. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/plugins/startup.py +0 -0
  115. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/pydantic/__init__.py +0 -0
  116. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/pydantic/schemas.py +0 -0
  117. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  118. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  119. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  120. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/pytz.py +0 -0
  121. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/result_records.py +0 -0
  122. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/retries.py +0 -0
  123. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/schema.py +0 -0
  124. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/schemas/__init__.py +0 -0
  125. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/schemas/_registry.py +0 -0
  126. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/schemas/bases.py +0 -0
  127. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/schemas/fields.py +0 -0
  128. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/schemas/serializers.py +0 -0
  129. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/schemas/validators.py +0 -0
  130. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  131. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/server_maintenance.py +0 -0
  132. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/states.py +0 -0
  133. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/testing.py +0 -0
  134. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/urls.py +0 -0
  135. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/uuid7.py +0 -0
  136. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/version_checking.py +0 -0
  137. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/versioning.py +0 -0
  138. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/waiters.py +0 -0
  139. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_internal/websockets.py +0 -0
  140. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/__init__.py +0 -0
  141. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/fetcher.py +0 -0
  142. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/generator.py +0 -0
  143. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/models.py +0 -0
  144. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/naming.py +0 -0
  145. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/renderer.py +0 -0
  146. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/schema_converter.py +0 -0
  147. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/templates/__init__.py +0 -0
  148. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  149. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/types.py +0 -0
  150. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_sdk/unions.py +0 -0
  151. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_vendor/croniter/__init__.py +0 -0
  152. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/_vendor/croniter/croniter.py +0 -0
  153. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/agent.py +0 -0
  154. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/analytics/__init__.py +0 -0
  155. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/artifacts.py +0 -0
  156. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/assets/__init__.py +0 -0
  157. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/assets/core.py +0 -0
  158. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/assets/materialize.py +0 -0
  159. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/automations.py +0 -0
  160. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/blocks/AGENTS.md +0 -0
  161. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/blocks/__init__.py +0 -0
  162. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/blocks/abstract.py +0 -0
  163. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/blocks/core.py +0 -0
  164. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/blocks/fields.py +0 -0
  165. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/blocks/notifications.py +0 -0
  166. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/blocks/redis.py +0 -0
  167. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/blocks/system.py +0 -0
  168. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/blocks/webhook.py +0 -0
  169. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/bundles/__init__.py +0 -0
  170. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/bundles/_file_collector.py +0 -0
  171. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/bundles/_ignore_filter.py +0 -0
  172. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/bundles/_path_resolver.py +0 -0
  173. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/bundles/_zip_builder.py +0 -0
  174. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/bundles/_zip_extractor.py +0 -0
  175. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/bundles/execute.py +0 -0
  176. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/cache_policies.py +0 -0
  177. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/AGENTS.md +0 -0
  178. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/__init__.py +0 -0
  179. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/attribution.py +0 -0
  180. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/base.py +0 -0
  181. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/cloud.py +0 -0
  182. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/collections.py +0 -0
  183. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/constants.py +0 -0
  184. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/__init__.py +0 -0
  185. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  186. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  187. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  188. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_automations/client.py +0 -0
  189. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  190. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  191. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  192. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  193. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  194. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  195. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  196. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  197. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  198. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  199. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  200. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_events/client.py +0 -0
  201. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  202. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  203. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  204. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_flows/client.py +0 -0
  205. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  206. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_logs/client.py +0 -0
  207. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  208. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_variables/client.py +0 -0
  209. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  210. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  211. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/base.py +0 -0
  212. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/orchestration/routes.py +0 -0
  213. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/schemas/__init__.py +0 -0
  214. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/schemas/actions.py +0 -0
  215. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/schemas/events.py +0 -0
  216. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/schemas/filters.py +0 -0
  217. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/schemas/objects.py +0 -0
  218. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/schemas/responses.py +0 -0
  219. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/schemas/schedules.py +0 -0
  220. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/schemas/sorting.py +0 -0
  221. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/schemas/worker_channel.py +0 -0
  222. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/subscriptions.py +0 -0
  223. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/types/__init__.py +0 -0
  224. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  225. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/client/utilities.py +0 -0
  226. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/AGENTS.md +0 -0
  227. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/__init__.py +0 -0
  228. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/_asyncio.py +0 -0
  229. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/_events.py +0 -0
  230. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/_leases.py +0 -0
  231. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/_sync.py +0 -0
  232. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/asyncio.py +0 -0
  233. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/context.py +0 -0
  234. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/services.py +0 -0
  235. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/sync.py +0 -0
  236. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/v1/__init__.py +0 -0
  237. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  238. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/v1/_events.py +0 -0
  239. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/v1/asyncio.py +0 -0
  240. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/v1/context.py +0 -0
  241. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/v1/services.py +0 -0
  242. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/concurrency/v1/sync.py +0 -0
  243. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/context.py +0 -0
  244. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/AGENTS.md +0 -0
  245. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/__init__.py +0 -0
  246. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/base.py +0 -0
  247. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/deployments.py +0 -0
  248. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/flow_runs.py +0 -0
  249. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/schedules.py +0 -0
  250. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/steps/__init__.py +0 -0
  251. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/steps/core.py +0 -0
  252. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/steps/pull.py +0 -0
  253. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/deployments/steps/utility.py +0 -0
  254. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/docker/__init__.py +0 -0
  255. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/docker/_buildx.py +0 -0
  256. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/docker/docker_image.py +0 -0
  257. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/engine.py +0 -0
  258. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/AGENTS.md +0 -0
  259. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/clients.py +0 -0
  260. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/filters.py +0 -0
  261. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/related.py +0 -0
  262. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/schemas/__init__.py +0 -0
  263. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  264. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/schemas/events.py +0 -0
  265. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/schemas/labelling.py +0 -0
  266. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/subscribers.py +0 -0
  267. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/utilities.py +0 -0
  268. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/events/worker.py +0 -0
  269. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/exceptions.py +0 -0
  270. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/filesystems.py +0 -0
  271. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/flow_engine.py +0 -0
  272. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/infrastructure/__init__.py +0 -0
  273. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/infrastructure/base.py +0 -0
  274. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  275. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  276. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  277. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  278. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  279. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  280. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/input/__init__.py +0 -0
  281. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/input/actions.py +0 -0
  282. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/input/run_input.py +0 -0
  283. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/locking/__init__.py +0 -0
  284. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/locking/_filelock.py +0 -0
  285. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/locking/filesystem.py +0 -0
  286. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/locking/memory.py +0 -0
  287. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/locking/protocol.py +0 -0
  288. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/logging/__init__.py +0 -0
  289. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/logging/clients.py +0 -0
  290. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/logging/configuration.py +0 -0
  291. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/logging/filters.py +0 -0
  292. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/logging/formatters.py +0 -0
  293. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/logging/highlighters.py +0 -0
  294. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/logging/loggers.py +0 -0
  295. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/logging/logging.yml +0 -0
  296. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/main.py +0 -0
  297. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/plugins.py +0 -0
  298. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/py.typed +0 -0
  299. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/results.py +0 -0
  300. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/__init__.py +0 -0
  301. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_cancel_finalizer.py +0 -0
  302. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_cancellation_manager.py +0 -0
  303. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_control_channel.py +0 -0
  304. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_deployment_registry.py +0 -0
  305. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_event_emitter.py +0 -0
  306. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_flow_resolver.py +0 -0
  307. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_flow_run_executor.py +0 -0
  308. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_hook_runner.py +0 -0
  309. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_limit_manager.py +0 -0
  310. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_state_proposer.py +0 -0
  311. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_uv_command.py +0 -0
  312. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_workspace_hook_runner.py +0 -0
  313. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_workspace_resolver.py +0 -0
  314. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_workspace_runtime.py +0 -0
  315. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
  316. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_workspace_starter.py +0 -0
  317. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/_workspace_supervisor.py +0 -0
  318. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runner/storage.py +0 -0
  319. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runtime/__init__.py +0 -0
  320. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runtime/deployment.py +0 -0
  321. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/runtime/task_run.py +0 -0
  322. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/schedules.py +0 -0
  323. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/serializers.py +0 -0
  324. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/__init__.py +0 -0
  325. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/_ui_static.py +0 -0
  326. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/admin.py +0 -0
  327. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/artifacts.py +0 -0
  328. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/automations.py +0 -0
  329. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/background_workers.py +0 -0
  330. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/block_capabilities.py +0 -0
  331. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/block_documents.py +0 -0
  332. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/block_schemas.py +0 -0
  333. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/block_types.py +0 -0
  334. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/clients.py +0 -0
  335. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/collections.py +0 -0
  336. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  337. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/concurrency_limits.py +0 -0
  338. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/csrf_token.py +0 -0
  339. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/dependencies.py +0 -0
  340. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/deployments.py +0 -0
  341. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/events.py +0 -0
  342. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/flow_run_states.py +0 -0
  343. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/flows.py +0 -0
  344. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/logs.py +0 -0
  345. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/middleware.py +0 -0
  346. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/root.py +0 -0
  347. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/run_history.py +0 -0
  348. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/saved_searches.py +0 -0
  349. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/server.py +0 -0
  350. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  351. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/task_run_states.py +0 -0
  352. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/task_runs.py +0 -0
  353. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/task_workers.py +0 -0
  354. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/templates.py +0 -0
  355. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/ui/__init__.py +0 -0
  356. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/ui/schemas.py +0 -0
  357. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/validation.py +0 -0
  358. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/variables.py +0 -0
  359. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/work_queues.py +0 -0
  360. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/server/api/workers.py +0 -0
  361. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/AGENTS.md +0 -0
  362. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/__init__.py +0 -0
  363. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/base.py +0 -0
  364. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/constants.py +0 -0
  365. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/context.py +0 -0
  366. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/legacy.py +0 -0
  367. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/__init__.py +0 -0
  368. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/_defaults.py +0 -0
  369. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/api.py +0 -0
  370. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/cli.py +0 -0
  371. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/client.py +0 -0
  372. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/cloud.py +0 -0
  373. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/events.py +0 -0
  374. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/experiments.py +0 -0
  375. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/flows.py +0 -0
  376. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/internal.py +0 -0
  377. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/logging.py +0 -0
  378. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/plugins.py +0 -0
  379. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/results.py +0 -0
  380. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/root.py +0 -0
  381. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/runner.py +0 -0
  382. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/__init__.py +0 -0
  383. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/api.py +0 -0
  384. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/concurrency.py +0 -0
  385. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/database.py +0 -0
  386. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/deployments.py +0 -0
  387. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/docket.py +0 -0
  388. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/ephemeral.py +0 -0
  389. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/events.py +0 -0
  390. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  391. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/logs.py +0 -0
  392. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/root.py +0 -0
  393. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/services.py +0 -0
  394. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/tasks.py +0 -0
  395. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/ui.py +0 -0
  396. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/server/worker_channel.py +0 -0
  397. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/tasks.py +0 -0
  398. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/telemetry.py +0 -0
  399. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/testing.py +0 -0
  400. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/models/worker.py +0 -0
  401. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/profiles.py +0 -0
  402. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/profiles.toml +0 -0
  403. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/settings/sources.py +0 -0
  404. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/states.py +0 -0
  405. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/task_runners.py +0 -0
  406. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/task_runs.py +0 -0
  407. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/task_worker.py +0 -0
  408. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/telemetry/__init__.py +0 -0
  409. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/telemetry/run_telemetry.py +0 -0
  410. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/transactions.py +0 -0
  411. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/types/_concurrency.py +0 -0
  412. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/types/entrypoint.py +0 -0
  413. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/types/names.py +0 -0
  414. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/AGENTS.md +0 -0
  415. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/__init__.py +0 -0
  416. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/annotations.py +0 -0
  417. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  418. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  419. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/callables/AGENTS.md +0 -0
  420. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/compat.py +0 -0
  421. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/context.py +0 -0
  422. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/dispatch.py +0 -0
  423. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/dockerutils.py +0 -0
  424. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/engine/AGENTS.md +0 -0
  425. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/engine/__init__.py +0 -0
  426. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  427. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/filesystem/__init__.py +0 -0
  428. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/generics.py +0 -0
  429. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/hashing.py +0 -0
  430. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/importtools.py +0 -0
  431. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/math.py +0 -0
  432. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/names.py +0 -0
  433. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  434. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/processutils/__init__.py +0 -0
  435. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/render_swagger.py +0 -0
  436. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  437. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  438. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  439. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/schema_tools/validation.py +0 -0
  440. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/services.py +0 -0
  441. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/slugify.py +0 -0
  442. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/templating/AGENTS.md +0 -0
  443. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/templating/__init__.py +0 -0
  444. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/text.py +0 -0
  445. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/timeout.py +0 -0
  446. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/urls.py +0 -0
  447. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/utilities/visualization.py +0 -0
  448. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/variables.py +0 -0
  449. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/__init__.py +0 -0
  450. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/_cleanup.py +0 -0
  451. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/_cleanup_handlers.py +0 -0
  452. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  453. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  454. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/_worker_channel/_state.py +0 -0
  455. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  456. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  457. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/base.py +0 -0
  458. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/block.py +0 -0
  459. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/cloud.py +0 -0
  460. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/src/prefect/workers/server.py +0 -0
  461. {prefect_client-3.8.9.dev6 → prefect_client-3.9.0}/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.9.dev6
3
+ Version: 3.9.0
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
@@ -18,17 +18,19 @@ Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
20
  Classifier: Programming Language :: Python :: 3.14
21
+ Classifier: Programming Language :: Python :: 3.15
21
22
  Classifier: Topic :: Software Development :: Libraries
22
- Requires-Python: <3.15,>=3.11
23
+ Requires-Python: <3.16,>=3.11
23
24
  Requires-Dist: amplitude-analytics<2.0.0,>=1.2.1
24
25
  Requires-Dist: anyio<5.0.0,>=4.4.0
25
26
  Requires-Dist: asgi-lifespan<3.0,>=1.0
26
27
  Requires-Dist: cachetools<8.0,>=5.3
28
+ Requires-Dist: certifi>=2026.10.19
27
29
  Requires-Dist: cloudpickle<4.0,>=2.0
28
30
  Requires-Dist: coolname<6.0.0,>=1.0.4
29
31
  Requires-Dist: dateparser<2.0.0,>=1.1.1
30
32
  Requires-Dist: exceptiongroup>=1.0.0
31
- Requires-Dist: fastapi<1.0.0,>=0.139.0
33
+ Requires-Dist: fastapi<0.151,>=0.139.0
32
34
  Requires-Dist: fsspec>=2022.5.0
33
35
  Requires-Dist: graphviz>=0.20.1
34
36
  Requires-Dist: griffe<3.0.0,>=0.49.0
@@ -53,15 +55,14 @@ Requires-Dist: pytz<2027,>=2021.1
53
55
  Requires-Dist: pyyaml<7.0.0,>=5.4.1
54
56
  Requires-Dist: rfc3339-validator<0.2.0,>=0.1.4
55
57
  Requires-Dist: rich<16.0,>=11.0
56
- Requires-Dist: ruamel-yaml-clib>=0.2.8; platform_python_implementation == 'CPython'
57
- Requires-Dist: ruamel-yaml>=0.17.0
58
+ Requires-Dist: ruamel-yaml!=0.19.0,>=0.17.0
58
59
  Requires-Dist: sniffio<2.0.0,>=1.3.0
59
60
  Requires-Dist: starlette>=1.0.1
60
61
  Requires-Dist: toml>=0.10.0
61
62
  Requires-Dist: typing-extensions<5.0.0,>=4.10.0
62
63
  Requires-Dist: uvicorn!=0.29.0,>=0.14.0
63
64
  Requires-Dist: websockets<17.0,>=15.0.1
64
- Requires-Dist: whenever<0.11.0,>=0.7.3; python_version >= '3.13'
65
+ Requires-Dist: whenever<0.11.0,>=0.10.5; python_version >= '3.13'
65
66
  Provides-Extra: notifications
66
67
  Requires-Dist: apprise<2.0.0,>=1.13.0; extra == 'notifications'
67
68
  Description-Content-Type: text/markdown
@@ -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.11,<3.15"
10
+ requires-python = ">=3.11,<3.16"
11
11
  license = { text = "Apache-2.0" }
12
12
  authors = [{ name = "Prefect Technologies, Inc.", email = "help@prefect.io" }]
13
13
  classifiers = [
@@ -20,6 +20,7 @@ classifiers = [
20
20
  "Programming Language :: Python :: 3.12",
21
21
  "Programming Language :: Python :: 3.13",
22
22
  "Programming Language :: Python :: 3.14",
23
+ "Programming Language :: Python :: 3.15",
23
24
  "Topic :: Software Development :: Libraries",
24
25
  ]
25
26
  dependencies = [
@@ -28,11 +29,13 @@ dependencies = [
28
29
  "anyio>=4.4.0,<5.0.0",
29
30
  "asgi-lifespan>=1.0,<3.0",
30
31
  "cachetools>=5.3,<8.0",
32
+ "certifi>=2026.10.19",
31
33
  "cloudpickle>=2.0,<4.0",
32
34
  "coolname>=1.0.4,<6.0.0",
33
35
  "dateparser>=1.1.1,<2.0.0",
34
36
  "exceptiongroup>=1.0.0",
35
- "fastapi>=0.139.0,<1.0.0",
37
+ # 0.151 rejects an explicit null for a body param with a default, and released clients send null
38
+ "fastapi>=0.139.0,<0.151",
36
39
  "fsspec>=2022.5.0",
37
40
  "graphviz>=0.20.1",
38
41
  "griffe>=0.49.0,<3.0.0",
@@ -57,15 +60,14 @@ dependencies = [
57
60
  "pyyaml>=5.4.1,<7.0.0",
58
61
  "rfc3339-validator>=0.1.4,<0.2.0",
59
62
  "rich>=11.0,<16.0",
60
- "ruamel.yaml>=0.17.0",
61
- "ruamel.yaml.clib>=0.2.8; platform_python_implementation == 'CPython'",
63
+ "ruamel.yaml>=0.17.0,!=0.19.0",
62
64
  "sniffio>=1.3.0,<2.0.0",
63
65
  "starlette>=1.0.1",
64
66
  "toml>=0.10.0",
65
67
  "typing_extensions>=4.10.0,<5.0.0",
66
68
  "uvicorn>=0.14.0,!=0.29.0",
67
69
  "websockets>=15.0.1,<17.0",
68
- "whenever>=0.7.3,<0.11.0; python_version>='3.13'",
70
+ "whenever>=0.10.5,<0.11.0; python_version>='3.13'",
69
71
  ]
70
72
  [project.urls]
71
73
  Changelog = "https://github.com/PrefectHQ/prefect/releases"
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.9.0"
3
+ __build_date__ = "2026-10-21 03:27:58.819332+00:00"
4
+ __git_commit__ = "1ef3e516d3b3449d19f65b30c45d1e0bff656396"
5
+ __dirty__ = False
@@ -21,7 +21,7 @@ from typing import TYPE_CHECKING, Any, Callable, Optional, Union
21
21
  from pydantic import BaseModel
22
22
  from typing_extensions import ParamSpec, TypeAlias, TypeVar
23
23
 
24
- from prefect.types._datetime import now
24
+ from prefect.types._datetime import _pendulum_call, now
25
25
  from prefect.utilities.callables import get_call_parameters
26
26
  from prefect.utilities.importtools import (
27
27
  AliasedModuleDefinition,
@@ -96,14 +96,16 @@ def generate_deprecation_message(
96
96
  if hasattr(PlainDateTime, "to_stdlib")
97
97
  else PlainDateTime.from_py_datetime
98
98
  )
99
- _dt = _pdt_from_dt(start_date).add(months=6)
99
+ # PlainDateTime requires a naive datetime; the warning only renders
100
+ # month and year, so any tzinfo on start_date is dropped.
101
+ _dt = _pdt_from_dt(start_date.replace(tzinfo=None)).add(months=6)
100
102
  end_date = (
101
103
  _dt.to_stdlib() if hasattr(_dt, "to_stdlib") else _dt.py_datetime()
102
104
  )
103
105
  else:
104
106
  import pendulum
105
107
 
106
- end_date = pendulum.instance(start_date).add(months=6)
108
+ end_date = _pendulum_call(pendulum.instance(start_date), "add", months=6)
107
109
 
108
110
  if when:
109
111
  when = " when " + when
@@ -27,6 +27,11 @@ R = TypeVar("R", infer_variance=True)
27
27
  # Track all active services for fork handling
28
28
  _active_services: weakref.WeakSet[_QueueServiceBase[Any]] = weakref.WeakSet()
29
29
 
30
+ # Services take items that are already queued without leaving the event loop.
31
+ # Other services share the global loop, so a service working through a backlog
32
+ # yields to them after this many items in a row.
33
+ _READY_ITEMS_PER_YIELD = 256
34
+
30
35
 
31
36
  def _reset_services_after_fork():
32
37
  """
@@ -73,6 +78,7 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
73
78
  self._started: bool = False
74
79
  self._key = hash((self.__class__, *args))
75
80
  self._lock = threading.Lock()
81
+ self._ready_items_since_yield = 0
76
82
  self._queue_get_thread = WorkerThread(
77
83
  # TODO: This thread should not need to be a daemon but when it is not, it
78
84
  # can prevent the interpreter from exiting.
@@ -184,14 +190,37 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
184
190
  assert self._done_event is not None
185
191
  self._done_event.set()
186
192
 
193
+ async def _get_item(self, timeout: Optional[float] = None) -> Optional[T]:
194
+ """
195
+ Take the next item from the queue.
196
+
197
+ An item that is already queued is taken on the event loop. Only an empty
198
+ queue waits on the queue thread, which raises `queue.Empty` if `timeout`
199
+ passes first.
200
+ """
201
+ if self._ready_items_since_yield >= _READY_ITEMS_PER_YIELD:
202
+ self._ready_items_since_yield = 0
203
+ await asyncio.sleep(0)
204
+
205
+ try:
206
+ item = self._queue.get_nowait()
207
+ except queue.Empty:
208
+ pass
209
+ else:
210
+ self._ready_items_since_yield += 1
211
+ return item
212
+
213
+ self._ready_items_since_yield = 0
214
+ return await self._queue_get_thread.submit(
215
+ create_call(self._queue.get, timeout=timeout)
216
+ ).aresult()
217
+
187
218
  async def _main_loop(self) -> None:
188
219
  last_log_time = 0
189
220
  log_interval = 4 # log every 4 seconds
190
221
 
191
222
  while True:
192
- item: Optional[T] = await self._queue_get_thread.submit(
193
- create_call(self._queue.get)
194
- ).aresult()
223
+ item: Optional[T] = await self._get_item()
195
224
 
196
225
  if self._stopped:
197
226
  current_time = asyncio.get_event_loop().time()
@@ -500,9 +529,7 @@ class BatchedQueueService(QueueService[T]):
500
529
  deadline = get_deadline(self.min_interval)
501
530
  while batch_size < self.max_batch_size:
502
531
  try:
503
- item = await self._queue_get_thread.submit(
504
- create_call(self._queue.get, timeout=get_timeout(deadline))
505
- ).aresult()
532
+ item = await self._get_item(timeout=get_timeout(deadline))
506
533
 
507
534
  if item is None:
508
535
  done = True
@@ -35,6 +35,8 @@ import importlib
35
35
  import os
36
36
  import sys
37
37
  import tempfile
38
+ import warnings
39
+ from contextlib import suppress
38
40
  from datetime import datetime, timedelta
39
41
  from pathlib import Path
40
42
  from typing import (
@@ -103,6 +105,7 @@ from prefect.schedules import Schedule
103
105
  from prefect.settings import (
104
106
  PREFECT_DEPLOYMENTS_DEFAULT_WORK_POOL_NAME,
105
107
  PREFECT_UI_URL,
108
+ get_current_settings,
106
109
  )
107
110
  from prefect.types import ListOfNonEmptyStrings
108
111
  from prefect.types.entrypoint import EntrypointType
@@ -125,6 +128,25 @@ if TYPE_CHECKING:
125
128
 
126
129
  __all__ = ["RunnerDeployment"]
127
130
 
131
+
132
+ def _should_clear_empty_schedules() -> bool:
133
+ if get_current_settings().deployments.clear_schedules_on_empty:
134
+ return True
135
+
136
+ warnings.warn(
137
+ "Preserving existing schedules when an empty schedules list is provided "
138
+ "on redeployment is deprecated. A future release will clear schedules "
139
+ "by default after at least six months or three minor releases, whichever "
140
+ "is longer. The opt-in setting and this warning will then be removed. "
141
+ "Set PREFECT_DEPLOYMENTS_CLEAR_SCHEDULES_ON_EMPTY=true to opt in now. "
142
+ "To preserve existing schedules, omit schedules or use schedules=None "
143
+ "(schedules: null in prefect.yaml).",
144
+ FutureWarning,
145
+ stacklevel=3,
146
+ )
147
+ return False
148
+
149
+
128
150
  _DEPLOYMENT_PARAMETER_SERIALIZER = TypeAdapter(
129
151
  dict[str, Any],
130
152
  config=ConfigDict(ser_json_timedelta="float"),
@@ -617,15 +639,21 @@ class RunnerDeployment(BaseModel):
617
639
  deployment_id: UUID,
618
640
  client: PrefectClient,
619
641
  version_info: VersionInfo | None,
642
+ *,
643
+ preserve_schedules: bool = False,
620
644
  ):
621
645
  parameter_openapi_schema = self._parameter_openapi_schema.model_dump(
622
646
  exclude_unset=True
623
647
  )
624
648
 
649
+ exclude = {"storage", "name", "flow_name", "triggers", "version_type"}
650
+ if preserve_schedules:
651
+ # Explicitly set schedules survive exclude_unset, even when empty.
652
+ exclude.add("schedules")
625
653
  update_payload = self.model_dump(
626
654
  mode="json",
627
655
  exclude_unset=True,
628
- exclude={"storage", "name", "flow_name", "triggers", "version_type"},
656
+ exclude=exclude,
629
657
  )
630
658
 
631
659
  if self.storage:
@@ -636,7 +664,7 @@ class RunnerDeployment(BaseModel):
636
664
  else:
637
665
  update_payload["pull_steps"] = None
638
666
 
639
- if self.schedules:
667
+ if self.schedules and not preserve_schedules:
640
668
  update_payload["schedules"] = [
641
669
  schedule.model_dump(mode="json", exclude_unset=True)
642
670
  for schedule in self._schedules_with_serialized_block_parameters() or []
@@ -669,15 +697,21 @@ class RunnerDeployment(BaseModel):
669
697
  deployment_id: UUID,
670
698
  client: SyncPrefectClient,
671
699
  version_info: VersionInfo | None,
700
+ *,
701
+ preserve_schedules: bool = False,
672
702
  ):
673
703
  parameter_openapi_schema = self._parameter_openapi_schema.model_dump(
674
704
  exclude_unset=True
675
705
  )
676
706
 
707
+ exclude = {"storage", "name", "flow_name", "triggers", "version_type"}
708
+ if preserve_schedules:
709
+ # Keep schedule exclusion in sync with _update above.
710
+ exclude.add("schedules")
677
711
  update_payload = self.model_dump(
678
712
  mode="json",
679
713
  exclude_unset=True,
680
- exclude={"storage", "name", "flow_name", "triggers", "version_type"},
714
+ exclude=exclude,
681
715
  )
682
716
 
683
717
  if self.storage:
@@ -688,7 +722,7 @@ class RunnerDeployment(BaseModel):
688
722
  else:
689
723
  update_payload["pull_steps"] = None
690
724
 
691
- if self.schedules:
725
+ if self.schedules and not preserve_schedules:
692
726
  update_payload["schedules"] = [
693
727
  schedule.model_dump(mode="json", exclude_unset=True)
694
728
  for schedule in self._schedules_with_serialized_block_parameters() or []
@@ -756,6 +790,9 @@ class RunnerDeployment(BaseModel):
756
790
  Registers this deployment with the API and returns the deployment's ID.
757
791
 
758
792
  Args:
793
+ schedules: Override the schedules for this deployment. On redeployment,
794
+ an empty list preserves schedules by default and emits a warning.
795
+ Set `PREFECT_DEPLOYMENTS_CLEAR_SCHEDULES_ON_EMPTY=true` to clear them.
759
796
  work_pool_name: The name of the work pool to use for this
760
797
  deployment.
761
798
  image: The registry, name, and tag of the Docker image to
@@ -784,11 +821,29 @@ class RunnerDeployment(BaseModel):
784
821
  self.job_variables["image"] = image
785
822
  if work_pool_name:
786
823
  self.work_pool_name = work_pool_name
787
- if schedules:
824
+ clear_schedules = schedules == [] and _should_clear_empty_schedules()
825
+ if schedules or clear_schedules:
788
826
  self.schedules = [
789
- DeploymentScheduleUpdate(**schedule) for schedule in schedules
827
+ DeploymentScheduleUpdate(**schedule)
828
+ for schedule in schedules or []
790
829
  ]
791
- return await self._update(deployment.id, client, version_info)
830
+ await self._update(
831
+ deployment.id,
832
+ client,
833
+ version_info,
834
+ preserve_schedules=schedules == [] and not clear_schedules,
835
+ )
836
+ # The update API preserves empty-list updates when all existing
837
+ # schedules have slugs. Clear those explicitly after a successful update.
838
+ if clear_schedules and all(
839
+ schedule.slug is not None for schedule in deployment.schedules
840
+ ):
841
+ for schedule in deployment.schedules:
842
+ with suppress(ObjectNotFound):
843
+ await client.delete_deployment_schedule(
844
+ deployment.id, schedule.id
845
+ )
846
+ return deployment.id
792
847
 
793
848
  @async_dispatch(aapply)
794
849
  def apply(
@@ -802,6 +857,9 @@ class RunnerDeployment(BaseModel):
802
857
  Registers this deployment with the API and returns the deployment's ID.
803
858
 
804
859
  Args:
860
+ schedules: Override the schedules for this deployment. On redeployment,
861
+ an empty list preserves schedules by default and emits a warning.
862
+ Set `PREFECT_DEPLOYMENTS_CLEAR_SCHEDULES_ON_EMPTY=true` to clear them.
805
863
  work_pool_name: The name of the work pool to use for this
806
864
  deployment.
807
865
  image: The registry, name, and tag of the Docker image to
@@ -829,11 +887,28 @@ class RunnerDeployment(BaseModel):
829
887
  self.job_variables["image"] = image
830
888
  if work_pool_name:
831
889
  self.work_pool_name = work_pool_name
832
- if schedules:
890
+ clear_schedules = schedules == [] and _should_clear_empty_schedules()
891
+ if schedules or clear_schedules:
833
892
  self.schedules = [
834
- DeploymentScheduleUpdate(**schedule) for schedule in schedules
893
+ DeploymentScheduleUpdate(**schedule)
894
+ for schedule in schedules or []
835
895
  ]
836
- return self._update_sync(deployment.id, client, version_info)
896
+ self._update_sync(
897
+ deployment.id,
898
+ client,
899
+ version_info,
900
+ preserve_schedules=schedules == [] and not clear_schedules,
901
+ )
902
+ # Keep explicit clearing in sync with aapply above.
903
+ if clear_schedules and all(
904
+ schedule.slug is not None for schedule in deployment.schedules
905
+ ):
906
+ for schedule in deployment.schedules:
907
+ with suppress(ObjectNotFound):
908
+ client.delete_deployment_schedule(
909
+ deployment.id, schedule.id
910
+ )
911
+ return deployment.id
837
912
 
838
913
  async def _create_slas(self, deployment_id: UUID, client: PrefectClient):
839
914
  if not isinstance(self._sla, list):
@@ -42,6 +42,7 @@ from .actions import (
42
42
  PauseAutomation,
43
43
  ResumeAutomation,
44
44
  DeclareIncident,
45
+ UnknownAction,
45
46
  )
46
47
  from .clients import get_events_client, get_events_subscriber
47
48
  from .subscribers import FlowRunSubscriber
@@ -90,6 +91,7 @@ __all__ = [
90
91
  "PauseAutomation",
91
92
  "ResumeAutomation",
92
93
  "DeclareIncident",
94
+ "UnknownAction",
93
95
  "emit_event",
94
96
  "get_events_client",
95
97
  "get_events_subscriber",
@@ -1,9 +1,16 @@
1
1
  import abc
2
2
  from datetime import timedelta
3
- from typing import Any, Dict, Optional, Union
3
+ from typing import Annotated, Any, ClassVar, Dict, Optional, Union, get_args
4
4
  from uuid import UUID
5
5
 
6
- from pydantic import Field, model_validator
6
+ from pydantic import (
7
+ ConfigDict,
8
+ Discriminator,
9
+ Field,
10
+ Tag,
11
+ field_validator,
12
+ model_validator,
13
+ )
7
14
  from typing_extensions import Literal, Self, TypeAlias
8
15
 
9
16
  from prefect._internal.schemas.bases import PrefectBaseModel
@@ -314,3 +321,56 @@ ActionTypes: TypeAlias = Union[
314
321
  # Prefect Cloud only
315
322
  DeclareIncident,
316
323
  ]
324
+
325
+ _KNOWN_ACTION_TYPES: frozenset[str] = frozenset(
326
+ action.model_fields["type"].default for action in get_args(ActionTypes)
327
+ )
328
+
329
+
330
+ class UnknownAction(Action):
331
+ """An action whose type this version of Prefect does not recognize.
332
+
333
+ Prefect Cloud can add action types before a client release knows about
334
+ them. Reading an automation that uses one of these types returns this
335
+ model instead of failing. The model keeps every field of the action, so
336
+ updating the automation sends the action back unchanged.
337
+ """
338
+
339
+ model_config: ClassVar[ConfigDict] = ConfigDict(extra="allow")
340
+
341
+ type: str = Field(
342
+ json_schema_extra={"not": {"enum": sorted(_KNOWN_ACTION_TYPES)}},
343
+ )
344
+
345
+ @field_validator("type")
346
+ @classmethod
347
+ def _type_is_not_known(cls, value: str) -> str:
348
+ if value in _KNOWN_ACTION_TYPES:
349
+ raise ValueError(
350
+ f"{value!r} is a known action type and cannot be an UnknownAction"
351
+ )
352
+ return value
353
+
354
+
355
+ def _action_discriminator(value: Any) -> str:
356
+ """Sends an action with an unrecognized `type` to `UnknownAction` and every
357
+ other action, including one with no `type`, to `ActionTypes`."""
358
+ if isinstance(value, UnknownAction):
359
+ return "unknown"
360
+ action_type = (
361
+ value.get("type") if isinstance(value, dict) else getattr(value, "type", None)
362
+ )
363
+ if isinstance(action_type, str) and action_type not in _KNOWN_ACTION_TYPES:
364
+ return "unknown"
365
+ return "known"
366
+
367
+
368
+ ActionTypesOrUnknown: TypeAlias = Annotated[
369
+ Union[
370
+ Annotated[ActionTypes, Tag("known")],
371
+ Annotated[UnknownAction, Tag("unknown")],
372
+ ],
373
+ Discriminator(_action_discriminator),
374
+ ]
375
+ """The action types an automation read from the API may contain: any of
376
+ `ActionTypes`, or an `UnknownAction` for a type this version does not know"""
@@ -22,17 +22,22 @@ from pydantic import (
22
22
  Field,
23
23
  PrivateAttr,
24
24
  Tag,
25
+ TypeAdapter,
26
+ ValidationError,
25
27
  field_validator,
26
28
  model_validator,
27
29
  )
28
30
  from typing_extensions import Self, TypeAlias
29
31
 
30
32
  from prefect._internal.schemas.bases import PrefectBaseModel
31
- from prefect.events.actions import ActionTypes, RunDeployment
33
+ from prefect.events.actions import ActionTypes, ActionTypesOrUnknown, RunDeployment
34
+ from prefect.types import DurationOrSecondsTimeDelta
32
35
  from prefect.utilities.collections import AutoEnum
33
36
 
34
37
  from .events import ResourceSpecification
35
38
 
39
+ _timedelta_adapter: TypeAdapter[timedelta] = TypeAdapter(timedelta)
40
+
36
41
  # Dict form accepted by ResourceSpecification via Pydantic coercion
37
42
  ResourceSpecificationDict: TypeAlias = Dict[str, Union[str, List[str]]]
38
43
 
@@ -96,7 +101,7 @@ class Trigger(PrefectBaseModel, abc.ABC, extra="ignore"): # type: ignore[call-a
96
101
  description=getattr(self, "description", ""),
97
102
  enabled=getattr(self, "enabled", True),
98
103
  trigger=trigger,
99
- actions=self.actions(),
104
+ actions=list(self.actions()),
100
105
  owner_resource=self.owner_resource(),
101
106
  )
102
107
 
@@ -196,7 +201,7 @@ class EventTrigger(ResourceTrigger):
196
201
  "triggers)"
197
202
  ),
198
203
  )
199
- within: timedelta = Field(
204
+ within: DurationOrSecondsTimeDelta = Field(
200
205
  default=timedelta(seconds=0),
201
206
  ge=timedelta(seconds=0),
202
207
  description=(
@@ -220,8 +225,15 @@ class EventTrigger(ResourceTrigger):
220
225
  posture: Optional[Posture] = data.get("posture")
221
226
  within: Optional[timedelta] = data.get("within")
222
227
 
223
- if isinstance(within, (int, float)):
224
- within = timedelta(seconds=within)
228
+ if within is not None and not isinstance(within, timedelta):
229
+ # Parse the raw value the same way the field would, so that every
230
+ # form pydantic accepts for a timedelta reaches the comparisons
231
+ # below as a timedelta.
232
+ try:
233
+ within = _timedelta_adapter.validate_python(within)
234
+ except ValidationError:
235
+ # The field validation reports the unparsable value.
236
+ return data
225
237
 
226
238
  if posture == Posture.Proactive:
227
239
  if not within or within == timedelta(0):
@@ -294,7 +306,7 @@ class MetricTriggerQuery(PrefectBaseModel):
294
306
  "the query result against the threshold value."
295
307
  ),
296
308
  )
297
- range: timedelta = Field(
309
+ range: DurationOrSecondsTimeDelta = Field(
298
310
  timedelta(seconds=300), # defaults to 5 minutes
299
311
  description=(
300
312
  "The lookback duration (seconds) for a metric query. This duration is "
@@ -302,7 +314,7 @@ class MetricTriggerQuery(PrefectBaseModel):
302
314
  "The minimum value is 300 seconds (5 minutes)."
303
315
  ),
304
316
  )
305
- firing_for: timedelta = Field(
317
+ firing_for: DurationOrSecondsTimeDelta = Field(
306
318
  timedelta(seconds=300), # defaults to 5 minutes
307
319
  description=(
308
320
  "The duration (seconds) for which the metric query must breach "
@@ -356,7 +368,7 @@ class CompositeTrigger(Trigger, abc.ABC):
356
368
 
357
369
  type: Literal["compound", "sequence"]
358
370
  triggers: List["TriggerTypes"]
359
- within: Optional[timedelta] = Field(
371
+ within: Optional[DurationOrSecondsTimeDelta] = Field(
360
372
  None,
361
373
  description=(
362
374
  "The time period over which the events must occur. For Reactive triggers, "
@@ -486,17 +498,17 @@ class AutomationCore(PrefectBaseModel, extra="ignore"): # type: ignore[call-arg
486
498
  ),
487
499
  )
488
500
 
489
- actions: List[ActionTypes] = Field(
501
+ actions: List[ActionTypesOrUnknown] = Field(
490
502
  default=...,
491
503
  description="The actions to perform when this Automation triggers",
492
504
  )
493
505
 
494
- actions_on_trigger: List[ActionTypes] = Field(
506
+ actions_on_trigger: List[ActionTypesOrUnknown] = Field(
495
507
  default_factory=list,
496
508
  description="The actions to perform when an Automation goes into a triggered state",
497
509
  )
498
510
 
499
- actions_on_resolve: List[ActionTypes] = Field(
511
+ actions_on_resolve: List[ActionTypesOrUnknown] = Field(
500
512
  default_factory=list,
501
513
  description="The actions to perform when an Automation goes into a resolving state",
502
514
  )
@@ -273,7 +273,7 @@ async def apause_flow_run(
273
273
  if wait_for_input:
274
274
  # The flow run wanted input, so we need to load it and return it
275
275
  # to the user.
276
- await wait_for_input.aload(run_input_keyset)
276
+ return await wait_for_input.aload(run_input_keyset)
277
277
 
278
278
  return
279
279
 
@@ -578,11 +578,11 @@ class Flow(Generic[P, R]):
578
578
  else self.cache_result_in_memory
579
579
  ),
580
580
  log_prints=log_prints if log_prints is not NotSet else self.log_prints,
581
- on_completion=on_completion or self.on_completion_hooks,
582
- on_failure=on_failure or self.on_failure_hooks,
583
- on_cancellation=on_cancellation or self.on_cancellation_hooks,
584
- on_crashed=on_crashed or self.on_crashed_hooks,
585
- on_running=on_running or self.on_running_hooks,
581
+ on_completion=on_completion or copy(self.on_completion_hooks),
582
+ on_failure=on_failure or copy(self.on_failure_hooks),
583
+ on_cancellation=on_cancellation or copy(self.on_cancellation_hooks),
584
+ on_crashed=on_crashed or copy(self.on_crashed_hooks),
585
+ on_running=on_running or copy(self.on_running_hooks),
586
586
  )
587
587
  new_flow._storage = self._storage
588
588
  new_flow._entrypoint = self._entrypoint
@@ -584,7 +584,7 @@ class PrefectFutureList(list[PrefectFuture[R]], Iterator[PrefectFuture[R]]):
584
584
  timeout_message = (
585
585
  f"Timed out waiting for all futures to complete within {timeout} seconds"
586
586
  )
587
- deadline = time.monotonic() + timeout if timeout is not None else None
587
+ deadline = time.monotonic() + timeout if timeout else None
588
588
 
589
589
  try:
590
590
  # `as_completed` de-duplicates internally; each unique future is
@@ -638,7 +638,7 @@ def as_completed(
638
638
  pending = unique_futures
639
639
  deadline: float | None = None
640
640
  try:
641
- with timeout_context(timeout, timeout_exc_type=_WaitTimeoutError):
641
+ with timeout_context(timeout or None, timeout_exc_type=_WaitTimeoutError):
642
642
  done = {f for f in unique_futures if f._final_state} # type: ignore[privateUsage]
643
643
  pending = unique_futures - done
644
644
  yield from done
@@ -41,7 +41,8 @@ Key invariants:
41
41
 
42
42
  `APILogWorker` is a **singleton per unique settings tuple** `(BATCH_SIZE, API_URL, MAX_LOG_SIZE)`. A new settings combination creates a new worker instance.
43
43
 
44
- - `max_batch_size = max(BATCH_SIZE - MAX_LOG_SIZE, MAX_LOG_SIZE)` — defensive: ensures a single max-size log can always fit
44
+ - `max_batch_size = max(BATCH_SIZE - MAX_LOG_SIZE - 1, 1)` — a batch stops taking logs at this size, which leaves room for one more max-size log and the request body's opening bracket. Requests stay within `BATCH_SIZE` whenever `BATCH_SIZE >= MAX_LOG_SIZE + 2`; below that, each request holds one log.
45
+ - `APILogWorker.send()` serializes each log dict to compact JSON (orjson) right away, dropping the `__payload_size__` key that `prepare()` adds. The queue holds only those bytes, and `_handle_batch` posts them joined, without serializing again. Changes to a dict after `send()` are not sent. Process-pool workers still forward dicts through `_api_log_sink`; the parent serializes them when it calls `send()`.
45
46
  - `APILogHandler.prepare()` truncates oversized logs with a buffer; `WorkerAPILogHandler.prepare()` raises `ValueError` instead (no truncation)
46
47
 
47
48
  **Flush deadlock guard:** `APILogHandler.flush()` detects if called from within an event loop and avoids blocking via `from_sync.call_soon_in_new_thread()`. Do not call `flush()` synchronously from async code without this guard.