prefect-client 3.9.1.dev4__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.dev4 → prefect_client-3.9.1.dev5}/PKG-INFO +1 -1
  2. prefect_client-3.9.1.dev5/src/prefect/_build_info.py +5 -0
  3. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/result_records.py +13 -9
  4. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/cache_policies.py +22 -4
  5. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_work_pools/client.py +2 -0
  6. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/sorting.py +2 -0
  7. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/schemas/events.py +7 -0
  8. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/clients.py +35 -2
  9. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/task_engine.py +62 -6
  10. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/filesystem/__init__.py +50 -5
  11. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/templating/__init__.py +9 -3
  12. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/urls.py +14 -1
  13. prefect_client-3.9.1.dev4/src/prefect/_build_info.py +0 -5
  14. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/.gitignore +0 -0
  15. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/LICENSE +0 -0
  16. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/README.md +0 -0
  17. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/hatch_build.py +0 -0
  18. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/pyproject.toml +0 -0
  19. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/.prefectignore +0 -0
  20. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/AGENTS.md +0 -0
  21. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/__init__.py +0 -0
  22. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/__main__.py +0 -0
  23. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/__init__.py +0 -0
  24. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/_launchers.py +0 -0
  25. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/bundles/__init__.py +0 -0
  26. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/bundles/execute.py +0 -0
  27. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/plugins/__init__.py +0 -0
  28. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/plugins/apply.py +0 -0
  29. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  30. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/plugins/manager.py +0 -0
  31. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/plugins/spec.py +0 -0
  32. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/sla/__init__.py +0 -0
  33. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/sla/client.py +0 -0
  34. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_experimental/sla/objects.py +0 -0
  35. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_flow_run_suspension.py +0 -0
  36. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/__init__.py +0 -0
  37. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/_logging.py +0 -0
  38. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/_observation_delivery.py +0 -0
  39. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/__init__.py +0 -0
  40. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  41. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/client.py +0 -0
  42. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/device_id.py +0 -0
  43. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/emit.py +0 -0
  44. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/enabled.py +0 -0
  45. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/events.py +0 -0
  46. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/milestones.py +0 -0
  47. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/notice.py +0 -0
  48. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/analytics/service.py +0 -0
  49. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/ast_utils.py +0 -0
  50. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/attempt_control.py +0 -0
  51. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/buildx.py +0 -0
  52. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/__init__.py +0 -0
  53. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  54. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/backports.py +0 -0
  55. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/blocks.py +0 -0
  56. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  57. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  58. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/migration.py +0 -0
  59. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/compatibility/starlette.py +0 -0
  60. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/__init__.py +0 -0
  61. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/api.py +0 -0
  62. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/calls.py +0 -0
  63. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  64. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  65. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/inspection.py +0 -0
  66. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/primitives.py +0 -0
  67. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/services.py +0 -0
  68. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/threads.py +0 -0
  69. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/concurrency/waiters.py +0 -0
  70. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/control_listener.py +0 -0
  71. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/deprecated.py +0 -0
  72. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/engine.py +0 -0
  73. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/git.py +0 -0
  74. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  75. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/installation.py +0 -0
  76. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/integrations.py +0 -0
  77. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/launchers.py +0 -0
  78. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/lazy.py +0 -0
  79. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/metrics.py +0 -0
  80. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/observability.py +0 -0
  81. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/observers.py +0 -0
  82. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/__init__.py +0 -0
  83. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/apply.py +0 -0
  84. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/collections.py +0 -0
  85. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  86. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/manager.py +0 -0
  87. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/spec.py +0 -0
  88. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/plugins/startup.py +0 -0
  89. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pydantic/__init__.py +0 -0
  90. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pydantic/schemas.py +0 -0
  91. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  92. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  93. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  94. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/pytz.py +0 -0
  95. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/retries.py +0 -0
  96. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schema.py +0 -0
  97. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/__init__.py +0 -0
  98. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/_registry.py +0 -0
  99. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/bases.py +0 -0
  100. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/fields.py +0 -0
  101. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/serializers.py +0 -0
  102. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/schemas/validators.py +0 -0
  103. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  104. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/server_maintenance.py +0 -0
  105. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/states.py +0 -0
  106. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/testing.py +0 -0
  107. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/urls.py +0 -0
  108. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/uuid7.py +0 -0
  109. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/version_checking.py +0 -0
  110. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/versioning.py +0 -0
  111. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/waiters.py +0 -0
  112. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_internal/websockets.py +0 -0
  113. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/__init__.py +0 -0
  114. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/fetcher.py +0 -0
  115. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/generator.py +0 -0
  116. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/models.py +0 -0
  117. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/naming.py +0 -0
  118. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/renderer.py +0 -0
  119. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/schema_converter.py +0 -0
  120. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/templates/__init__.py +0 -0
  121. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  122. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/types.py +0 -0
  123. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_sdk/unions.py +0 -0
  124. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_vendor/croniter/__init__.py +0 -0
  125. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/_vendor/croniter/croniter.py +0 -0
  126. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/agent.py +0 -0
  127. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/analytics/__init__.py +0 -0
  128. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/artifacts.py +0 -0
  129. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/assets/__init__.py +0 -0
  130. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/assets/core.py +0 -0
  131. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/assets/materialize.py +0 -0
  132. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/automations.py +0 -0
  133. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/blocks/AGENTS.md +0 -0
  134. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/blocks/__init__.py +0 -0
  135. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/blocks/abstract.py +0 -0
  136. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/blocks/core.py +0 -0
  137. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/blocks/fields.py +0 -0
  138. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/blocks/notifications.py +0 -0
  139. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/blocks/redis.py +0 -0
  140. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/blocks/system.py +0 -0
  141. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/blocks/webhook.py +0 -0
  142. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/bundles/__init__.py +0 -0
  143. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/bundles/_file_collector.py +0 -0
  144. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/bundles/_ignore_filter.py +0 -0
  145. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/bundles/_path_resolver.py +0 -0
  146. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/bundles/_zip_builder.py +0 -0
  147. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/bundles/_zip_extractor.py +0 -0
  148. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/bundles/execute.py +0 -0
  149. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/AGENTS.md +0 -0
  150. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/__init__.py +0 -0
  151. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/attribution.py +0 -0
  152. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/base.py +0 -0
  153. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/cloud.py +0 -0
  154. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/collections.py +0 -0
  155. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/constants.py +0 -0
  156. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/__init__.py +0 -0
  157. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  158. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  159. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  160. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_automations/client.py +0 -0
  161. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  162. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  163. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  164. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  165. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  166. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  167. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  168. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  169. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  170. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  171. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  172. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_events/client.py +0 -0
  173. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  174. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  175. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  176. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_flows/client.py +0 -0
  177. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  178. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_logs/client.py +0 -0
  179. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  180. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_variables/client.py +0 -0
  181. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  182. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/base.py +0 -0
  183. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/orchestration/routes.py +0 -0
  184. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/__init__.py +0 -0
  185. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/actions.py +0 -0
  186. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/events.py +0 -0
  187. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/filters.py +0 -0
  188. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/objects.py +0 -0
  189. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/responses.py +0 -0
  190. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/schedules.py +0 -0
  191. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/schemas/worker_channel.py +0 -0
  192. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/subscriptions.py +0 -0
  193. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/types/__init__.py +0 -0
  194. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  195. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/client/utilities.py +0 -0
  196. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/AGENTS.md +0 -0
  197. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/__init__.py +0 -0
  198. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/_asyncio.py +0 -0
  199. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/_events.py +0 -0
  200. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/_leases.py +0 -0
  201. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/_sync.py +0 -0
  202. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/asyncio.py +0 -0
  203. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/context.py +0 -0
  204. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/services.py +0 -0
  205. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/sync.py +0 -0
  206. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/__init__.py +0 -0
  207. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  208. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/_events.py +0 -0
  209. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/asyncio.py +0 -0
  210. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/context.py +0 -0
  211. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/services.py +0 -0
  212. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/concurrency/v1/sync.py +0 -0
  213. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/context.py +0 -0
  214. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/AGENTS.md +0 -0
  215. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/__init__.py +0 -0
  216. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/base.py +0 -0
  217. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/deployments.py +0 -0
  218. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/flow_runs.py +0 -0
  219. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/runner.py +0 -0
  220. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/schedules.py +0 -0
  221. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/steps/__init__.py +0 -0
  222. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/steps/core.py +0 -0
  223. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/steps/pull.py +0 -0
  224. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/deployments/steps/utility.py +0 -0
  225. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/docker/__init__.py +0 -0
  226. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/docker/_buildx.py +0 -0
  227. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/docker/docker_image.py +0 -0
  228. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/engine.py +0 -0
  229. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/AGENTS.md +0 -0
  230. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/__init__.py +0 -0
  231. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/actions.py +0 -0
  232. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/clients.py +0 -0
  233. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/filters.py +0 -0
  234. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/related.py +0 -0
  235. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/schemas/__init__.py +0 -0
  236. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/schemas/automations.py +0 -0
  237. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  238. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/schemas/labelling.py +0 -0
  239. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/subscribers.py +0 -0
  240. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/utilities.py +0 -0
  241. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/events/worker.py +0 -0
  242. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/exceptions.py +0 -0
  243. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/filesystems.py +0 -0
  244. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/flow_engine.py +0 -0
  245. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/flow_runs.py +0 -0
  246. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/flows.py +0 -0
  247. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/futures.py +0 -0
  248. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/__init__.py +0 -0
  249. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/base.py +0 -0
  250. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  251. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  252. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  253. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  254. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  255. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  256. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/input/__init__.py +0 -0
  257. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/input/actions.py +0 -0
  258. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/input/run_input.py +0 -0
  259. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/locking/__init__.py +0 -0
  260. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/locking/_filelock.py +0 -0
  261. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/locking/filesystem.py +0 -0
  262. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/locking/memory.py +0 -0
  263. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/locking/protocol.py +0 -0
  264. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/logging/AGENTS.md +0 -0
  265. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/logging/__init__.py +0 -0
  266. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/logging/clients.py +0 -0
  267. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/logging/configuration.py +0 -0
  268. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/logging/filters.py +0 -0
  269. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/logging/formatters.py +0 -0
  270. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/logging/handlers.py +0 -0
  271. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/logging/highlighters.py +0 -0
  272. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/logging/loggers.py +0 -0
  273. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/logging/logging.yml +0 -0
  274. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/main.py +0 -0
  275. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/plugins.py +0 -0
  276. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/py.typed +0 -0
  277. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/results.py +0 -0
  278. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/AGENTS.md +0 -0
  279. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/__init__.py +0 -0
  280. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_cancel_finalizer.py +0 -0
  281. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_cancellation_manager.py +0 -0
  282. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_control_channel.py +0 -0
  283. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_deployment_registry.py +0 -0
  284. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_event_emitter.py +0 -0
  285. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_flow_resolver.py +0 -0
  286. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_flow_run_executor.py +0 -0
  287. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_hook_runner.py +0 -0
  288. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_limit_manager.py +0 -0
  289. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_process_manager.py +0 -0
  290. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  291. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_starter_bundle.py +0 -0
  292. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_starter_direct.py +0 -0
  293. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_starter_engine.py +0 -0
  294. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_state_proposer.py +0 -0
  295. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_uv_command.py +0 -0
  296. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_hook_runner.py +0 -0
  297. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_resolver.py +0 -0
  298. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_runtime.py +0 -0
  299. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
  300. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_starter.py +0 -0
  301. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/_workspace_supervisor.py +0 -0
  302. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/runner.py +0 -0
  303. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/server.py +0 -0
  304. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runner/storage.py +0 -0
  305. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runtime/__init__.py +0 -0
  306. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runtime/deployment.py +0 -0
  307. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runtime/flow_run.py +0 -0
  308. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/runtime/task_run.py +0 -0
  309. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/schedules.py +0 -0
  310. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/serializers.py +0 -0
  311. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/__init__.py +0 -0
  312. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/_ui_static.py +0 -0
  313. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/admin.py +0 -0
  314. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/artifacts.py +0 -0
  315. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/automations.py +0 -0
  316. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/background_workers.py +0 -0
  317. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/block_capabilities.py +0 -0
  318. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/block_documents.py +0 -0
  319. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/block_schemas.py +0 -0
  320. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/block_types.py +0 -0
  321. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/collections.py +0 -0
  322. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  323. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/concurrency_limits.py +0 -0
  324. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  325. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/csrf_token.py +0 -0
  326. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/dependencies.py +0 -0
  327. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/deployments.py +0 -0
  328. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/events.py +0 -0
  329. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/flow_run_states.py +0 -0
  330. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/flow_runs.py +0 -0
  331. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/flows.py +0 -0
  332. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/logs.py +0 -0
  333. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/middleware.py +0 -0
  334. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/observed_states.py +0 -0
  335. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/root.py +0 -0
  336. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/run_history.py +0 -0
  337. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/saved_searches.py +0 -0
  338. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/server.py +0 -0
  339. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  340. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/task_run_states.py +0 -0
  341. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/task_runs.py +0 -0
  342. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/task_workers.py +0 -0
  343. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/templates.py +0 -0
  344. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/ui/__init__.py +0 -0
  345. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/ui/flow_runs.py +0 -0
  346. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/ui/flows.py +0 -0
  347. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/ui/schemas.py +0 -0
  348. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/ui/task_runs.py +0 -0
  349. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/validation.py +0 -0
  350. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/variables.py +0 -0
  351. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/work_queues.py +0 -0
  352. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/server/api/workers.py +0 -0
  353. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/AGENTS.md +0 -0
  354. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/__init__.py +0 -0
  355. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/_types.py +0 -0
  356. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/base.py +0 -0
  357. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/constants.py +0 -0
  358. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/context.py +0 -0
  359. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/legacy.py +0 -0
  360. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/__init__.py +0 -0
  361. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/_defaults.py +0 -0
  362. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/api.py +0 -0
  363. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/cli.py +0 -0
  364. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/client.py +0 -0
  365. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/cloud.py +0 -0
  366. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/deployments.py +0 -0
  367. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/events.py +0 -0
  368. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/experiments.py +0 -0
  369. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/flows.py +0 -0
  370. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/internal.py +0 -0
  371. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/logging.py +0 -0
  372. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/plugins.py +0 -0
  373. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/results.py +0 -0
  374. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/root.py +0 -0
  375. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/runner.py +0 -0
  376. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/__init__.py +0 -0
  377. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/api.py +0 -0
  378. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/concurrency.py +0 -0
  379. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/database.py +0 -0
  380. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/deployments.py +0 -0
  381. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/docket.py +0 -0
  382. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/ephemeral.py +0 -0
  383. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/events.py +0 -0
  384. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  385. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/logs.py +0 -0
  386. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/root.py +0 -0
  387. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/services.py +0 -0
  388. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/tasks.py +0 -0
  389. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/ui.py +0 -0
  390. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/server/worker_channel.py +0 -0
  391. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/tasks.py +0 -0
  392. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/telemetry.py +0 -0
  393. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/testing.py +0 -0
  394. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/models/worker.py +0 -0
  395. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/profiles.py +0 -0
  396. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/profiles.toml +0 -0
  397. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/settings/sources.py +0 -0
  398. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/states.py +0 -0
  399. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/task_runners.py +0 -0
  400. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/task_runs.py +0 -0
  401. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/task_worker.py +0 -0
  402. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/tasks.py +0 -0
  403. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/telemetry/__init__.py +0 -0
  404. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/telemetry/run_telemetry.py +0 -0
  405. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/transactions.py +0 -0
  406. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/types/__init__.py +0 -0
  407. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/types/_concurrency.py +0 -0
  408. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/types/_datetime.py +0 -0
  409. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/types/_datetime_deprecations.py +0 -0
  410. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/types/entrypoint.py +0 -0
  411. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/types/names.py +0 -0
  412. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/AGENTS.md +0 -0
  413. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/__init__.py +0 -0
  414. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/annotations.py +0 -0
  415. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  416. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  417. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/callables/AGENTS.md +0 -0
  418. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/callables/__init__.py +0 -0
  419. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/collections.py +0 -0
  420. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/compat.py +0 -0
  421. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/context.py +0 -0
  422. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/dispatch.py +0 -0
  423. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/dockerutils.py +0 -0
  424. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/engine/AGENTS.md +0 -0
  425. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/engine/__init__.py +0 -0
  426. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  427. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/generics.py +0 -0
  428. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/hashing.py +0 -0
  429. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/importtools.py +0 -0
  430. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/math.py +0 -0
  431. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/names.py +0 -0
  432. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  433. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/processutils/__init__.py +0 -0
  434. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/pydantic.py +0 -0
  435. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/render_swagger.py +0 -0
  436. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  437. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  438. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  439. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/schema_tools/validation.py +0 -0
  440. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/services.py +0 -0
  441. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/slugify.py +0 -0
  442. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/templating/AGENTS.md +0 -0
  443. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/text.py +0 -0
  444. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/timeout.py +0 -0
  445. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/utilities/visualization.py +0 -0
  446. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/variables.py +0 -0
  447. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/AGENTS.md +0 -0
  448. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/__init__.py +0 -0
  449. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/_cleanup.py +0 -0
  450. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/_cleanup_handlers.py +0 -0
  451. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  452. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  453. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/_worker_channel/_state.py +0 -0
  454. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  455. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  456. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/base.py +0 -0
  457. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/block.py +0 -0
  458. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/cloud.py +0 -0
  459. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/process.py +0 -0
  460. {prefect_client-3.9.1.dev4 → prefect_client-3.9.1.dev5}/src/prefect/workers/server.py +0 -0
  461. {prefect_client-3.9.1.dev4 → 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.dev4
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
@@ -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
@@ -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):
@@ -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
@@ -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:
@@ -631,6 +631,7 @@ class SyncTaskRunEngine(BaseTaskRunEngine[P, R]):
631
631
  # which case we should retry the task if it has retries left.
