prefect-client 3.8.9.dev7__tar.gz → 3.9.1__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 (462) hide show
  1. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/PKG-INFO +12 -11
  2. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/README.md +2 -2
  3. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/pyproject.toml +10 -8
  4. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/AGENTS.md +10 -1
  5. prefect_client-3.9.1/src/prefect/_build_info.py +5 -0
  6. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/analytics/notice.py +1 -1
  7. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/compatibility/deprecated.py +5 -3
  8. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/compatibility/migration.py +1 -1
  9. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/concurrency/services.py +36 -8
  10. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/result_records.py +13 -9
  11. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/artifacts.py +1 -1
  12. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/blocks/notifications.py +12 -14
  13. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/blocks/system.py +1 -1
  14. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/blocks/webhook.py +1 -1
  15. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/cache_policies.py +22 -4
  16. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/__init__.py +1 -1
  17. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/__init__.py +2 -2
  18. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_work_pools/client.py +2 -0
  19. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/schemas/sorting.py +2 -0
  20. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/context.py +1 -1
  21. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/base.py +1 -1
  22. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/runner.py +90 -15
  23. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/steps/core.py +1 -1
  24. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/steps/pull.py +1 -1
  25. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/AGENTS.md +1 -0
  26. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/schemas/automations.py +19 -7
  27. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/schemas/events.py +7 -0
  28. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/filesystems.py +3 -9
  29. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/flow_engine.py +24 -2
  30. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/flow_runs.py +14 -1
  31. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/flows.py +5 -5
  32. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/infrastructure/provisioners/ecs.py +86 -19
  33. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/logging/AGENTS.md +2 -1
  34. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/logging/handlers.py +40 -9
  35. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/AGENTS.md +4 -13
  36. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_flow_run_executor.py +42 -16
  37. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_process_manager.py +9 -0
  38. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_scheduled_run_poller.py +1 -2
  39. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_starter_bundle.py +0 -1
  40. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_starter_direct.py +0 -1
  41. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_starter_engine.py +2 -3
  42. prefect_client-3.9.1/src/prefect/runner/runner.py +924 -0
  43. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/server.py +1 -1
  44. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/storage.py +18 -7
  45. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runtime/flow_run.py +7 -2
  46. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/__init__.py +2 -0
  47. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/artifacts.py +1 -1
  48. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/automations.py +1 -1
  49. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/background_workers.py +25 -19
  50. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/block_capabilities.py +1 -1
  51. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/block_documents.py +1 -1
  52. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/block_schemas.py +1 -1
  53. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/block_types.py +1 -1
  54. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/clients.py +35 -2
  55. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +1 -1
  56. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/concurrency_limits.py +1 -1
  57. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/concurrency_limits_v2.py +4 -4
  58. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/deployments.py +1 -1
  59. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/events.py +1 -1
  60. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/flow_run_states.py +1 -1
  61. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/flow_runs.py +20 -11
  62. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/flows.py +1 -1
  63. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/logs.py +1 -1
  64. prefect_client-3.9.1/src/prefect/server/api/observed_states.py +32 -0
  65. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/server.py +2 -1
  66. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/task_run_states.py +1 -1
  67. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/task_runs.py +1 -1
  68. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/task_workers.py +1 -1
  69. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/ui/flow_runs.py +2 -2
  70. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/ui/flows.py +2 -2
  71. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/ui/task_runs.py +4 -2
  72. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/variables.py +1 -1
  73. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/work_queues.py +1 -1
  74. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/workers.py +2 -2
  75. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/_types.py +1 -0
  76. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/deployments.py +11 -0
  77. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/task_engine.py +63 -7
  78. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/task_runners.py +28 -12
  79. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/tasks.py +11 -1
  80. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/types/__init__.py +31 -1
  81. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/types/_datetime.py +102 -32
  82. prefect_client-3.9.1/src/prefect/types/_datetime_deprecations.py +332 -0
  83. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/collections.py +34 -10
  84. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/filesystem/__init__.py +50 -5
  85. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/pydantic.py +2 -1
  86. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/templating/AGENTS.md +1 -0
  87. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/templating/__init__.py +9 -3
  88. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/urls.py +14 -1
  89. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/AGENTS.md +2 -2
  90. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/process.py +18 -27
  91. prefect_client-3.8.9.dev7/src/prefect/_build_info.py +0 -5
  92. prefect_client-3.8.9.dev7/src/prefect/runner/runner.py +0 -1891
  93. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/.gitignore +0 -0
  94. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/LICENSE +0 -0
  95. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/hatch_build.py +0 -0
  96. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/.prefectignore +0 -0
  97. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/__init__.py +0 -0
  98. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/__main__.py +0 -0
  99. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/__init__.py +0 -0
  100. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/_launchers.py +0 -0
  101. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/bundles/__init__.py +0 -0
  102. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/bundles/execute.py +0 -0
  103. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/plugins/__init__.py +0 -0
  104. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/plugins/apply.py +0 -0
  105. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  106. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/plugins/manager.py +0 -0
  107. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/plugins/spec.py +0 -0
  108. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/sla/__init__.py +0 -0
  109. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/sla/client.py +0 -0
  110. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_experimental/sla/objects.py +0 -0
  111. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_flow_run_suspension.py +0 -0
  112. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/__init__.py +0 -0
  113. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/_logging.py +0 -0
  114. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/_observation_delivery.py +0 -0
  115. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/analytics/__init__.py +0 -0
  116. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  117. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/analytics/client.py +0 -0
  118. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/analytics/device_id.py +0 -0
  119. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/analytics/emit.py +0 -0
  120. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/analytics/enabled.py +0 -0
  121. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/analytics/events.py +0 -0
  122. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/analytics/milestones.py +0 -0
  123. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/analytics/service.py +0 -0
  124. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/ast_utils.py +0 -0
  125. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/attempt_control.py +0 -0
  126. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/buildx.py +0 -0
  127. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/compatibility/__init__.py +0 -0
  128. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  129. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/compatibility/backports.py +0 -0
  130. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/compatibility/blocks.py +0 -0
  131. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  132. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/compatibility/starlette.py +0 -0
  133. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/concurrency/__init__.py +0 -0
  134. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/concurrency/api.py +0 -0
  135. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/concurrency/calls.py +0 -0
  136. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  137. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  138. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/concurrency/inspection.py +0 -0
  139. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/concurrency/primitives.py +0 -0
  140. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/concurrency/threads.py +0 -0
  141. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/concurrency/waiters.py +0 -0
  142. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/control_listener.py +0 -0
  143. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/deprecated.py +0 -0
  144. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/engine.py +0 -0
  145. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/git.py +0 -0
  146. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  147. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/installation.py +0 -0
  148. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/integrations.py +0 -0
  149. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/launchers.py +0 -0
  150. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/lazy.py +0 -0
  151. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/metrics.py +0 -0
  152. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/observability.py +0 -0
  153. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/observers.py +0 -0
  154. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/plugins/__init__.py +0 -0
  155. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/plugins/apply.py +0 -0
  156. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/plugins/collections.py +0 -0
  157. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  158. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/plugins/manager.py +0 -0
  159. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/plugins/spec.py +0 -0
  160. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/plugins/startup.py +0 -0
  161. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/pydantic/__init__.py +0 -0
  162. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/pydantic/schemas.py +0 -0
  163. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  164. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  165. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  166. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/pytz.py +0 -0
  167. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/retries.py +0 -0
  168. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/schema.py +0 -0
  169. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/schemas/__init__.py +0 -0
  170. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/schemas/_registry.py +0 -0
  171. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/schemas/bases.py +0 -0
  172. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/schemas/fields.py +0 -0
  173. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/schemas/serializers.py +0 -0
  174. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/schemas/validators.py +0 -0
  175. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  176. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/server_maintenance.py +0 -0
  177. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/states.py +0 -0
  178. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/testing.py +0 -0
  179. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/urls.py +0 -0
  180. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/uuid7.py +0 -0
  181. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/version_checking.py +0 -0
  182. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/versioning.py +0 -0
  183. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/waiters.py +0 -0
  184. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_internal/websockets.py +0 -0
  185. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/__init__.py +0 -0
  186. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/fetcher.py +0 -0
  187. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/generator.py +0 -0
  188. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/models.py +0 -0
  189. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/naming.py +0 -0
  190. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/renderer.py +0 -0
  191. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/schema_converter.py +0 -0
  192. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/templates/__init__.py +0 -0
  193. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  194. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/types.py +0 -0
  195. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_sdk/unions.py +0 -0
  196. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_vendor/croniter/__init__.py +0 -0
  197. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/_vendor/croniter/croniter.py +0 -0
  198. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/agent.py +0 -0
  199. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/analytics/__init__.py +0 -0
  200. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/assets/__init__.py +0 -0
  201. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/assets/core.py +0 -0
  202. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/assets/materialize.py +0 -0
  203. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/automations.py +0 -0
  204. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/blocks/AGENTS.md +0 -0
  205. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/blocks/__init__.py +0 -0
  206. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/blocks/abstract.py +0 -0
  207. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/blocks/core.py +0 -0
  208. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/blocks/fields.py +0 -0
  209. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/blocks/redis.py +0 -0
  210. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/bundles/__init__.py +0 -0
  211. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/bundles/_file_collector.py +0 -0
  212. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/bundles/_ignore_filter.py +0 -0
  213. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/bundles/_path_resolver.py +0 -0
  214. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/bundles/_zip_builder.py +0 -0
  215. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/bundles/_zip_extractor.py +0 -0
  216. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/bundles/execute.py +0 -0
  217. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/AGENTS.md +0 -0
  218. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/attribution.py +0 -0
  219. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/base.py +0 -0
  220. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/cloud.py +0 -0
  221. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/collections.py +0 -0
  222. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/constants.py +0 -0
  223. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  224. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  225. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  226. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_automations/client.py +0 -0
  227. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  228. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  229. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  230. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  231. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  232. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  233. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  234. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  235. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  236. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  237. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  238. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_events/client.py +0 -0
  239. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  240. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  241. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  242. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_flows/client.py +0 -0
  243. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  244. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_logs/client.py +0 -0
  245. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  246. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_variables/client.py +0 -0
  247. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  248. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/base.py +0 -0
  249. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/orchestration/routes.py +0 -0
  250. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/schemas/__init__.py +0 -0
  251. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/schemas/actions.py +0 -0
  252. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/schemas/events.py +0 -0
  253. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/schemas/filters.py +0 -0
  254. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/schemas/objects.py +0 -0
  255. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/schemas/responses.py +0 -0
  256. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/schemas/schedules.py +0 -0
  257. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/schemas/worker_channel.py +0 -0
  258. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/subscriptions.py +0 -0
  259. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/types/__init__.py +0 -0
  260. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  261. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/client/utilities.py +0 -0
  262. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/AGENTS.md +0 -0
  263. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/__init__.py +0 -0
  264. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/_asyncio.py +0 -0
  265. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/_events.py +0 -0
  266. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/_leases.py +0 -0
  267. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/_sync.py +0 -0
  268. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/asyncio.py +0 -0
  269. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/context.py +0 -0
  270. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/services.py +0 -0
  271. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/sync.py +0 -0
  272. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/v1/__init__.py +0 -0
  273. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  274. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/v1/_events.py +0 -0
  275. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/v1/asyncio.py +0 -0
  276. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/v1/context.py +0 -0
  277. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/v1/services.py +0 -0
  278. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/concurrency/v1/sync.py +0 -0
  279. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/AGENTS.md +0 -0
  280. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/__init__.py +0 -0
  281. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/deployments.py +0 -0
  282. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/flow_runs.py +0 -0
  283. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/schedules.py +0 -0
  284. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/steps/__init__.py +0 -0
  285. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/deployments/steps/utility.py +0 -0
  286. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/docker/__init__.py +0 -0
  287. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/docker/_buildx.py +0 -0
  288. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/docker/docker_image.py +0 -0
  289. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/engine.py +0 -0
  290. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/__init__.py +0 -0
  291. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/actions.py +0 -0
  292. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/clients.py +0 -0
  293. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/filters.py +0 -0
  294. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/related.py +0 -0
  295. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/schemas/__init__.py +0 -0
  296. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  297. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/schemas/labelling.py +0 -0
  298. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/subscribers.py +0 -0
  299. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/utilities.py +0 -0
  300. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/events/worker.py +0 -0
  301. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/exceptions.py +0 -0
  302. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/futures.py +0 -0
  303. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/infrastructure/__init__.py +0 -0
  304. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/infrastructure/base.py +0 -0
  305. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  306. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  307. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  308. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  309. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  310. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/input/__init__.py +0 -0
  311. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/input/actions.py +0 -0
  312. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/input/run_input.py +0 -0
  313. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/locking/__init__.py +0 -0
  314. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/locking/_filelock.py +0 -0
  315. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/locking/filesystem.py +0 -0
  316. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/locking/memory.py +0 -0
  317. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/locking/protocol.py +0 -0
  318. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/logging/__init__.py +0 -0
  319. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/logging/clients.py +0 -0
  320. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/logging/configuration.py +0 -0
  321. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/logging/filters.py +0 -0
  322. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/logging/formatters.py +0 -0
  323. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/logging/highlighters.py +0 -0
  324. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/logging/loggers.py +0 -0
  325. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/logging/logging.yml +0 -0
  326. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/main.py +0 -0
  327. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/plugins.py +0 -0
  328. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/py.typed +0 -0
  329. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/results.py +0 -0
  330. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/__init__.py +0 -0
  331. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_cancel_finalizer.py +0 -0
  332. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_cancellation_manager.py +0 -0
  333. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_control_channel.py +0 -0
  334. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_deployment_registry.py +0 -0
  335. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_event_emitter.py +0 -0
  336. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_flow_resolver.py +0 -0
  337. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_hook_runner.py +0 -0
  338. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_limit_manager.py +0 -0
  339. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_state_proposer.py +0 -0
  340. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_uv_command.py +0 -0
  341. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_workspace_hook_runner.py +0 -0
  342. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_workspace_resolver.py +0 -0
  343. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_workspace_runtime.py +0 -0
  344. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
  345. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_workspace_starter.py +0 -0
  346. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runner/_workspace_supervisor.py +0 -0
  347. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runtime/__init__.py +0 -0
  348. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runtime/deployment.py +0 -0
  349. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/runtime/task_run.py +0 -0
  350. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/schedules.py +0 -0
  351. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/serializers.py +0 -0
  352. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/_ui_static.py +0 -0
  353. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/admin.py +0 -0
  354. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/collections.py +0 -0
  355. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/csrf_token.py +0 -0
  356. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/dependencies.py +0 -0
  357. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/middleware.py +0 -0
  358. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/root.py +0 -0
  359. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/run_history.py +0 -0
  360. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/saved_searches.py +0 -0
  361. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  362. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/templates.py +0 -0
  363. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/ui/__init__.py +0 -0
  364. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/ui/schemas.py +0 -0
  365. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/server/api/validation.py +0 -0
  366. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/AGENTS.md +0 -0
  367. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/__init__.py +0 -0
  368. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/base.py +0 -0
  369. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/constants.py +0 -0
  370. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/context.py +0 -0
  371. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/legacy.py +0 -0
  372. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/__init__.py +0 -0
  373. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/_defaults.py +0 -0
  374. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/api.py +0 -0
  375. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/cli.py +0 -0
  376. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/client.py +0 -0
  377. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/cloud.py +0 -0
  378. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/events.py +0 -0
  379. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/experiments.py +0 -0
  380. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/flows.py +0 -0
  381. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/internal.py +0 -0
  382. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/logging.py +0 -0
  383. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/plugins.py +0 -0
  384. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/results.py +0 -0
  385. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/root.py +0 -0
  386. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/runner.py +0 -0
  387. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/__init__.py +0 -0
  388. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/api.py +0 -0
  389. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/concurrency.py +0 -0
  390. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/database.py +0 -0
  391. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/deployments.py +0 -0
  392. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/docket.py +0 -0
  393. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/ephemeral.py +0 -0
  394. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/events.py +0 -0
  395. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  396. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/logs.py +0 -0
  397. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/root.py +0 -0
  398. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/services.py +0 -0
  399. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/tasks.py +0 -0
  400. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/ui.py +0 -0
  401. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/server/worker_channel.py +0 -0
  402. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/tasks.py +0 -0
  403. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/telemetry.py +0 -0
  404. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/testing.py +0 -0
  405. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/models/worker.py +0 -0
  406. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/profiles.py +0 -0
  407. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/profiles.toml +0 -0
  408. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/settings/sources.py +0 -0
  409. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/states.py +0 -0
  410. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/task_runs.py +0 -0
  411. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/task_worker.py +0 -0
  412. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/telemetry/__init__.py +0 -0
  413. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/telemetry/run_telemetry.py +0 -0
  414. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/transactions.py +0 -0
  415. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/types/_concurrency.py +0 -0
  416. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/types/entrypoint.py +0 -0
  417. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/types/names.py +0 -0
  418. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/AGENTS.md +0 -0
  419. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/__init__.py +0 -0
  420. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/annotations.py +0 -0
  421. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  422. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  423. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/callables/AGENTS.md +0 -0
  424. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/callables/__init__.py +0 -0
  425. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/compat.py +0 -0
  426. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/context.py +0 -0
  427. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/dispatch.py +0 -0
  428. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/dockerutils.py +0 -0
  429. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/engine/AGENTS.md +0 -0
  430. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/engine/__init__.py +0 -0
  431. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  432. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/generics.py +0 -0
  433. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/hashing.py +0 -0
  434. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/importtools.py +0 -0
  435. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/math.py +0 -0
  436. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/names.py +0 -0
  437. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  438. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/processutils/__init__.py +0 -0
  439. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/render_swagger.py +0 -0
  440. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  441. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  442. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  443. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/schema_tools/validation.py +0 -0
  444. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/services.py +0 -0
  445. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/slugify.py +0 -0
  446. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/text.py +0 -0
  447. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/timeout.py +0 -0
  448. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/utilities/visualization.py +0 -0
  449. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/variables.py +0 -0
  450. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/__init__.py +0 -0
  451. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/_cleanup.py +0 -0
  452. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/_cleanup_handlers.py +0 -0
  453. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  454. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  455. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/_worker_channel/_state.py +0 -0
  456. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  457. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  458. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/base.py +0 -0
  459. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/block.py +0 -0
  460. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/cloud.py +0 -0
  461. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/server.py +0 -0
  462. {prefect_client-3.8.9.dev7 → prefect_client-3.9.1}/src/prefect/workers/utilities.py +0 -0
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: prefect-client
3
- Version: 3.8.9.dev7
3
+ Version: 3.9.1
4
4
  Summary: Workflow orchestration and management.
