prefect-client 3.9.1.dev3__tar.gz → 3.9.1.dev5__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.9.1.dev3 → prefect_client-3.9.1.dev5}/PKG-INFO +1 -1
  2. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/AGENTS.md +10 -1
  3. prefect_client-3.9.1.dev5/src/prefect/_build_info.py +5 -0
  4. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/services.py +3 -2
  5. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/result_records.py +13 -9
  6. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/cache_policies.py +22 -4
  7. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_work_pools/client.py +2 -0
  8. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/sorting.py +2 -0
  9. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/AGENTS.md +1 -0
  10. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/schemas/automations.py +11 -3
  11. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/schemas/events.py +7 -0
  12. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/ecs.py +86 -19
  13. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/runner.py +10 -4
  14. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/storage.py +18 -7
  15. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/background_workers.py +25 -19
  16. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/clients.py +35 -2
  17. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/ui/flow_runs.py +1 -1
  18. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/task_engine.py +62 -6
  19. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/task_runners.py +28 -12
  20. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/types/_datetime.py +2 -0
  21. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/filesystem/__init__.py +50 -5
  22. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/templating/AGENTS.md +1 -0
  23. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/templating/__init__.py +9 -3
  24. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/urls.py +14 -1
  25. prefect_client-3.9.1.dev3/src/prefect/_build_info.py +0 -5
  26. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/.gitignore +0 -0
  27. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/LICENSE +0 -0
  28. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/README.md +0 -0
  29. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/hatch_build.py +0 -0
  30. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/pyproject.toml +0 -0
  31. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/.prefectignore +0 -0
  32. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/__init__.py +0 -0
  33. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/__main__.py +0 -0
  34. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/__init__.py +0 -0
  35. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/_launchers.py +0 -0
  36. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/bundles/__init__.py +0 -0
  37. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/bundles/execute.py +0 -0
  38. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/plugins/__init__.py +0 -0
  39. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/plugins/apply.py +0 -0
  40. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  41. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/plugins/manager.py +0 -0
  42. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/plugins/spec.py +0 -0
  43. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/sla/__init__.py +0 -0
  44. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/sla/client.py +0 -0
  45. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/sla/objects.py +0 -0
  46. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_flow_run_suspension.py +0 -0
  47. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/__init__.py +0 -0
  48. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/_logging.py +0 -0
  49. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/_observation_delivery.py +0 -0
  50. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/__init__.py +0 -0
  51. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  52. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/client.py +0 -0
  53. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/device_id.py +0 -0
  54. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/emit.py +0 -0
  55. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/enabled.py +0 -0
  56. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/events.py +0 -0
  57. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/milestones.py +0 -0
  58. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/notice.py +0 -0
  59. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/service.py +0 -0
  60. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/ast_utils.py +0 -0
  61. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/attempt_control.py +0 -0
  62. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/buildx.py +0 -0
  63. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/__init__.py +0 -0
  64. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  65. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/backports.py +0 -0
  66. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/blocks.py +0 -0
  67. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  68. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  69. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/migration.py +0 -0
  70. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/starlette.py +0 -0
  71. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/__init__.py +0 -0
  72. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/api.py +0 -0
  73. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/calls.py +0 -0
  74. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  75. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  76. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/inspection.py +0 -0
  77. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/primitives.py +0 -0
  78. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/threads.py +0 -0
  79. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/waiters.py +0 -0
  80. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/control_listener.py +0 -0
  81. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/deprecated.py +0 -0
  82. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/engine.py +0 -0
  83. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/git.py +0 -0
  84. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  85. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/installation.py +0 -0
  86. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/integrations.py +0 -0
  87. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/launchers.py +0 -0
  88. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/lazy.py +0 -0
  89. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/metrics.py +0 -0
  90. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/observability.py +0 -0
  91. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/observers.py +0 -0
  92. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/__init__.py +0 -0
  93. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/apply.py +0 -0
  94. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/collections.py +0 -0
  95. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  96. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/manager.py +0 -0
  97. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/spec.py +0 -0
  98. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/startup.py +0 -0
  99. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pydantic/__init__.py +0 -0
  100. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pydantic/schemas.py +0 -0
  101. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  102. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  103. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  104. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pytz.py +0 -0
  105. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/retries.py +0 -0
  106. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schema.py +0 -0
  107. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/__init__.py +0 -0
  108. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/_registry.py +0 -0
  109. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/bases.py +0 -0
  110. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/fields.py +0 -0
  111. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/serializers.py +0 -0
  112. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/validators.py +0 -0
  113. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  114. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/server_maintenance.py +0 -0
  115. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/states.py +0 -0
  116. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/testing.py +0 -0
  117. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/urls.py +0 -0
  118. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/uuid7.py +0 -0
  119. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/version_checking.py +0 -0
  120. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/versioning.py +0 -0
  121. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/waiters.py +0 -0
  122. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_internal/websockets.py +0 -0
  123. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/__init__.py +0 -0
  124. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/fetcher.py +0 -0
  125. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/generator.py +0 -0
  126. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/models.py +0 -0
  127. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/naming.py +0 -0
  128. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/renderer.py +0 -0
  129. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/schema_converter.py +0 -0
  130. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/templates/__init__.py +0 -0
  131. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  132. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/types.py +0 -0
  133. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/unions.py +0 -0
  134. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_vendor/croniter/__init__.py +0 -0
  135. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/_vendor/croniter/croniter.py +0 -0
  136. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/agent.py +0 -0
  137. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/analytics/__init__.py +0 -0
  138. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/artifacts.py +0 -0
  139. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/assets/__init__.py +0 -0
  140. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/assets/core.py +0 -0
  141. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/assets/materialize.py +0 -0
  142. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/automations.py +0 -0
  143. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/blocks/AGENTS.md +0 -0
  144. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/blocks/__init__.py +0 -0
  145. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/blocks/abstract.py +0 -0
  146. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/blocks/core.py +0 -0
  147. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/blocks/fields.py +0 -0
  148. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/blocks/notifications.py +0 -0
  149. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/blocks/redis.py +0 -0
  150. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/blocks/system.py +0 -0
  151. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/blocks/webhook.py +0 -0
  152. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/bundles/__init__.py +0 -0
  153. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/bundles/_file_collector.py +0 -0
  154. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/bundles/_ignore_filter.py +0 -0
  155. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/bundles/_path_resolver.py +0 -0
  156. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/bundles/_zip_builder.py +0 -0
  157. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/bundles/_zip_extractor.py +0 -0
  158. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/bundles/execute.py +0 -0
  159. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/AGENTS.md +0 -0
  160. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/__init__.py +0 -0
  161. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/attribution.py +0 -0
  162. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/base.py +0 -0
  163. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/cloud.py +0 -0
  164. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/collections.py +0 -0
  165. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/constants.py +0 -0
  166. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/__init__.py +0 -0
  167. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  168. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  169. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  170. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_automations/client.py +0 -0
  171. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  172. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  173. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  174. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  175. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  176. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  177. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  178. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  179. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  180. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  181. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  182. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_events/client.py +0 -0
  183. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  184. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  185. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  186. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_flows/client.py +0 -0
  187. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  188. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_logs/client.py +0 -0
  189. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  190. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_variables/client.py +0 -0
  191. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  192. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/base.py +0 -0
  193. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/routes.py +0 -0
  194. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/__init__.py +0 -0
  195. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/actions.py +0 -0
  196. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/events.py +0 -0
  197. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/filters.py +0 -0
  198. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/objects.py +0 -0
  199. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/responses.py +0 -0
  200. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/schedules.py +0 -0
  201. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/worker_channel.py +0 -0
  202. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/subscriptions.py +0 -0
  203. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/types/__init__.py +0 -0
  204. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  205. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/client/utilities.py +0 -0
  206. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/AGENTS.md +0 -0
  207. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/__init__.py +0 -0
  208. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/_asyncio.py +0 -0
  209. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/_events.py +0 -0
  210. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/_leases.py +0 -0
  211. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/_sync.py +0 -0
  212. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/asyncio.py +0 -0
  213. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/context.py +0 -0
  214. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/services.py +0 -0
  215. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/sync.py +0 -0
  216. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/__init__.py +0 -0
  217. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  218. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/_events.py +0 -0
  219. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/asyncio.py +0 -0
  220. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/context.py +0 -0
  221. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/services.py +0 -0
  222. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/sync.py +0 -0
  223. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/context.py +0 -0
  224. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/AGENTS.md +0 -0
  225. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/__init__.py +0 -0
  226. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/base.py +0 -0
  227. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/deployments.py +0 -0
  228. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/flow_runs.py +0 -0
  229. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/runner.py +0 -0
  230. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/schedules.py +0 -0
  231. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/steps/__init__.py +0 -0
  232. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/steps/core.py +0 -0
  233. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/steps/pull.py +0 -0
  234. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/deployments/steps/utility.py +0 -0
  235. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/docker/__init__.py +0 -0
  236. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/docker/_buildx.py +0 -0
  237. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/docker/docker_image.py +0 -0
  238. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/engine.py +0 -0
  239. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/__init__.py +0 -0
  240. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/actions.py +0 -0
  241. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/clients.py +0 -0
  242. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/filters.py +0 -0
  243. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/related.py +0 -0
  244. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/schemas/__init__.py +0 -0
  245. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  246. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/schemas/labelling.py +0 -0
  247. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/subscribers.py +0 -0
  248. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/utilities.py +0 -0
  249. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/events/worker.py +0 -0
  250. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/exceptions.py +0 -0
  251. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/filesystems.py +0 -0
  252. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/flow_engine.py +0 -0
  253. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/flow_runs.py +0 -0
  254. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/flows.py +0 -0
  255. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/futures.py +0 -0
  256. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/__init__.py +0 -0
  257. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/base.py +0 -0
  258. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  259. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  260. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  261. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  262. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  263. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/input/__init__.py +0 -0
  264. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/input/actions.py +0 -0
  265. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/input/run_input.py +0 -0
  266. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/locking/__init__.py +0 -0
  267. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/locking/_filelock.py +0 -0
  268. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/locking/filesystem.py +0 -0
  269. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/locking/memory.py +0 -0
  270. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/locking/protocol.py +0 -0
  271. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/logging/AGENTS.md +0 -0
  272. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/logging/__init__.py +0 -0
  273. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/logging/clients.py +0 -0
  274. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/logging/configuration.py +0 -0
  275. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/logging/filters.py +0 -0
  276. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/logging/formatters.py +0 -0
  277. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/logging/handlers.py +0 -0
  278. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/logging/highlighters.py +0 -0
  279. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/logging/loggers.py +0 -0
  280. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/logging/logging.yml +0 -0
  281. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/main.py +0 -0
  282. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/plugins.py +0 -0
  283. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/py.typed +0 -0
  284. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/results.py +0 -0
  285. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/AGENTS.md +0 -0
  286. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/__init__.py +0 -0
  287. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_cancel_finalizer.py +0 -0
  288. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_cancellation_manager.py +0 -0
  289. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_control_channel.py +0 -0
  290. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_deployment_registry.py +0 -0
  291. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_event_emitter.py +0 -0
  292. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_flow_resolver.py +0 -0
  293. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_flow_run_executor.py +0 -0
  294. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_hook_runner.py +0 -0
  295. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_limit_manager.py +0 -0
  296. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_process_manager.py +0 -0
  297. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  298. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_starter_bundle.py +0 -0
  299. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_starter_direct.py +0 -0
  300. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_starter_engine.py +0 -0
  301. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_state_proposer.py +0 -0
  302. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_uv_command.py +0 -0
  303. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_hook_runner.py +0 -0
  304. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_resolver.py +0 -0
  305. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_runtime.py +0 -0
  306. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
  307. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_starter.py +0 -0
  308. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_supervisor.py +0 -0
  309. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runner/server.py +0 -0
  310. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runtime/__init__.py +0 -0
  311. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runtime/deployment.py +0 -0
  312. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runtime/flow_run.py +0 -0
  313. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/runtime/task_run.py +0 -0
  314. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/schedules.py +0 -0
  315. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/serializers.py +0 -0
  316. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/__init__.py +0 -0
  317. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/_ui_static.py +0 -0
  318. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/admin.py +0 -0
  319. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/artifacts.py +0 -0
  320. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/automations.py +0 -0
  321. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/block_capabilities.py +0 -0
  322. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/block_documents.py +0 -0
  323. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/block_schemas.py +0 -0
  324. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/block_types.py +0 -0
  325. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/collections.py +0 -0
  326. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  327. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/concurrency_limits.py +0 -0
  328. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  329. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/csrf_token.py +0 -0
  330. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/dependencies.py +0 -0
  331. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/deployments.py +0 -0
  332. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/events.py +0 -0
  333. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/flow_run_states.py +0 -0
  334. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/flow_runs.py +0 -0
  335. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/flows.py +0 -0
  336. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/logs.py +0 -0
  337. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/middleware.py +0 -0
  338. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/observed_states.py +0 -0
  339. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/root.py +0 -0
  340. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/run_history.py +0 -0
  341. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/saved_searches.py +0 -0
  342. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/server.py +0 -0
  343. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  344. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/task_run_states.py +0 -0
  345. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/task_runs.py +0 -0
  346. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/task_workers.py +0 -0
  347. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/templates.py +0 -0
  348. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/ui/__init__.py +0 -0
  349. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/ui/flows.py +0 -0
  350. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/ui/schemas.py +0 -0
  351. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/ui/task_runs.py +0 -0
  352. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/validation.py +0 -0
  353. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/variables.py +0 -0
  354. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/work_queues.py +0 -0
  355. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/server/api/workers.py +0 -0
  356. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/AGENTS.md +0 -0
  357. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/__init__.py +0 -0
  358. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/_types.py +0 -0
  359. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/base.py +0 -0
  360. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/constants.py +0 -0
  361. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/context.py +0 -0
  362. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/legacy.py +0 -0
  363. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/__init__.py +0 -0
  364. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/_defaults.py +0 -0
  365. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/api.py +0 -0
  366. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/cli.py +0 -0
  367. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/client.py +0 -0
  368. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/cloud.py +0 -0
  369. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/deployments.py +0 -0
  370. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/events.py +0 -0
  371. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/experiments.py +0 -0
  372. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/flows.py +0 -0
  373. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/internal.py +0 -0
  374. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/logging.py +0 -0
  375. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/plugins.py +0 -0
  376. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/results.py +0 -0
  377. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/root.py +0 -0
  378. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/runner.py +0 -0
  379. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/__init__.py +0 -0
  380. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/api.py +0 -0
  381. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/concurrency.py +0 -0
  382. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/database.py +0 -0
  383. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/deployments.py +0 -0
  384. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/docket.py +0 -0
  385. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/ephemeral.py +0 -0
  386. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/events.py +0 -0
  387. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  388. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/logs.py +0 -0
  389. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/root.py +0 -0
  390. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/services.py +0 -0
  391. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/tasks.py +0 -0
  392. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/ui.py +0 -0
  393. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/worker_channel.py +0 -0
  394. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/tasks.py +0 -0
  395. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/telemetry.py +0 -0
  396. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/testing.py +0 -0
  397. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/worker.py +0 -0
  398. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/profiles.py +0 -0
  399. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/profiles.toml +0 -0
  400. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/settings/sources.py +0 -0
  401. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/states.py +0 -0
  402. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/task_runs.py +0 -0
  403. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/task_worker.py +0 -0
  404. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/tasks.py +0 -0
  405. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/telemetry/__init__.py +0 -0
  406. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/telemetry/run_telemetry.py +0 -0
  407. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/transactions.py +0 -0
  408. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/types/__init__.py +0 -0
  409. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/types/_concurrency.py +0 -0
  410. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/types/_datetime_deprecations.py +0 -0
  411. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/types/entrypoint.py +0 -0
  412. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/types/names.py +0 -0
  413. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/AGENTS.md +0 -0
  414. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/__init__.py +0 -0
  415. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/annotations.py +0 -0
  416. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  417. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  418. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/callables/AGENTS.md +0 -0
  419. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/callables/__init__.py +0 -0
  420. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/collections.py +0 -0
  421. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/compat.py +0 -0
  422. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/context.py +0 -0
  423. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/dispatch.py +0 -0
  424. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/dockerutils.py +0 -0
  425. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/engine/AGENTS.md +0 -0
  426. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/engine/__init__.py +0 -0
  427. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  428. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/generics.py +0 -0
  429. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/hashing.py +0 -0
  430. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/importtools.py +0 -0
  431. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/math.py +0 -0
  432. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/names.py +0 -0
  433. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  434. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/processutils/__init__.py +0 -0
  435. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/pydantic.py +0 -0
  436. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/render_swagger.py +0 -0
  437. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  438. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  439. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  440. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/schema_tools/validation.py +0 -0
  441. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/services.py +0 -0
  442. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/slugify.py +0 -0
  443. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/text.py +0 -0
  444. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/timeout.py +0 -0
  445. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/utilities/visualization.py +0 -0
  446. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/variables.py +0 -0
  447. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/AGENTS.md +0 -0
  448. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/__init__.py +0 -0
  449. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/_cleanup.py +0 -0
  450. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/_cleanup_handlers.py +0 -0
  451. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  452. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  453. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/_worker_channel/_state.py +0 -0
  454. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  455. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  456. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/base.py +0 -0
  457. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/block.py +0 -0
  458. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/cloud.py +0 -0
  459. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/process.py +0 -0
  460. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/src/prefect/workers/server.py +0 -0
  461. {prefect_client-3.9.1.dev3 → prefect_client-3.9.1.dev5}/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.9.1.dev3