632
632
  if isinstance(result, State) and result.is_failed():
633
633
  if self.handle_retry(result):
634
+ transaction.write_on_commit = False
634
635
  return None
635
636
 
636
637
  if self.task.cache_expiration is not None:
@@ -645,22 +646,49 @@ class SyncTaskRunEngine(BaseTaskRunEngine[P, R]):
645
646
  expiration=expiration,
646
647
  )
647
648
 
649
+ if terminal_state.is_failed():
650
+ if (
651
+ isinstance(terminal_state.data, ResultRecord)
652
+ and not terminal_state.data.is_persisted
653
+ ):
654
+ # Match raised failures: retain the result without populating the cache key.
655
+ result_store = get_result_store()
656
+ failure_record = result_store.create_result_record(
657
+ terminal_state.data.result, key=str(uuid4()), expiration=expiration
658
+ )
659
+ terminal_state.data = failure_record
660
+ if transaction.write_on_commit:
661
+ try:
662
+ result_store.persist_result_record(failure_record)
663
+ except Exception as exc:
664
+ self.logger.warning(
665
+ "Failed to write result: %s Execution will continue, but the result has not been written",
666
+ exc,
667
+ )
668
+ transaction.write_on_commit = False
669
+
648
670
  # Avoid logging when running this rollback hook since it is not user-defined