5
5
  Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
6
- Project-URL: Documentation, https://docs.prefect.io
6
+ Project-URL: Documentation, https://www.prefect.io/docs
7
7
  Project-URL: Source, https://github.com/PrefectHQ/prefect
8
8
  Project-URL: Tracker, https://github.com/PrefectHQ/prefect/issues
9
9
  Author-email: "Prefect Technologies, Inc." <help@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
@@ -48,22 +50,21 @@ Requires-Dist: pydantic-core<3.0.0,>=2.12.0
48
50
  Requires-Dist: pydantic-extra-types<3.0.0,>=2.8.2
49
51
  Requires-Dist: pydantic-settings<3.0.0,>=2.9.1
50
52
  Requires-Dist: python-dateutil<3.0.0,>=2.8.2
51
- Requires-Dist: python-slugify<9.1,>=9
53
+ Requires-Dist: python-slugify<9.2,>=9
52
54
  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.12.0,>=0.10.5; python_version >= '3.13'
65
66
  Provides-Extra: notifications
66
- Requires-Dist: apprise<2.0.0,>=1.13.0; extra == 'notifications'
67
+ Requires-Dist: apprise<2.1.0,>=1.13.0; extra == 'notifications'
67
68
  Description-Content-Type: text/markdown
68
69
 