3
+ Version: 3.9.1.dev5
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
@@ -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 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.
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.dev5"
3
+ __build_date__ = "2026-10-27 08:19:52.409161+00:00"
4
+ __git_commit__ = "7c7b28a1be2b6db40bd61baecc1925c472f6df75"
5
+ __dirty__ = False
@@ -271,8 +271,9 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
271
271
 
272
272
  self._stop(at_exit=at_exit)
273
273
 
274
- assert self._done_event is not None
275
- 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():
276
277
  future: concurrent.futures.Future[bool] = concurrent.futures.Future()
277
278
  future.set_result(False)
278
279
  return future
@@ -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:
@@ -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
 
@@ -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):
@@ -8,6 +8,7 @@ Client-side event system for emitting, subscribing to, and defining automations
8
8
  - Events follow the CloudEvents-inspired schema: `Event` with `Resource` and `RelatedResource`.
9
9
  - Automations combine triggers (event, metric, compound, sequence) with actions.
10
10
  - **Metric triggers are Cloud-only.** OSS's `ServerTriggerTypes` excludes `MetricTrigger`, so `POST /automations` returns 422. For "alert if a flow takes too long" on OSS, use a proactive `EventTrigger` (`after={prefect.flow-run.Running}`, terminal states in `expect`, SLO in `within`).