649
671
  handle_rollback = partial(self.handle_rollback)
650
672
  handle_rollback.log_on_run = False
651
673
 
652
674
  transaction.stage(
653
675
  terminal_state.data,
654
- on_rollback_hooks=[handle_rollback] + self.task.on_rollback_hooks,
676
+ on_rollback_hooks=([] if terminal_state.is_failed() else [handle_rollback])
677
+ + self.task.on_rollback_hooks,
655
678
  on_commit_hooks=self.task.on_commit_hooks,
656
679
  )
657
- if transaction.is_committed():
680
+ if terminal_state.is_failed():
681
+ transaction.rollback()
682
+ elif transaction.is_committed():
658
683
  terminal_state.name = "Cached"
659
684
 
660
685
  self.set_state(terminal_state)
661
686
  self._return_value = result
662
687
 
663
- self._telemetry.end_span_on_success()
688
+ if terminal_state.is_failed():
689
+ self._telemetry.end_span_on_failure(terminal_state.message)
690
+ else:
691
+ self._telemetry.end_span_on_success()
664
692
 
665
693
  def handle_retry(self, exc_or_state: Exception | State[R]) -> bool:
666
694
  """Handle any task run retries.
@@ -1262,6 +1290,7 @@ class AsyncTaskRunEngine(BaseTaskRunEngine[P, R]):
1262
1290
  ) -> Union[ResultRecord[R], None, Coroutine[Any, Any, R], R]:
1263
1291
  if isinstance(result, State) and result.is_failed():
1264
1292
  if await self.handle_retry(result):
1293
+ transaction.write_on_commit = False
1265
1294
  return None
1266
1295
 
1267
1296
  if self.task.cache_expiration is not None:
@@ -1276,21 +1305,48 @@ class AsyncTaskRunEngine(BaseTaskRunEngine[P, R]):
1276
1305
  expiration=expiration,
1277
1306
  )
1278
1307
 
1308
+ if terminal_state.is_failed():
1309
+ if (
1310
+ isinstance(terminal_state.data, ResultRecord)
1311
+ and not terminal_state.data.is_persisted
1312
+ ):
1313
+ # Match raised failures: retain the result without populating the cache key.
1314
+ result_store = get_result_store()
1315
+ failure_record = result_store.create_result_record(
1316
+ terminal_state.data.result, key=str(uuid4()), expiration=expiration
1317
+ )
1318
+ terminal_state.data = failure_record
1319
+ if transaction.write_on_commit:
1320
+ try:
1321
+ await result_store.apersist_result_record(failure_record)
1322
+ except Exception as exc:
1323
+ self.logger.warning(
1324
+ "Failed to write result: %s Execution will continue, but the result has not been written",
1325
+ exc,
1326
+ )
1327
+ transaction.write_on_commit = False
1328
+
1279
1329
  # Avoid logging when running this rollback hook since it is not user-defined
1280
1330
  handle_rollback = partial(self.handle_rollback)
1281
1331
  handle_rollback.log_on_run = False
1282
1332
 
1283
1333
  transaction.stage(
1284
1334
  terminal_state.data,
1285
- on_rollback_hooks=[handle_rollback] + self.task.on_rollback_hooks,
1335
+ on_rollback_hooks=([] if terminal_state.is_failed() else [handle_rollback])
1336
+ + self.task.on_rollback_hooks,
1286
1337
  on_commit_hooks=self.task.on_commit_hooks,
1287
1338
  )
1288
- if transaction.is_committed():
1339
+ if terminal_state.is_failed():
1340
+ await transaction.rollback()
1341
+ elif transaction.is_committed():
1289
1342
  terminal_state.name = "Cached"
1290
1343
 
1291
1344
  await self.set_state(terminal_state)
1292
1345
  self._return_value = result
1293
- self._telemetry.end_span_on_success()
1346
+ if terminal_state.is_failed():
1347
+ self._telemetry.end_span_on_failure(terminal_state.message)
1348
+ else:
1349
+ self._telemetry.end_span_on_success()
1294
1350
 
1295
1351
  return result
1296
1352
 
@@ -34,6 +34,30 @@ def create_default_ignore_file(path: str) -> bool:
34
34
  return True
35
35
 
36
36
 
37
+ def _walk_tree(
38
+ root: str,
39
+ spec: pathspec.GitIgnoreSpec,
40
+ include_dirs: bool,
41
+ follow_links: Optional[bool] = None,
42
+ ) -> tuple[set[str], set[str]]:
43
+ """Return `(all_files, ignored_files)` for `root` under a single traversal mode.
44
+
45
+ Both sets must come from the same mode, or subtracting one from the other
46
+ compares two different views of the tree.
47
+ """
48
+ ignored_files = {
49
+ p.path for p in spec.match_tree_entries(root, follow_links=follow_links)
50
+ }
51
+ if include_dirs:
52
+ all_files = {
53
+ p.path
54
+ for p in pathspec.util.iter_tree_entries(root, follow_links=follow_links)
55
+ }
56
+ else:
57
+ all_files = set(pathspec.util.iter_tree_files(root, follow_links=follow_links))
58
+ return all_files, ignored_files
59
+
60
+
37
61
  def filter_files(
38
62
  root: str = ".",
39
63
  ignore_patterns: Optional[Iterable[AnyStr]] = None,
@@ -53,11 +77,32 @@ def filter_files(
53
77
  included so directory traversal can reach those files.
54
78
  """