69
70
  <p align="center"><img src="https://github.com/PrefectHQ/prefect/assets/3407835/c654cbc6-63e8-4ada-a92a-efd2f8f24b85" width=1000></p>
@@ -162,7 +163,7 @@ describing the functionality you are interested in using and we will do our best
162
163
  ## Next steps
163
164
 
164
165
  There's lots more you can do to orchestrate and observe your workflows with Prefect!
165
- Start with our [friendly tutorial](https://docs.prefect.io/tutorials) or explore the [core concepts of Prefect workflows](https://docs.prefect.io/concepts/).
166
+ Start with our [friendly tutorial](https://www.prefect.io/docs/v3/get-started/quickstart) or explore the [core concepts of Prefect workflows](https://www.prefect.io/docs/concepts/).
166
167
 
167
168
  ## Join the community
168
169
 
@@ -172,6 +173,6 @@ All community forums, including code contributions, issue discussions, and Slack
172
173
 
173
174
  ## Contribute
174
175
 
175
- See our [documentation on contributing to Prefect](https://docs.prefect.io/contributing/overview/).
176
+ See our [documentation on contributing to Prefect](https://www.prefect.io/docs/contribute).
176
177
 
177
178
  Thanks for being part of the mission to build a new kind of workflow system and, of course, **happy engineering!**
@@ -94,7 +94,7 @@ describing the functionality you are interested in using and we will do our best
94
94
  ## Next steps
95
95
 
96
96
  There's lots more you can do to orchestrate and observe your workflows with Prefect!
97
- Start with our [friendly tutorial](https://docs.prefect.io/tutorials) or explore the [core concepts of Prefect workflows](https://docs.prefect.io/concepts/).
97
+ Start with our [friendly tutorial](https://www.prefect.io/docs/v3/get-started/quickstart) or explore the [core concepts of Prefect workflows](https://www.prefect.io/docs/concepts/).
98
98
 
99
99
  ## Join the community
100
100
 
@@ -104,6 +104,6 @@ All community forums, including code contributions, issue discussions, and Slack
104
104
 
105
105
  ## Contribute
106
106
 
107
- See our [documentation on contributing to Prefect](https://docs.prefect.io/contributing/overview/).
107
+ See our [documentation on contributing to Prefect](https://www.prefect.io/docs/contribute).
108
108
 
109
109
  Thanks for being part of the mission to build a new kind of workflow system and, of course, **happy engineering!**
@@ -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",
@@ -52,28 +55,27 @@ dependencies = [
52
55
  "pydantic_extra_types>=2.8.2,<3.0.0",
53
56
  "pydantic_settings>=2.9.1,<3.0.0",
54
57
  "python-dateutil>=2.8.2,<3.0.0",
55
- "python-slugify>=9,<9.1",
58
+ "python-slugify>=9,<9.2",
56
59
  "pytz>=2021.1,<2027",
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.12.0; python_version>='3.13'",
69
71
  ]
70
72
  [project.urls]
71
73
  Changelog = "https://github.com/PrefectHQ/prefect/releases"
72
- Documentation = "https://docs.prefect.io"
74
+ Documentation = "https://www.prefect.io/docs"
73
75
  Source = "https://github.com/PrefectHQ/prefect"
74
76
  Tracker = "https://github.com/PrefectHQ/prefect/issues"
75
77
  [project.optional-dependencies]
76
- notifications = ["apprise>=1.13.0, <2.0.0"]
78
+ notifications = ["apprise>=1.13.0, <2.1.0"]
77
79
 
78
80
 
79
81
  [tool.hatch.version]
@@ -6,6 +6,10 @@ The foundation for building and executing workflows with Python. This covers the
6
6
 
7
7
  There is no formal public/private boundary beyond the `_` prefix convention. Modules and functions prefixed with `_` are internal. Everything else is considered public and requires backward compatibility.
8
8
 
9
+ ## Runtime Parameter Defaults
10
+
11
+ Runtime flow/task parameter values must come from `utilities.callables.get_call_parameters` or `get_parameter_defaults`: raw signature defaults can be `pydantic.Field(...)` objects. These helpers unwrap `FieldInfo` defaults; schema generation intentionally retains `FieldInfo` to preserve metadata.
12
+
9
13
  ## Entry Points
10
14
 
11
15
  - `flows.py` / `tasks.py` — `@flow` and `@task` decorator definitions. The primary user-facing API.
@@ -25,7 +29,8 @@ There is no formal public/private boundary beyond the `_` prefix convention. Mod
25
29
  - **Sync and async must stay in sync.** Both `flow_engine.py` and `task_engine.py` have sync and async paths. Any behavior change must be applied to both.
26
30
  - **Event and log WebSocket subscribers are parallel implementations.** `events/clients.py::PrefectEventSubscriber` and `logging/clients.py::PrefectLogsSubscriber` duplicate the same reconnect/backoff/dedup logic, including the `reconnect_on_clean_close` option (used by `events/subscribers.py::FlowRunSubscriber` so a clean disconnect doesn't hide a terminal event). Mirror any reconnection-behavior change across both.
27
31
  - **Flow run observers own their stream recovery.** `_internal/observers.py` observers create subscribers with `reconnection_attempts=0` and delegate polling fallback, reconnect backoff, and setup deadlines to `_internal/_observation_delivery.py::ObservationDelivery`. Subscribers close any socket left by a failed or cancelled `__aenter__`, since callers never exit a context that failed to enter.
28
- - **Use `whenever` compat helpers for all datetime conversions on Python 3.13+.** `types/_datetime.py` provides `now()`, `_whenever_to_stdlib()`, `_whenever_zdt_from_py()`, and `_whenever_pdt_from_py()` to abstract over API differences between whenever 0.7.x–0.9.x and ≥ 0.10.0. The `_WHENEVER_NEW_API` flag (True when whenever ≥ 0.10.0) guards version-specific code. Never call `DateTime.now()` or `pendulum.now()` directly — use `now()` from `types/_datetime.py` instead. Avoid no-argument `datetime.datetime.now()` because it returns a tz-naive datetime that raises `TypeError` when compared to the tz-aware datetimes produced by `now()`. Explicitly timezone-aware stdlib calls such as `datetime.now(ZoneInfo("UTC"))` are allowed when needed to preserve timezone information. Never call `ZonedDateTime.from_py_datetime()`, `PlainDateTime.from_py_datetime()`, or `.py_datetime()` directly — use the helpers instead. Violations will silently break on whichever whenever version the helpers weren't written for.
32
+ - **Use `whenever` compat helpers for all datetime conversions on Python 3.13+.** `prefect-client` depends on `whenever` only on Python 3.13+, so modules it ships must keep `whenever` imports behind `sys.version_info >= (3, 13)`; only server code that the client build strips may import it unconditionally (see `client/AGENTS.md`). `types/_datetime.py` provides `now()`, `_whenever_to_stdlib()`, `_whenever_zdt_from_py()`, and `_whenever_pdt_from_py()` to abstract over API differences across supported whenever releases. Version-specific code is guarded by feature-detection flags (`_WHENEVER_NEW_API` for ≥ 0.10.0, `_SYSTEM_TZ` for ≥ 0.11), not version checks. Never call `DateTime.now()` or `pendulum.now()` directly — use `now()` from `types/_datetime.py` instead. Avoid no-argument `datetime.datetime.now()` because it returns a tz-naive datetime that raises `TypeError` when compared to the tz-aware datetimes produced by `now()`. Explicitly timezone-aware stdlib calls such as `datetime.now(ZoneInfo("UTC"))` are allowed when needed to preserve timezone information. Never call `ZonedDateTime.from_py_datetime()`, `PlainDateTime.from_py_datetime()`, or `.py_datetime()` directly — use the helpers instead. Likewise avoid `.assume_system_tz()`/`.to_system_tz()` (deprecated in 0.11; the warning fails tests under `filterwarnings = error`) — use `in_local_tz()` — and direct `DateTimeDelta` imports (removed in 0.11) — use the `Interval` alias. Violations will silently break on whichever whenever version the helpers weren't written for.
33
+ - **Call Pendulum-only members via `types/_datetime.py::_pendulum_call` on Python 3.11/3.12.** Prefect's `DateTime`/`Date`/`Duration` wrap Pendulum-only members (and some shared stdlib methods like `replace`) with user-facing deprecation warnings; `_pendulum_call` bypasses them so users only see warnings for their own calls. `pyproject.toml` ignores these warnings in pytest, so direct calls from Prefect code pass tests silently unless covered by the guards in `tests/test_datetime.py`.
29
34
  - **Flow and task engines advance state differently.** The flow engine makes blocking API calls to the server to propose and advance states. The task engine emits `prefect.task_run.*` events (delivered via WebSockets) but advances state locally through `set_state` calls with polling/backoff — do not assume the two engines work the same way.
30
35
  - **Flow state transitions go through the server.** The flow engine proposes states to the server, which accepts or rejects them via orchestration rules. The task engine, by contrast, manages state transitions locally via `set_state` and emits `prefect.task_run.*` events — it does not propose states to the server.
31
36
  - **`ProcessPoolTaskRunner` requires picklable data across subprocess boundaries.** `PrefectFuture` objects are not picklable and cannot be passed to worker subprocesses. Any `wait_for` futures must be waited on in the parent process and converted to `State` objects before submission. The subprocess task engine handles `State` objects via `resolve_to_final_result`, which raises `UpstreamTaskError` for non-completed upstreams.
@@ -69,3 +74,7 @@ Use `get_logger()` from `prefect.logging` instead of raw `logging.getLogger()`
69
74
  - `docker/` → `DockerImage` class for building and pushing Docker images during deployment
70
75
  - `telemetry/` → OS-level resource metric collection and run telemetry
71
76
  - `testing/` → Test utilities shipped with the SDK: `prefect_test_harness`, assertion helpers, and reusable fixtures (see testing/AGENTS.md)
77
+
78
+ ## Multi-pass Templating
79
+
80
+ When applying `utilities.templating.apply_values` in stages, use `remove_notset=False` on passes that must preserve placeholders for later values. The default drops unresolved whole-value dict entries and list items and blanks unresolved inline placeholders. This matters when deployment preparation applies environment values before build/push outputs exist; only remove unresolved values when the caller has reached its final resolution pass.
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.9.1"
3
+ __build_date__ = "2026-10-30 15:51:33.909810+00:00"
4
+ __git_commit__ = "bd4807c3f402e0390e945527178e746a4ca3a6d7"
5
+ __dirty__ = False
@@ -14,7 +14,7 @@ from prefect.settings import get_current_settings
14
14
  NOTICE_TEXT = """
15
15
  Prefect collects anonymous usage data to improve the product.
16
16
  To opt out: set PREFECT_SERVER_ANALYTICS_ENABLED=false on the server, or DO_NOT_TRACK=1 in the client.
17
- Learn more: https://docs.prefect.io/concepts/telemetry
17
+ Learn more: https://www.prefect.io/docs/concepts/telemetry
18
18
  """
19
19
 
20
20
 
@@ -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
@@ -59,7 +59,7 @@ MOVED_IN_V3 = {
59
59
  "prefect.client:get_client": "prefect.client.orchestration:get_client",
60
60
  }
61
61
 
62
- upgrade_guide_msg = "Refer to the upgrade guide for more information: https://docs.prefect.io/v3/how-to-guides/migrate/upgrade-agents-to-workers."
62
+ upgrade_guide_msg = "Refer to the upgrade guide for more information: https://www.prefect.io/docs/v3/how-to-guides/migrate/upgrade-agents-to-workers."
63
63
 
64
64
  REMOVED_IN_V3 = {
65
65
  "prefect.client.schemas.objects:MinimalDeploymentSchedule": "Use `prefect.client.schemas.actions.DeploymentScheduleCreate` instead.",
@@ -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()
@@ -242,8 +271,9 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
242
271
 
243
272
  self._stop(at_exit=at_exit)
244
273
 
245
- assert self._done_event is not None
246
- if self._done_event.is_set():
274
+ # `_done_event` is unset if the service never started in this process, e.g.
275
+ # in a child process after `reset_for_fork`
276
+ if self._done_event is None or self._done_event.is_set():
247
277
  future: concurrent.futures.Future[bool] = concurrent.futures.Future()
248
278
  future.set_result(False)
249
279
  return future
@@ -500,9 +530,7 @@ class BatchedQueueService(QueueService[T]):
500
530
  deadline = get_deadline(self.min_interval)
501
531
  while batch_size < self.max_batch_size:
502
532
  try:
503
- item = await self._queue_get_thread.submit(
504
- create_call(self._queue.get, timeout=get_timeout(deadline))
505
- ).aresult()
533
+ item = await self._get_item(timeout=get_timeout(deadline))
506
534
 
507
535
  if item is None:
508
536
  done = True
@@ -37,6 +37,7 @@ if TYPE_CHECKING:
37
37
  ResultSerializer = Union[Serializer, str]
38
38
  LITERAL_TYPES: set[type] = {type(None), bool, UUID}
39
39
  R = TypeVar("R")
40
+ _LEGACY_RESULT_BLOB_KEYS = {"serializer", "data", "prefect_version", "expiration"}
40
41
 
41
42
 
42
43
  class ResultRecordMetadata(BaseModel):
@@ -173,16 +174,19 @@ class ResultRecord(BaseModel, Generic[R]):
173
174
  if isinstance(value, dict):
174
175
  if TYPE_CHECKING: # TODO: # isintance doesn't accept generic parameters
175
176
  value = cast(dict[str, Any], value)
176
- if "data" in value:
177
+ # Only coerce the exact legacy `PersistedResultBlob` shape so that raw
178
+ # JSON results that happen to contain a `data` key aren't misread
179
+ if (
180
+ {"data", "serializer"} <= value.keys() <= _LEGACY_RESULT_BLOB_KEYS
181
+ and isinstance(value["data"], str)
182
+ and isinstance(value["serializer"], dict)
183
+ ):
177
184
  value["result"] = value.pop("data")
178
- if "metadata" not in value:
179
- value["metadata"] = {}
180
- if "expiration" in value:
181
- value["metadata"]["expiration"] = value.pop("expiration")
182
- if "serializer" in value:
183
- value["metadata"]["serializer"] = value.pop("serializer")
184
- if "prefect_version" in value:
185
- value["metadata"]["prefect_version"] = value.pop("prefect_version")
185
+ value["metadata"] = {"serializer": value.pop("serializer")}
186
+ if "expiration" in value:
187
+ value["metadata"]["expiration"] = value.pop("expiration")
188
+ if "prefect_version" in value:
189
+ value["metadata"]["prefect_version"] = value.pop("prefect_version")
186
190
  return value
187
191
 
188
192
  def serialize_metadata(self) -> bytes:
@@ -34,7 +34,7 @@ logger: "logging.Logger" = get_logger("artifacts")
34
34
  class Artifact(ArtifactRequest):
35
35
  """
36
36
  An artifact is a piece of data that is created by a flow or task run.
37
- https://docs.prefect.io/latest/develop/artifacts
37
+ https://www.prefect.io/docs/latest/develop/artifacts
38
38
 
39
39
  Arguments:
40
40
  type: A string identifying the type of artifact.
@@ -47,7 +47,7 @@ class AbstractAppriseNotificationBlock(NotificationBlock, ABC):
47
47
  )
48
48
 
49
49
  self._apprise_client = Apprise(asset=prefect_app_data)
50
- self._apprise_client.add(servers=url.get_secret_value()) # pyright: ignore[reportUnknownMemberType]
50
+ self._apprise_client.add(url.get_secret_value()) # pyright: ignore[reportUnknownMemberType]
51
51
 
52
52
  def block_initialization(self) -> None:
53
53
  self._start_apprise_client(getattr(self, "url"))
@@ -104,7 +104,7 @@ class AppriseNotificationBlock(AbstractAppriseNotificationBlock, ABC):
104
104
  """
105
105
 
106
106
  _documentation_url = HttpUrl(
107
- "https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
107
+ "https://www.prefect.io/docs/latest/automate/events/automations-triggers#sending-notifications-with-automations"
108
108
  )
109
109
  url: SecretStr = Field(
110
110
  default=...,
@@ -173,7 +173,7 @@ class SlackWebhook(AppriseNotificationBlock):
173
173
  "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/slack.png"
174
174
  )
175
175
  _documentation_url = HttpUrl(
176
- "https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
176
+ "https://www.prefect.io/docs/latest/automate/events/automations-triggers#sending-notifications-with-automations"
177
177
  )
178
178
 
179
179
  url: SecretStr = Field(
@@ -270,7 +270,7 @@ class MicrosoftTeamsWebhook(AppriseNotificationBlock):
270
270
  "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/microsoft-teams.png"
271
271
  )
272
272
  _documentation_url = HttpUrl(
273
- "https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
273
+ "https://www.prefect.io/docs/latest/automate/events/automations-triggers#sending-notifications-with-automations"
274
274
  )
275
275
 
276
276
  url: SecretStr = Field(
@@ -332,7 +332,7 @@ class PagerDutyWebHook(AbstractAppriseNotificationBlock):
332
332
  "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/pagerduty.png"
333
333
  )
334
334
  _documentation_url = HttpUrl(
335
- "https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
335
+ "https://www.prefect.io/docs/latest/automate/events/automations-triggers#sending-notifications-with-automations"
336
336
  )
337
337
 
338
338
  # PagerDuty requires a valid severity level from its PAGERDUTY_SEVERITY_MAP
@@ -488,7 +488,7 @@ class TwilioSMS(AbstractAppriseNotificationBlock):
488
488
  "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/twilio.png"
489
489
  ) # noqa
490
490
  _documentation_url = HttpUrl(
491
- "https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
491
+ "https://www.prefect.io/docs/latest/automate/events/automations-triggers#sending-notifications-with-automations"
492
492
  )
493
493
 
494
494
  account_sid: str = Field(
@@ -563,7 +563,7 @@ class OpsgenieWebhook(AbstractAppriseNotificationBlock):
563
563
  "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/opsgenie.png"
564
564
  )
565
565
  _documentation_url = HttpUrl(
566
- "https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
566
+ "https://www.prefect.io/docs/latest/automate/events/automations-triggers#sending-notifications-with-automations"
567
567
  )
568
568
 
569
569
  apikey: SecretStr = Field(
@@ -688,7 +688,7 @@ class MattermostWebhook(AbstractAppriseNotificationBlock):
688
688
  "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/mattermost.png"
689
689
  )
690
690
  _documentation_url = HttpUrl(
691
- "https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
691
+ "https://www.prefect.io/docs/latest/automate/events/automations-triggers#sending-notifications-with-automations"
692
692
  )
693
693
 
694
694
  hostname: str = Field(
@@ -790,7 +790,7 @@ class DiscordWebhook(AbstractAppriseNotificationBlock):
790
790
  "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/discord.png"
791
791
  )
792
792
  _documentation_url = HttpUrl(
793
- "https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
793
+ "https://www.prefect.io/docs/latest/automate/events/automations-triggers#sending-notifications-with-automations"
794
794
  )
795
795
 
796
796
  webhook_id: SecretStr = Field(
@@ -895,7 +895,7 @@ class CustomWebhookNotificationBlock(NotificationBlock):
895
895
  "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/webhook.png"
896
896
  )
897
897
  _documentation_url = HttpUrl(
898
- "https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
898
+ "https://www.prefect.io/docs/latest/automate/events/automations-triggers#sending-notifications-with-automations"
899
899
  )
900
900
 
901
901
  name: str = Field(title="Name", description="Name of the webhook.")
@@ -1065,7 +1065,7 @@ class SendgridEmail(AbstractAppriseNotificationBlock):
1065
1065
  "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/email.png"
1066
1066
  )
1067
1067
  _documentation_url = HttpUrl(
1068
- "https://docs.prefect.io/latest/automate/events/automations-triggers#sending-notifications-with-automations"
1068
+ "https://www.prefect.io/docs/latest/automate/events/automations-triggers#sending-notifications-with-automations"
1069
1069
  )
1070
1070
 
1071
1071
  api_key: SecretStr = Field(
@@ -1115,9 +1115,7 @@ class SendgridEmail(AbstractAppriseNotificationBlock):
1115
1115
  """Update apprise client with current to_emails before sending."""
1116
1116
  if hasattr(self, "_apprise_client") and self._apprise_client:
1117
1117
  self._apprise_client.clear()
1118
- self._apprise_client.add(
1119
- servers=self._build_sendgrid_url().get_secret_value()
1120
- )
1118
+ self._apprise_client.add(self._build_sendgrid_url().get_secret_value())
1121
1119
 
1122
1120
  async def anotify(
1123
1121
  self,
@@ -47,7 +47,7 @@ class Secret(Block, Generic[T]):
47
47
  _logo_url = HttpUrl(
48
48
  "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/secret.png"
49
49
  )
50
- _documentation_url = HttpUrl("https://docs.prefect.io/latest/develop/blocks")
50
+ _documentation_url = HttpUrl("https://www.prefect.io/docs/latest/develop/blocks")
51
51
  _description = "A block that represents a secret value. The value stored in this block will be obfuscated when this block is viewed or edited in the UI."
52
52
 
53
53
  value: Union[SecretStr, PydanticSecret[T]] = Field(
@@ -33,7 +33,7 @@ class Webhook(Block):
33
33
  _block_type_name = "Webhook"
34
34
  _logo_url = "https://raw.githubusercontent.com/PrefectHQ/prefect/420d0d6a78bb6df1fc18bcf188fdad43c1d22ea9/assets/block-logos/webhook.png" # type: ignore
35
35
  _documentation_url = HttpUrl(
36
- "https://docs.prefect.io/latest/automate/events/webhook-triggers"
36
+ "https://www.prefect.io/docs/latest/automate/events/webhook-triggers"
37
37
  )
38
38
 
39
39
  method: Literal["GET", "POST", "PUT", "PATCH", "DELETE"] = Field(
@@ -4,6 +4,7 @@ from copy import deepcopy
4
4
  from dataclasses import dataclass, field, replace
5
5
  from logging import Logger
6
6
  from pathlib import Path
7
+ from types import CodeType
7
8
  from typing import (
8
9
  TYPE_CHECKING,
9
10
  Any,
@@ -45,9 +46,10 @@ def _register_stable_transforms() -> None:
45
46
  if sys.modules.get("pandas") is not None:
46
47
  import pandas as pd # pyright: ignore
47
48
 
48
- STABLE_TRANSFORMS[pd.DataFrame] = lambda df: [ # pyright: ignore
49
- df[col] for col in sorted(df.columns)
50
- ]
49
+ STABLE_TRANSFORMS[pd.DataFrame] = lambda df: ( # pyright: ignore
50
+ list(df.columns),
51
+ [df.iloc[:, i] for i in range(len(df.columns))],
52
+ )
51
53
 
52
54
 
53
55
  @dataclass
@@ -282,6 +284,19 @@ class _None(CachePolicy):
282
284
  return other
283
285
 
284
286
 
287
+ def _normalize_code_location(code: CodeType) -> CodeType:
288
+ """Remove compilation locations, including those in nested code constants."""
289
+ return code.replace(
290
+ co_filename="",
291
+ co_firstlineno=1,
292
+ co_linetable=b"",
293
+ co_consts=tuple(
294
+ _normalize_code_location(const) if isinstance(const, CodeType) else const
295
+ for const in code.co_consts
296
+ ),
297
+ )
298
+
299
+
285
300
  @dataclass
286
301
  class TaskSource(CachePolicy):
287
302
  """
@@ -312,7 +327,10 @@ class TaskSource(CachePolicy):
312
327
  lines = inspect.getsource(task_ctx.task.fn.__class__)
313
328
  except OSError as exc:
314
329
  if "source code" in str(exc):
315
- lines = task_ctx.task.fn.__code__.co_code
330
+ return hash_objects(
331
+ _normalize_code_location(task_ctx.task.fn.__code__),
332
+ raise_on_failure=True,
333
+ )
316
334
  else:
317
335
  raise
318
336
 
@@ -1,5 +1,5 @@
1
1
  """
2
- Asynchronous client implementation for communicating with the [Prefect REST API](https://docs.prefect.io/v3/api-ref/rest-api/).
2
+ Asynchronous client implementation for communicating with the [Prefect REST API](https://www.prefect.io/docs/v3/api-ref/rest-api/).
3
3
 
4
4
  Explore the client by communicating with an in-memory webserver - no setup required:
5
5
 
@@ -296,7 +296,7 @@ class PrefectClient(
296
296
  EventAsyncClient,
297
297
  ):
298
298
  """
299
- An asynchronous client for interacting with the [Prefect REST API](https://docs.prefect.io/v3/api-ref/rest-api/).
299
+ An asynchronous client for interacting with the [Prefect REST API](https://www.prefect.io/docs/v3/api-ref/rest-api/).
300
300
 
301
301
  Args:
302
302
  api: the REST API URL or FastAPI application to connect to
@@ -1243,7 +1243,7 @@ class SyncPrefectClient(
1243
1243
  EventClient,
1244
1244
  ):
1245
1245
  """
1246
- A synchronous client for interacting with the [Prefect REST API](https://docs.prefect.io/v3/api-ref/rest-api/).
1246
+ A synchronous client for interacting with the [Prefect REST API](https://www.prefect.io/docs/v3/api-ref/rest-api/).
1247
1247
 
1248
1248
  Args:
1249
1249
  api: the REST API URL or FastAPI application to connect to
@@ -525,6 +525,8 @@ class WorkPoolAsyncClient(BaseAsyncClient):
525
525
  json=work_pool.model_dump(mode="json", exclude_unset=True),
526
526
  )
527
527
  except HTTPStatusError as e:
528
+ if e.response.status_code == 403 and "plan does not support" in str(e):
529
+ raise ObjectUnsupported(http_exc=e) from e
528
530
  if e.response.status_code == 409:
529
531
  if overwrite:
530
532
  existing_work_pool = await self.read_work_pool(
@@ -25,6 +25,8 @@ class TaskRunSort(AutoEnum):
25
25
  NAME_DESC = AutoEnum.auto()
26
26
  NEXT_SCHEDULED_START_TIME_ASC = AutoEnum.auto()
27
27
  END_TIME_DESC = AutoEnum.auto()
28
+ DURATION_DESC = AutoEnum.auto()
29
+ DURATION_ASC = AutoEnum.auto()
28
30
 
29
31
 
30
32
  class AutomationSort(AutoEnum):
@@ -3,7 +3,7 @@ Async and thread safe models for passing runtime context data.
3
3
 
4
4
  These contexts should never be directly mutated by the user.
5
5
 
6
- For more user-accessible information about the current run, see [`prefect.runtime`](https://docs.prefect.io/v3/api-ref/python/prefect-runtime-flow_run).
6
+ For more user-accessible information about the current run, see [`prefect.runtime`](https://www.prefect.io/docs/v3/api-ref/python/prefect-runtime-flow_run).
7
7
  """
8
8
 
9
9
  import asyncio
@@ -2,7 +2,7 @@
2
2
  Core primitives for managing Prefect deployments via `prefect deploy`, providing a minimally opinionated
3
3
  build system for managing flows and deployments.
4
4
 
5
- To get started, follow along with [the deployments tutorial](https://docs.prefect.io/v3/how-to-guides/deployments/create-deployments).
5
+ To get started, follow along with [the deployments tutorial](https://www.prefect.io/docs/v3/how-to-guides/deployments/create-deployments).
6
6
  """
7
7
 
8
8
  from __future__ import annotations