11
+ - **Automation schemas must read values this version doesn't know.** Cloud can add action types and metric names before a client release knows about them, so unknown actions parse as `UnknownAction` and unknown metric names stay `str` in `MetricTriggerQuery.name`. Code that reads automations must handle these variants (e.g. no `.value` on a metric name without an `isinstance` check), and `prefect transfer` skips automations that use them instead of copying them.
11
12
  - **Event name prefixes differ by backend.** OSS emits `prefect.*`; Cloud emits `prefect-cloud.*` for automation/action lifecycle events (e.g., `prefect-cloud.automation.triggered`). Cross-backend tooling that filters events must match both.
12
13
  - `DeploymentTriggerTypes` are the subset of triggers usable in `prefect.yaml` deployment definitions.
13
14
 
@@ -290,9 +290,16 @@ class MetricTriggerQuery(PrefectBaseModel):
290
290
  to Metric automations, that specify the query configurations
291
291
  and breaching conditions for the Automation"""
292
292
 
293
- name: PrefectMetric = Field(
293
+ # Prefect Cloud can add metrics before a client release knows about them.
294
+ # Reading an automation that uses one keeps its name as a string instead of
295
+ # failing, so updating the automation sends the name back unchanged.
296
+ name: Union[PrefectMetric, str] = Field(
294
297
  ...,
295
- description="The name of the metric to query.",
298
+ union_mode="left_to_right",
299
+ description=(
300
+ "The name of the metric to query. Names this version of Prefect does "
301
+ "not recognize are kept as strings."
302
+ ),
296
303
  )
297
304
  threshold: float = Field(
298
305
  ...,
@@ -357,7 +364,8 @@ class MetricTrigger(ResourceTrigger):
357
364
  return textwrap.indent(
358
365
  "\n".join(
359
366
  [
360
- f"Metric: {m.name.value} {m.operator.value} {m.threshold} for {m.range}",
367
+ f"Metric: {m.name.value if isinstance(m.name, PrefectMetric) else m.name} "
368
+ f"{m.operator.value} {m.threshold} for {m.range}",
361
369
  ]
362
370
  ),
363
371
  prefix=" " * indent,
@@ -31,6 +31,7 @@ from prefect.logging import get_logger
31
31
  from prefect.settings import (
32
32
  PREFECT_EVENTS_MAXIMUM_LABELS_PER_RESOURCE,
33
33
  )
34
+ from prefect.utilities.urls import url_for
34
35
 
35
36
  from .labelling import Labelled
36
37
 
@@ -194,6 +195,12 @@ class ReceivedEvent(Event):
194
195
  description="When the event was received by Prefect Cloud",
195
196
  )
196
197
 
198
+ @property
199
+ def url(self) -> Optional[str]:
200
+ """Returns the UI URL for this event, allowing users to link to events
201
+ in automation templates without parsing date strings."""
202
+ return url_for(self, url_type="ui")
203
+
197
204
 
198
205
  def matches(expected: str, value: Optional[str]) -> bool:
199
206
  """Returns true if the given value matches the expected string, which may