55
79
  spec = pathspec.GitIgnoreSpec.from_lines(ignore_patterns or [])
56
- ignored_files = {p.path for p in spec.match_tree_entries(root)}
57
- if include_dirs:
58
- all_files = {p.path for p in pathspec.util.iter_tree_entries(root)}
59
- else:
60
- all_files = set(pathspec.util.iter_tree_files(root))
80
+ try:
81
+ all_files, ignored_files = _walk_tree(root, spec, include_dirs)
82
+ except pathspec.util.RecursionError as exc:
83
+ # A directory symlink pointing at one of its own ancestors makes the
84
+ # default link-following walk revisit the same real directory, and
85
+ # pathspec raises rather than returning the tree. Retry once without
86
+ # following links: symlinks are then listed as entries but not
87
+ # descended into, which is what `git` itself does with the .gitignore
88
+ # specification this function implements. Only this walk changes --
89
+ # a tree with no cycle still follows links as before.
90
+ # Imported here rather than at module scope: this is a cold path, and
91
+ # prefect.logging imports back into prefect.utilities. get_logger
92
+ # rather than logging.getLogger because it installs
93
+ # ObfuscateApiKeyFilter, and these paths come from the user's tree.
94
+ from prefect.logging.loggers import get_logger
95
+
96
+ get_logger("utilities.filesystem").warning(
97
+ "Not following symlinks while walking %r: %r and %r both resolve to %r.",
98
+ root,
99
+ exc.first_path or ".",
100
+ exc.second_path,
101
+ exc.real_path,
102
+ )
103
+ all_files, ignored_files = _walk_tree(
104
+ root, spec, include_dirs, follow_links=False
105
+ )
61
106
  included_files = all_files - ignored_files