@@ -1005,7 +1005,25 @@ class ExecutionRoleResource:
1005
1005
  ],
1006
1006
  }
1007
1007
  )
1008
- self._requires_provisioning = None
1008
+ # `AmazonECSTaskExecutionRolePolicy` allows creating log streams and
1009
+ # putting log events, but not creating the log group that the ECS worker
1010
+ # asks for with `awslogs-create-group` when CloudWatch logs are enabled.
1011
+ self._logs_policy_name = "PrefectEcsTaskExecutionRoleLogsPolicy"
1012
+ self._logs_policy_document = json.dumps(
1013
+ {
1014
+ "Version": "2012-10-17",
1015
+ "Statement": [
1016
+ {
1017
+ "Sid": "AllowCreateLogGroup",
1018
+ "Effect": "Allow",
1019
+ "Action": "logs:CreateLogGroup",
1020
+ "Resource": "*",
1021
+ }
1022
+ ],
1023
+ }
1024
+ )
1025
+ self._requires_role_provisioning = None
1026
+ self._requires_logs_policy_provisioning = None
1009
1027
 
1010
1028
  async def get_task_count(self) -> int:
1011
1029
  """
@@ -1014,27 +1032,58 @@ class ExecutionRoleResource:
1014
1032
  Returns:
1015
1033
  int: The number of tasks to be provisioned.
1016
1034
  """
1017
- return 1 if await self.requires_provisioning() else 0
1018
-
1019
- async def requires_provisioning(self) -> bool:
1020
- """
1021
- Check if this resource requires provisioning.
1035
+ role_count = 1 if await self._role_requires_provisioning() else 0
1036
+ logs_policy_count = 1 if await self._logs_policy_requires_provisioning() else 0
1037
+ return role_count + logs_policy_count
1022
1038
 
1023
- Returns:
1024
- bool: True if provisioning is required, False otherwise.
1025
- """
1026
- if self._requires_provisioning is None:
1039
+ async def _role_requires_provisioning(self) -> bool:
1040
+ if self._requires_role_provisioning is None:
1027
1041
  try:
1028
1042
  await anyio.to_thread.run_sync(
1029
1043
  partial(
1030
1044
  self._iam_client.get_role, RoleName=self._execution_role_name
1031
1045
  )
1032
1046
  )
1033
- self._requires_provisioning = False
1047
+ self._requires_role_provisioning = False
1034
1048
  except self._iam_client.exceptions.NoSuchEntityException:
1035
- self._requires_provisioning = True
1049
+ self._requires_role_provisioning = True
1036
1050
 
1037
- return self._requires_provisioning
1051
+ return self._requires_role_provisioning
1052
+
1053
+ async def _logs_policy_requires_provisioning(self) -> bool:
1054
+ """
1055
+ Checked separately from role creation so that roles provisioned before
1056
+ the logs policy existed get it when provisioning is run again.
1057
+ """
1058
+ if self._requires_logs_policy_provisioning is None:
1059
+ if await self._role_requires_provisioning():
1060
+ self._requires_logs_policy_provisioning = True
1061
+ else:
1062
+ try:
1063
+ await anyio.to_thread.run_sync(
1064
+ partial(
1065
+ self._iam_client.get_role_policy,
1066
+ RoleName=self._execution_role_name,
1067
+ PolicyName=self._logs_policy_name,
1068
+ )
1069
+ )
1070
+ self._requires_logs_policy_provisioning = False
1071
+ except self._iam_client.exceptions.NoSuchEntityException:
1072
+ self._requires_logs_policy_provisioning = True
1073
+
1074
+ return self._requires_logs_policy_provisioning
1075
+
1076
+ async def requires_provisioning(self) -> bool:
1077
+ """
1078
+ Check if this resource requires provisioning.
1079
+
1080
+ Returns:
1081
+ bool: True if provisioning is required, False otherwise.
1082
+ """
1083
+ return (
1084
+ await self._role_requires_provisioning()
1085
+ or await self._logs_policy_requires_provisioning()
1086
+ )
1038
1087
 