62
107
 
63
108
  # Ensure parent directories of included files are also included,
@@ -201,6 +201,7 @@ def apply_values(
201
201
  )
202
202
  return value
203
203
  else:
204
+ replacements: dict[str, str] = {}
204
205
  for full_match, name, placeholder_type in placeholders:
205
206
  if placeholder_type is PlaceholderType.STANDARD:
206
207
  value = get_from_dict(values, name, NotSet)
@@ -217,11 +218,16 @@ def apply_values(
217
218
  "the placeholder is spelled correctly and that the corresponding value is provided.",
218
219
  )
219
220
  if remove_notset:
220
- template = template.replace(full_match, "")
221
+ replacements[full_match] = ""
221
222
  else:
222
- template = template.replace(full_match, str(value))
223
+ replacements[full_match] = str(value)
223
224
 
224
- return template
225
+ # Substitute in a single pass over the original template so that
226
+ # inserted values are never themselves treated as placeholders.
227
+ return PLACEHOLDER_CAPTURE_REGEX.sub(
228
+ lambda match: replacements.get(match.group(1), match.group(1)),
229
+ template,
230
+ )
225
231
  elif isinstance(template, dict):
226
232
  updated_template: dict[str, Any] = {}
227
233
  for key, value in template.items():
@@ -345,6 +345,11 @@ def convert_class_to_name(obj: Any) -> str:
345
345
  return "".join(["-" + i.lower() if i.isupper() else i for i in name]).lstrip("-")
346
346
 
347
347
 
348
+ def _quote_path_segment(value: Any) -> str:
349
+ """Percent-encode a value so it is interpolated as a single URL path segment."""
350
+ return urllib.parse.quote(str(value), safe="")
351
+
352
+
348
353
  def url_for(
349
354
  obj: Union[
350
355
  "PrefectFuture[Any]",
@@ -473,6 +478,8 @@ def url_for(
473
478
  )
474
479
  assert url_format is not None
475
480
 
481
+ obj_id = _quote_path_segment(obj_id)
482
+
476
483
  # Use duck-typing to handle both client-side and server-side ReceivedEvent
477
484
  if name == "received-event" and hasattr(obj, "occurred"):
478
485
  # Cast to ReceivedEvent for type checking - we've verified it has the
@@ -493,7 +500,13 @@ def url_for(
493
500
  f"Unable to generate URL for {name} because the following keys are missing: {', '.join(obj_keys)}"
494
501
  )
495
502
 
496
- url = url_format.format(obj_id=obj_id, **additional_format_kwargs)
503
+ url = url_format.format(
504
+ obj_id=obj_id,
505
+ **{
506
+ key: _quote_path_segment(additional_format_kwargs[key])
507
+ for key in obj_keys
508
+ },
509
+ )
497
510
 
498
511
  if not base_url.endswith("/"):
499
512
  base_url += "/"
@@ -1,5 +0,0 @@
1
- # Generated by versioningit
2
- __version__ = "3.9.1.dev4"
3
- __build_date__ = "2026-10-25 08:17:20.425573+00:00"
4
- __git_commit__ = "7257ae44f0246277f4f5083ef3bb98ed7ef3fa61"
5
- __dirty__ = False