1039
1088
  async def get_planned_actions(self) -> List[str]:
1040
1089
  """
@@ -1044,12 +1093,18 @@ class ExecutionRoleResource:
1044
1093
  Optional[str]: A description of the planned actions for provisioning the resource,
1045
1094
  or None if provisioning is not required.
1046
1095
  """
1047
- if await self.requires_provisioning():
1048
- return [
1096
+ actions: list[str] = []
1097
+ if await self._role_requires_provisioning():
1098
+ actions.append(
1049
1099
  "Creating an IAM role assigned to ECS tasks:"
1050
1100
  f" [blue]{self._execution_role_name}[/]"
1051
- ]
1052
- return []
1101
+ )
1102
+ if await self._logs_policy_requires_provisioning():
1103
+ actions.append(
1104
+ "Allowing the ECS task execution role to create CloudWatch log"
1105
+ f" groups: [blue]{self._logs_policy_name}[/]"
1106
+ )
1107
+ return actions
1053
1108
 
1054
1109
  async def provision(
1055
1110
  self,
@@ -1064,8 +1119,8 @@ class ExecutionRoleResource:
1064
1119
  infrastructure for.
1065
1120
  advance: A callback function to indicate progress.
1066
1121
  """
1067
- if await self.requires_provisioning():
1068
- console = current_console.get()
1122
+ console = current_console.get()
1123
+ if await self._role_requires_provisioning():
1069
1124
  console.print("Provisioning execution role")
1070
1125
  response = await anyio.to_thread.run_sync(
1071
1126
  partial(
@@ -1088,6 +1143,18 @@ class ExecutionRoleResource:
1088
1143
  partial(self._iam_client.get_role, RoleName=self._execution_role_name)
1089
1144
  )
1090
1145
 
1146
+ if await self._logs_policy_requires_provisioning():
1147
+ console.print("Adding CloudWatch logs policy to execution role")
1148
+ await anyio.to_thread.run_sync(
1149
+ partial(
1150
+ self._iam_client.put_role_policy,
1151
+ RoleName=self._execution_role_name,
1152
+ PolicyName=self._logs_policy_name,
1153
+ PolicyDocument=self._logs_policy_document,
1154
+ )
1155
+ )
1156
+ advance()
1157
+
1091
1158
  base_job_template["variables"]["properties"]["execution_role_arn"][
1092
1159
  "default"
1093
1160
  ] = response["Role"]["Arn"]
@@ -527,9 +527,15 @@ class Runner:
527
527
  Gracefully shuts down the runner when a SIGTERM is received.
528
528
  """
529
529
  self._logger.info("SIGTERM received, initiating graceful shutdown...")
530
- self.stop()
530
+ if not self.started or self.stopping or self._loop is None:
531
+ sys.exit(0)
531
532
 
532
- sys.exit(0)
533
+ # Signal handlers run on the main thread, which may or may not be the
534
+ # thread driving the runner's loop, so schedule `astop` thread-safely
535
+ # rather than blocking on it. `astop` cancels in-flight flow runs and
536
+ # the polling loops, letting `start` return.
537
+ self.stopping = True
538
+ self.execute_in_background(self.astop)
533
539
 
534
540
  async def start(
535
541
  self, run_once: bool = False, webserver: Optional[bool] = None
@@ -714,9 +720,9 @@ class Runner:
714
720
  6. FlowRunCancellingObserver — exits first
715
721
  """
716
722
  self._logger.debug("Starting runner...")
723
+ self.stopping = False
717
724
  self._tmp_dir.mkdir(parents=True, exist_ok=True)
718
- if not self._loop:
719
- self._loop = asyncio.get_event_loop()
725
+ self._loop = asyncio.get_running_loop()
720
726
 
721
727
  self._client = get_client()
722
728
 
@@ -497,16 +497,27 @@ class GitRepository:
497
497
 
498
498
  await self._checkout_commit(self._commit_sha)
499
499
 
500
- # Otherwise, pull the latest changes from the branch
500
+ # Otherwise, move the branch to the remote tip. `git pull` can't do
501
+ # this on a shallow clone: a new remote commit shares no history with
502
+ # the local one, so the merge fails on every update. Like `git pull`,
503
+ # `reset --keep` leaves local changes alone when nothing changed
504
+ # upstream and refuses when they would be overwritten.
501
505
  else:
502
- cmd += ["pull", "origin"]
506
+ fetch_cmd = cmd + ["fetch", "origin"]
503
507
  if self._branch:
504
- cmd += [self._branch]
505
- if self._include_submodules:
506
- cmd += ["--recurse-submodules"]
507
- cmd += ["--depth", "1"]
508
+ fetch_cmd += [self._branch]
509
+ fetch_cmd += ["--depth", "1"]
508
510
  try:
509
- await run_process(cmd, cwd=self.destination)
511
+ await run_process(fetch_cmd, cwd=self.destination)
512
+ await run_process(
513
+ ["git", "reset", "--keep", "FETCH_HEAD"],
514
+ cwd=self.destination,
515
+ )
516
+ if self._include_submodules:
517
+ await run_process(
518
+ cmd + ["submodule", "update", "--init", "--recursive"],
519
+ cwd=self.destination,
520
+ )
510
521
  self._logger.debug("Successfully pulled latest changes")
511
522
  except subprocess.CalledProcessError as exc:
512
523
  self._logger.error(
@@ -63,25 +63,31 @@ async def background_worker(
63
63
  webserver_only: bool = False,
64
64
  ) -> AsyncGenerator[None, None]:
65
65
  worker_task: asyncio.Task[None] | None = None
66
- async with Worker(docket) as worker:
67
- # Register background task functions
68
- docket.register_collection(
69
- "prefect.server.api.background_workers:task_functions"
70
- )
66
+ try:
67
+ async with Worker(docket) as worker:
68
+ # Register background task functions
69
+ docket.register_collection(
70
+ "prefect.server.api.background_workers:task_functions"
71
+ )
71
72
 
72
- # Register and schedule enabled perpetual services
73
- await register_and_schedule_perpetual_services(
74
- docket, ephemeral=ephemeral, webserver_only=webserver_only
75
- )
73
+ # Register and schedule enabled perpetual services
74
+ await register_and_schedule_perpetual_services(
75
+ docket, ephemeral=ephemeral, webserver_only=webserver_only
76
+ )
76
77
 
77
- try:
78
- worker_task = asyncio.create_task(worker.run_forever())
79
- yield
78
+ try:
79
+ worker_task = asyncio.create_task(worker.run_forever())
80
+ yield
80
81
 
81
- finally:
82
- if worker_task:
83
- worker_task.cancel()
84
- try:
85
- await worker_task
86
- except asyncio.CancelledError:
87
- pass
82
+ finally:
83
+ if worker_task:
84
+ worker_task.cancel()
85
+ finally:
86
+ # Exiting the `Worker` context above signals the worker loop to stop and
87
+ # waits for it, so shutdown completes even if the cancellation was lost
88
+ # (e.g. `asyncio.wait_for` on Python 3.11 can swallow a cancellation).
89
+ if worker_task:
90
+ try:
91
+ await worker_task
92
+ except asyncio.CancelledError:
93
+ pass
@@ -1,13 +1,22 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import base64
4
- from typing import TYPE_CHECKING, Any, Dict, List, Optional
4
+ import contextvars
5
+ from contextlib import asynccontextmanager
6
+ from typing import (
7
+ TYPE_CHECKING,
8
+ Any,
9
+ AsyncIterator,
10
+ Dict,
11
+ List,
12
+ Optional,
13
+ )
5
14
  from urllib.parse import quote
6
15
  from uuid import UUID
7
16
 
8
17
  import httpx
9
18
  import pydantic
10
- from httpx import Response
19
+ from httpx import Request, Response
11
20
  from starlette import status
12
21
  from typing_extensions import Self
13
22
 
@@ -27,6 +36,29 @@ if TYPE_CHECKING:
27
36
  logger: "logging.Logger" = get_logger(__name__)
28
37
 
29
38
 
39
+ _request_scoped_headers: contextvars.ContextVar[Optional[Dict[str, str]]] = (
40
+ contextvars.ContextVar("_request_scoped_headers", default=None)
41
+ )
42
+
43
+
44
+ async def _apply_scoped_headers(request: Request) -> None:
45
+ extras = _request_scoped_headers.get()
46
+ if not extras:
47
+ return
48
+ for name, value in extras.items():
49
+ request.headers[name] = value
50
+
51
+
52
+ @asynccontextmanager
53
+ async def scoped_headers(headers: Dict[str, str]) -> AsyncIterator[None]:
54
+ """Attach headers to every request sent by a shared client in this scope."""
55
+ token = _request_scoped_headers.set(headers)
56
+ try:
57
+ yield
58
+ finally:
59
+ _request_scoped_headers.reset(token)
60
+
61
+
30
62
  class BaseClient:
31
63
  _http_client: PrefectHttpxAsyncClient
32
64
 
@@ -53,6 +85,7 @@ class BaseClient:
53
85
  base_url=f"http://prefect-in-memory{settings.server.api.base_path or '/api'}",
54
86
  enable_csrf_support=settings.server.api.csrf_protection_enabled,
55
87
  raise_on_all_errors=False,
88
+ event_hooks={"request": [_apply_scoped_headers]},
56
89
  )
57
90
 
58
91
  async def __aenter__(self) -> Self:
@@ -119,7 +119,7 @@ async def count_task_runs_by_flow_run(
119
119
  results = await session.execute(query)
120
120
 
121
121
  task_run_counts_by_flow_run = {
122
- flow_run_id: task_run_count for flow_run_id, task_run_count in results.t
122
+ flow_run_id: task_run_count for flow_run_id, task_run_count in results
123
123
  }
124
124
 
125
125
  return {