prefect-client 3.8.5.dev6__tar.gz → 3.8.6__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 (458) hide show
  1. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/PKG-INFO +1 -1
  2. prefect_client-3.8.6/src/prefect/_build_info.py +5 -0
  3. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/core.py +36 -18
  4. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/attribution.py +7 -1
  5. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/flow_engine.py +26 -6
  6. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/container_instance.py +7 -1
  7. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/locking/_filelock.py +7 -5
  8. prefect_client-3.8.6/src/prefect/server/api/run_history.py +155 -0
  9. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/root.py +13 -0
  10. prefect_client-3.8.5.dev6/src/prefect/_build_info.py +0 -5
  11. prefect_client-3.8.5.dev6/src/prefect/server/api/run_history.py +0 -170
  12. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/.gitignore +0 -0
  13. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/LICENSE +0 -0
  14. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/README.md +0 -0
  15. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/hatch_build.py +0 -0
  16. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/pyproject.toml +0 -0
  17. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/.prefectignore +0 -0
  18. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/AGENTS.md +0 -0
  19. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/__init__.py +0 -0
  20. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/__main__.py +0 -0
  21. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/__init__.py +0 -0
  22. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/_launchers.py +0 -0
  23. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/bundles/__init__.py +0 -0
  24. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/bundles/execute.py +0 -0
  25. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/__init__.py +0 -0
  26. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/apply.py +0 -0
  27. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  28. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/manager.py +0 -0
  29. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/plugins/spec.py +0 -0
  30. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/sla/__init__.py +0 -0
  31. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/sla/client.py +0 -0
  32. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_experimental/sla/objects.py +0 -0
  33. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_flow_run_suspension.py +0 -0
  34. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/__init__.py +0 -0
  35. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/_logging.py +0 -0
  36. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/__init__.py +0 -0
  37. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  38. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/client.py +0 -0
  39. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/device_id.py +0 -0
  40. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/emit.py +0 -0
  41. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/enabled.py +0 -0
  42. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/events.py +0 -0
  43. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/milestones.py +0 -0
  44. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/notice.py +0 -0
  45. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/analytics/service.py +0 -0
  46. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/ast_utils.py +0 -0
  47. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/attempt_control.py +0 -0
  48. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/buildx.py +0 -0
  49. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/__init__.py +0 -0
  50. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  51. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/backports.py +0 -0
  52. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/blocks.py +0 -0
  53. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  54. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  55. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/migration.py +0 -0
  56. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/compatibility/starlette.py +0 -0
  57. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/__init__.py +0 -0
  58. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/api.py +0 -0
  59. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/calls.py +0 -0
  60. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  61. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  62. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/inspection.py +0 -0
  63. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/primitives.py +0 -0
  64. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/services.py +0 -0
  65. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/threads.py +0 -0
  66. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/concurrency/waiters.py +0 -0
  67. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/control_listener.py +0 -0
  68. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/deprecated.py +0 -0
  69. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/engine.py +0 -0
  70. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/git.py +0 -0
  71. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  72. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/installation.py +0 -0
  73. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/integrations.py +0 -0
  74. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/launchers.py +0 -0
  75. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/lazy.py +0 -0
  76. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/metrics.py +0 -0
  77. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/observability.py +0 -0
  78. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/observers.py +0 -0
  79. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/__init__.py +0 -0
  80. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/apply.py +0 -0
  81. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/collections.py +0 -0
  82. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  83. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/manager.py +0 -0
  84. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/spec.py +0 -0
  85. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/plugins/startup.py +0 -0
  86. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pydantic/__init__.py +0 -0
  87. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pydantic/schemas.py +0 -0
  88. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  89. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  90. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  91. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/pytz.py +0 -0
  92. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/result_records.py +0 -0
  93. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/retries.py +0 -0
  94. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schema.py +0 -0
  95. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/__init__.py +0 -0
  96. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/_registry.py +0 -0
  97. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/bases.py +0 -0
  98. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/fields.py +0 -0
  99. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/serializers.py +0 -0
  100. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/schemas/validators.py +0 -0
  101. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  102. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/states.py +0 -0
  103. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/testing.py +0 -0
  104. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/urls.py +0 -0
  105. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/uuid7.py +0 -0
  106. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/version_checking.py +0 -0
  107. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/versioning.py +0 -0
  108. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/waiters.py +0 -0
  109. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_internal/websockets.py +0 -0
  110. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/__init__.py +0 -0
  111. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/fetcher.py +0 -0
  112. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/generator.py +0 -0
  113. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/models.py +0 -0
  114. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/naming.py +0 -0
  115. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/renderer.py +0 -0
  116. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/schema_converter.py +0 -0
  117. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/templates/__init__.py +0 -0
  118. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  119. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/types.py +0 -0
  120. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_sdk/unions.py +0 -0
  121. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_vendor/croniter/__init__.py +0 -0
  122. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/_vendor/croniter/croniter.py +0 -0
  123. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/agent.py +0 -0
  124. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/analytics/__init__.py +0 -0
  125. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/artifacts.py +0 -0
  126. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/assets/__init__.py +0 -0
  127. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/assets/core.py +0 -0
  128. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/assets/materialize.py +0 -0
  129. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/automations.py +0 -0
  130. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/AGENTS.md +0 -0
  131. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/__init__.py +0 -0
  132. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/abstract.py +0 -0
  133. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/fields.py +0 -0
  134. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/notifications.py +0 -0
  135. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/redis.py +0 -0
  136. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/system.py +0 -0
  137. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/blocks/webhook.py +0 -0
  138. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/__init__.py +0 -0
  139. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/_file_collector.py +0 -0
  140. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/_ignore_filter.py +0 -0
  141. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/_path_resolver.py +0 -0
  142. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/_zip_builder.py +0 -0
  143. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/_zip_extractor.py +0 -0
  144. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/bundles/execute.py +0 -0
  145. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/cache_policies.py +0 -0
  146. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/AGENTS.md +0 -0
  147. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/__init__.py +0 -0
  148. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/base.py +0 -0
  149. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/cloud.py +0 -0
  150. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/collections.py +0 -0
  151. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/constants.py +0 -0
  152. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/__init__.py +0 -0
  153. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  154. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  155. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  156. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_automations/client.py +0 -0
  157. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  158. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  159. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  160. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  161. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  162. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  163. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  164. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  165. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  166. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  167. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  168. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_events/client.py +0 -0
  169. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  170. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  171. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  172. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_flows/client.py +0 -0
  173. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  174. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_logs/client.py +0 -0
  175. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  176. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_variables/client.py +0 -0
  177. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  178. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  179. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/base.py +0 -0
  180. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/orchestration/routes.py +0 -0
  181. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/__init__.py +0 -0
  182. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/actions.py +0 -0
  183. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/events.py +0 -0
  184. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/filters.py +0 -0
  185. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/objects.py +0 -0
  186. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/responses.py +0 -0
  187. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/schedules.py +0 -0
  188. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/sorting.py +0 -0
  189. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/schemas/worker_channel.py +0 -0
  190. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/subscriptions.py +0 -0
  191. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/types/__init__.py +0 -0
  192. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  193. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/client/utilities.py +0 -0
  194. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/AGENTS.md +0 -0
  195. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/__init__.py +0 -0
  196. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/_asyncio.py +0 -0
  197. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/_events.py +0 -0
  198. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/_leases.py +0 -0
  199. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/_sync.py +0 -0
  200. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/asyncio.py +0 -0
  201. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/context.py +0 -0
  202. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/services.py +0 -0
  203. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/sync.py +0 -0
  204. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/__init__.py +0 -0
  205. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  206. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/_events.py +0 -0
  207. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/asyncio.py +0 -0
  208. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/context.py +0 -0
  209. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/services.py +0 -0
  210. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/concurrency/v1/sync.py +0 -0
  211. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/context.py +0 -0
  212. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/AGENTS.md +0 -0
  213. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/__init__.py +0 -0
  214. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/base.py +0 -0
  215. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/deployments.py +0 -0
  216. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/flow_runs.py +0 -0
  217. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/runner.py +0 -0
  218. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/schedules.py +0 -0
  219. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/steps/__init__.py +0 -0
  220. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/steps/core.py +0 -0
  221. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/steps/pull.py +0 -0
  222. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/deployments/steps/utility.py +0 -0
  223. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/docker/__init__.py +0 -0
  224. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/docker/_buildx.py +0 -0
  225. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/docker/docker_image.py +0 -0
  226. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/engine.py +0 -0
  227. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/AGENTS.md +0 -0
  228. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/__init__.py +0 -0
  229. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/actions.py +0 -0
  230. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/clients.py +0 -0
  231. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/filters.py +0 -0
  232. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/related.py +0 -0
  233. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/schemas/__init__.py +0 -0
  234. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/schemas/automations.py +0 -0
  235. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  236. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/schemas/events.py +0 -0
  237. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/schemas/labelling.py +0 -0
  238. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/subscribers.py +0 -0
  239. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/utilities.py +0 -0
  240. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/events/worker.py +0 -0
  241. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/exceptions.py +0 -0
  242. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/filesystems.py +0 -0
  243. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/flow_runs.py +0 -0
  244. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/flows.py +0 -0
  245. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/futures.py +0 -0
  246. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/__init__.py +0 -0
  247. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/base.py +0 -0
  248. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  249. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  250. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  251. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  252. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  253. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/input/__init__.py +0 -0
  254. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/input/actions.py +0 -0
  255. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/input/run_input.py +0 -0
  256. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/locking/__init__.py +0 -0
  257. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/locking/filesystem.py +0 -0
  258. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/locking/memory.py +0 -0
  259. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/locking/protocol.py +0 -0
  260. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/AGENTS.md +0 -0
  261. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/__init__.py +0 -0
  262. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/clients.py +0 -0
  263. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/configuration.py +0 -0
  264. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/filters.py +0 -0
  265. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/formatters.py +0 -0
  266. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/handlers.py +0 -0
  267. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/highlighters.py +0 -0
  268. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/loggers.py +0 -0
  269. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/logging/logging.yml +0 -0
  270. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/main.py +0 -0
  271. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/plugins.py +0 -0
  272. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/py.typed +0 -0
  273. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/results.py +0 -0
  274. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/AGENTS.md +0 -0
  275. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/__init__.py +0 -0
  276. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_cancel_finalizer.py +0 -0
  277. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_cancellation_manager.py +0 -0
  278. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_control_channel.py +0 -0
  279. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_deployment_registry.py +0 -0
  280. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_event_emitter.py +0 -0
  281. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_flow_resolver.py +0 -0
  282. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_flow_run_executor.py +0 -0
  283. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_hook_runner.py +0 -0
  284. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_limit_manager.py +0 -0
  285. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_process_manager.py +0 -0
  286. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  287. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_starter_bundle.py +0 -0
  288. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_starter_direct.py +0 -0
  289. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_starter_engine.py +0 -0
  290. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_state_proposer.py +0 -0
  291. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_uv_command.py +0 -0
  292. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_hook_runner.py +0 -0
  293. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_resolver.py +0 -0
  294. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_runtime.py +0 -0
  295. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_runtime_bootstrap.py +0 -0
  296. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_starter.py +0 -0
  297. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/_workspace_supervisor.py +0 -0
  298. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/runner.py +0 -0
  299. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/server.py +0 -0
  300. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runner/storage.py +0 -0
  301. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runtime/__init__.py +0 -0
  302. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runtime/deployment.py +0 -0
  303. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runtime/flow_run.py +0 -0
  304. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/runtime/task_run.py +0 -0
  305. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/schedules.py +0 -0
  306. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/serializers.py +0 -0
  307. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/__init__.py +0 -0
  308. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/_ui_static.py +0 -0
  309. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/admin.py +0 -0
  310. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/artifacts.py +0 -0
  311. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/automations.py +0 -0
  312. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/background_workers.py +0 -0
  313. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/block_capabilities.py +0 -0
  314. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/block_documents.py +0 -0
  315. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/block_schemas.py +0 -0
  316. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/block_types.py +0 -0
  317. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/clients.py +0 -0
  318. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/collections.py +0 -0
  319. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  320. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/concurrency_limits.py +0 -0
  321. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  322. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/csrf_token.py +0 -0
  323. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/dependencies.py +0 -0
  324. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/deployments.py +0 -0
  325. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/events.py +0 -0
  326. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/flow_run_states.py +0 -0
  327. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/flow_runs.py +0 -0
  328. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/flows.py +0 -0
  329. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/logs.py +0 -0
  330. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/middleware.py +0 -0
  331. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/root.py +0 -0
  332. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/saved_searches.py +0 -0
  333. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/server.py +0 -0
  334. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  335. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/task_run_states.py +0 -0
  336. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/task_runs.py +0 -0
  337. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/task_workers.py +0 -0
  338. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/templates.py +0 -0
  339. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/ui/__init__.py +0 -0
  340. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/ui/flow_runs.py +0 -0
  341. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/ui/flows.py +0 -0
  342. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/ui/schemas.py +0 -0
  343. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/ui/task_runs.py +0 -0
  344. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/validation.py +0 -0
  345. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/variables.py +0 -0
  346. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/work_queues.py +0 -0
  347. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/server/api/workers.py +0 -0
  348. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/AGENTS.md +0 -0
  349. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/__init__.py +0 -0
  350. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/_types.py +0 -0
  351. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/base.py +0 -0
  352. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/constants.py +0 -0
  353. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/context.py +0 -0
  354. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/legacy.py +0 -0
  355. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/__init__.py +0 -0
  356. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/_defaults.py +0 -0
  357. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/api.py +0 -0
  358. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/cli.py +0 -0
  359. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/client.py +0 -0
  360. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/cloud.py +0 -0
  361. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/deployments.py +0 -0
  362. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/events.py +0 -0
  363. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/experiments.py +0 -0
  364. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/flows.py +0 -0
  365. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/internal.py +0 -0
  366. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/logging.py +0 -0
  367. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/plugins.py +0 -0
  368. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/results.py +0 -0
  369. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/runner.py +0 -0
  370. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/__init__.py +0 -0
  371. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/api.py +0 -0
  372. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/concurrency.py +0 -0
  373. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/database.py +0 -0
  374. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/deployments.py +0 -0
  375. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/docket.py +0 -0
  376. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/ephemeral.py +0 -0
  377. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/events.py +0 -0
  378. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  379. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/logs.py +0 -0
  380. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/root.py +0 -0
  381. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/services.py +0 -0
  382. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/tasks.py +0 -0
  383. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/ui.py +0 -0
  384. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/server/worker_channel.py +0 -0
  385. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/tasks.py +0 -0
  386. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/telemetry.py +0 -0
  387. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/testing.py +0 -0
  388. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/models/worker.py +0 -0
  389. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/profiles.py +0 -0
  390. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/profiles.toml +0 -0
  391. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/settings/sources.py +0 -0
  392. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/states.py +0 -0
  393. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/task_engine.py +0 -0
  394. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/task_runners.py +0 -0
  395. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/task_runs.py +0 -0
  396. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/task_worker.py +0 -0
  397. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/tasks.py +0 -0
  398. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/telemetry/__init__.py +0 -0
  399. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/telemetry/run_telemetry.py +0 -0
  400. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/transactions.py +0 -0
  401. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/types/__init__.py +0 -0
  402. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/types/_concurrency.py +0 -0
  403. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/types/_datetime.py +0 -0
  404. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/types/entrypoint.py +0 -0
  405. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/types/names.py +0 -0
  406. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/AGENTS.md +0 -0
  407. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/__init__.py +0 -0
  408. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/annotations.py +0 -0
  409. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  410. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  411. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/callables/AGENTS.md +0 -0
  412. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/callables/__init__.py +0 -0
  413. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/collections.py +0 -0
  414. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/compat.py +0 -0
  415. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/context.py +0 -0
  416. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/dispatch.py +0 -0
  417. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/dockerutils.py +0 -0
  418. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/engine/AGENTS.md +0 -0
  419. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/engine/__init__.py +0 -0
  420. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  421. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/filesystem/__init__.py +0 -0
  422. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/generics.py +0 -0
  423. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/hashing.py +0 -0
  424. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/importtools.py +0 -0
  425. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/math.py +0 -0
  426. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/names.py +0 -0
  427. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  428. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/processutils/__init__.py +0 -0
  429. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/pydantic.py +0 -0
  430. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/render_swagger.py +0 -0
  431. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  432. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  433. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  434. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/schema_tools/validation.py +0 -0
  435. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/services.py +0 -0
  436. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/slugify.py +0 -0
  437. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/templating/AGENTS.md +0 -0
  438. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/templating/__init__.py +0 -0
  439. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/text.py +0 -0
  440. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/timeout.py +0 -0
  441. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/urls.py +0 -0
  442. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/utilities/visualization.py +0 -0
  443. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/variables.py +0 -0
  444. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/AGENTS.md +0 -0
  445. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/__init__.py +0 -0
  446. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_cleanup.py +0 -0
  447. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_cleanup_handlers.py +0 -0
  448. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  449. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  450. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_worker_channel/_state.py +0 -0
  451. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  452. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  453. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/base.py +0 -0
  454. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/block.py +0 -0
  455. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/cloud.py +0 -0
  456. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/process.py +0 -0
  457. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/server.py +0 -0
  458. {prefect_client-3.8.5.dev6 → prefect_client-3.8.6}/src/prefect/workers/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: prefect-client
3
- Version: 3.8.5.dev6
3
+ Version: 3.8.6
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.8.6"
3
+ __build_date__ = "2026-09-14 14:19:34.965420+00:00"
4
+ __git_commit__ = "33de4078a0f1d5efb6e4170ccb8fcc482e073155"
5
+ __dirty__ = False
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import collections.abc
3
4
  import hashlib
4
5
  import html
5
6
  import inspect
@@ -84,7 +85,27 @@ UnionTypes: tuple[object, ...] = (Union,)
84
85
  if hasattr(types, "UnionType"):
85
86
  # Python 3.10+ only
86
87
  UnionTypes = (*UnionTypes, types.UnionType)
87
- NestedTypes: tuple[type, ...] = (list, dict, tuple, *UnionTypes)
88
+
89
+
90
+ def _nested_type_args(annotation: Any) -> tuple[Any, ...]:
91
+ """
92
+ Returns the type arguments of `annotation` that may contain nested types,
93
+ or an empty tuple if `annotation` is not a supported container or union
94
+ annotation (e.g. `Union[A, B]`, `A | B`, `list[A]`, `dict[str, A]`, or
95
+ `collections.abc.Sequence[A]`).
96
+
97
+ Only the yielded type is returned for `Generator` annotations; the send
98
+ and return types are not part of the field's data.
99
+ """
100
+ origin = get_origin(annotation)
101
+ if origin in UnionTypes:
102
+ return get_args(annotation)
103
+ if isinstance(origin, type) and issubclass(origin, collections.abc.Iterable):
104
+ args = get_args(annotation)
105
+ if issubclass(origin, collections.abc.Generator):
106
+ return args[:1]
107
+ return args
108
+ return ()
88
109
 
89
110
 
90
111
  def block_schema_to_key(schema: BlockSchema) -> str:
@@ -168,11 +189,11 @@ def _collect_secret_fields(
168
189
  ) -> None:
169
190
  """
170
191
  Recursively collects all secret fields from a given type and adds them to the
171
- secrets list, supporting nested Union / Dict / Tuple / List / BaseModel fields.
192
+ secrets list, supporting nested Union / container / BaseModel fields.
172
193
  Also, note, this function mutates the input secrets list, thus does not return anything.
173
194
  """
174
- if get_origin(type_) in NestedTypes:
175
- for nested_type in get_args(type_):
195
+ if nested_types := _nested_type_args(type_):
196
+ for nested_type in nested_types:
176
197
  _collect_secret_fields(name, nested_type, secrets)
177
198
  return
178
199
  elif _is_subclass(type_, BaseModel):
@@ -302,9 +323,8 @@ def schema_extra(schema: dict[str, Any], model: type["Block"]) -> None:
302
323
  else:
303
324
  refs[field_name] = annotation._to_block_schema_reference_dict() # pyright: ignore[reportPrivateUsage]
304
325
 
305
- if get_origin(annotation) in NestedTypes:
306
- for type_ in get_args(annotation):
307
- collect_block_schema_references(field_name, type_)
326
+ for type_ in _nested_type_args(annotation):
327
+ collect_block_schema_references(field_name, type_)
308
328
 
309
329
  for name, field in model.model_fields.items():
310
330
  if field.annotation is not None:
@@ -1469,10 +1489,9 @@ class Block(BaseModel, ABC):
1469
1489
  if Block.is_block_class(annotation):
1470
1490
  return True
1471
1491
 
1472
- if get_origin(annotation) in UnionTypes:
1473
- for annotation in get_args(annotation):
1474
- if Block.is_block_class(annotation):
1475
- return True
1492
+ for nested_annotation in _nested_type_args(annotation):
1493
+ if Block.annotation_refers_to_block_class(nested_annotation):
1494
+ return True
1476
1495
 
1477
1496
  return False
1478
1497
 
@@ -1510,8 +1529,8 @@ class Block(BaseModel, ABC):
1510
1529
  if TYPE_CHECKING:
1511
1530
  assert isinstance(coro, Coroutine)
1512
1531
  await coro
1513
- elif get_origin(annotation) in NestedTypes:
1514
- for inner_annotation in get_args(annotation):
1532
+ else:
1533
+ for inner_annotation in _nested_type_args(annotation):
1515
1534
  await register_blocks_in_annotation(inner_annotation)
1516
1535
 
1517
1536
  for field in cls.model_fields.values():
@@ -1606,8 +1625,8 @@ class Block(BaseModel, ABC):
1606
1625
  """Walk through the annotation and register any nested blocks."""
1607
1626
  if Block.is_block_class(annotation):
1608
1627
  annotation.register_type_and_schema(_sync=True)
1609
- elif get_origin(annotation) in NestedTypes:
1610
- for inner_annotation in get_args(annotation):
1628
+ else:
1629
+ for inner_annotation in _nested_type_args(annotation):
1611
1630
  register_blocks_in_annotation_sync(inner_annotation, sync_client)
1612
1631
 
1613
1632
  with get_client(sync_client=True) as sync_client:
@@ -2023,9 +2042,8 @@ class Block(BaseModel, ABC):
2023
2042
  # recurse into the nested block's own fields
2024
2043
  for nested in cls._collect_nested_block_types(annotation).items():
2025
2044
  result.setdefault(nested[0], nested[1])
2026
- if get_origin(annotation) in NestedTypes:
2027
- for arg in get_args(annotation):
2028
- cls._walk_annotation_for_blocks(arg, result)
2045
+ for arg in _nested_type_args(annotation):
2046
+ cls._walk_annotation_for_blocks(arg, result)
2029
2047
 
2030
2048
  @classmethod
2031
2049
  def model_json_schema(
@@ -67,4 +67,10 @@ def get_attribution_headers() -> dict[str, str]:
67
67
  if deployment_name := os.environ.get("PREFECT__DEPLOYMENT_NAME"):
68
68
  headers["X-Prefect-Deployment-Name"] = deployment_name
69
69
 
70
- return headers
70
+ # HTTP header values cannot start or end with spaces or tabs. Normalize only
71
+ # the attribution values, leaving the actual flow/deployment/worker names intact.
72
+ return {
73
+ name: stripped
74
+ for name, value in headers.items()
75
+ if (stripped := value.strip(" \t"))
76
+ }
@@ -1213,9 +1213,10 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
1213
1213
  intent = _termination_intent()
1214
1214
  if intent == "cancel":
1215
1215
  self.handle_cancellation(exc)
1216
- elif intent is None:
1217
- self.handle_crash(exc)
1218
- elif intent not in _SUPERVISOR_OWNED_INTENTS:
1216
+ raise
1217
+ if intent in _SUPERVISOR_OWNED_INTENTS:
1218
+ raise
1219
+ if intent is not None:
1219
1220
  # Defensive: an unknown intent means the control
1220
1221
  # listener was extended (e.g. "suspend" in a
1221
1222
  # follow-up PR) without extending this dispatch.
@@ -1227,6 +1228,15 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
1227
1228
  " dispatch branch.",
1228
1229
  intent,
1229
1230
  )
1231
+ if self.flow_run.state and self.flow_run.state.is_final():
1232
+ # A termination signal that lands during teardown
1233
+ # must not overwrite an already-reported final state
1234
+ self.logger.debug(
1235
+ "Termination signal was received after the flow"
1236
+ " run reached a final state",
1237
+ exc_info=exc,
1238
+ )
1239
+ else:
1230
1240
  self.handle_crash(exc)
1231
1241
  raise
1232
1242
  except Exception:
@@ -1913,9 +1923,10 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1913
1923
  intent = _termination_intent()
1914
1924
  if intent == "cancel":
1915
1925
  await self.handle_cancellation(exc)
1916
- elif intent is None:
1917
- await self.handle_crash(exc)
1918
- elif intent not in _SUPERVISOR_OWNED_INTENTS:
1926
+ raise
1927
+ if intent in _SUPERVISOR_OWNED_INTENTS:
1928
+ raise
1929
+ if intent is not None:
1919
1930
  # Defensive: see sync engine's dispatch for why.
1920
1931
  self.logger.error(
1921
1932
  "Unhandled termination intent %r; treating as"
@@ -1923,6 +1934,15 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1923
1934
  " dispatch branch.",
1924
1935
  intent,
1925
1936
  )
1937
+ if self.flow_run.state and self.flow_run.state.is_final():
1938
+ # A termination signal that lands during teardown
1939
+ # must not overwrite an already-reported final state
1940
+ self.logger.debug(
1941
+ "Termination signal was received after the flow"
1942
+ " run reached a final state",
1943
+ exc_info=exc,
1944
+ )
1945
+ else:
1926
1946
  await self.handle_crash(exc)
1927
1947
  raise
1928
1948
  except Exception:
@@ -16,6 +16,7 @@ from __future__ import annotations
16
16
  import json
17
17
  import random
18
18
  import shlex
19
+ import shutil
19
20
  import string
20
21
  import subprocess
21
22
  import time
@@ -86,7 +87,12 @@ class AzureCLI:
86
87
  json.JSONDecodeError: If output cannot be decoded as JSON when return_json is True.
87
88
  """
88
89
  try:
89
- result = await run_process(shlex.split(command), check=False)
90
+ args = shlex.split(command)
91
+ # On Windows the Azure CLI launcher is `az.cmd`; resolve the executable
92
+ # through PATH so subprocess can find it without a shell.
93
+ if args:
94
+ args[0] = shutil.which(args[0]) or args[0]
95
+ result = await run_process(args, check=False)
90
96
  output = result.stdout.decode("utf-8").strip()
91
97
 
92
98
  if result.returncode != 0:
@@ -28,13 +28,15 @@ def _is_pid_alive(pid: int) -> bool:
28
28
  import ctypes
29
29
 
30
30
  _PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
31
- handle = ctypes.windll.kernel32.OpenProcess( # type: ignore[attr-defined]
32
- _PROCESS_QUERY_LIMITED_INFORMATION, False, pid
33
- )
31
+ _ERROR_ACCESS_DENIED = 5
32
+ kernel32 = ctypes.WinDLL("kernel32", use_last_error=True) # type: ignore[attr-defined]
33
+ handle = kernel32.OpenProcess(_PROCESS_QUERY_LIMITED_INFORMATION, False, pid)
34
34
  if handle:
35
- ctypes.windll.kernel32.CloseHandle(handle) # type: ignore[attr-defined]
35
+ kernel32.CloseHandle(handle)
36
36
  return True
37
- return False
37
+ # ERROR_ACCESS_DENIED means the process exists but we can't open it
38
+ # (another user, higher integrity, or a protected process).
39
+ return ctypes.get_last_error() == _ERROR_ACCESS_DENIED
38
40
 
39
41
  try:
40
42
  os.kill(pid, 0)
@@ -0,0 +1,155 @@
1
+ """
2
+ Utilities for querying flow and task run history.
3
+ """
4
+
5
+ import datetime
6
+ from collections import defaultdict
7
+ from typing import TYPE_CHECKING, Any, List, Optional
8
+
9
+ import pydantic
10
+ import sqlalchemy as sa
11
+ from typing_extensions import Literal
12
+
13
+ import prefect.server.models as models
14
+ import prefect.server.schemas as schemas
15
+ from prefect.logging import get_logger
16
+ from prefect.server.database import PrefectDBInterface, db_injector
17
+ from prefect.types import DateTime
18
+
19
+ if TYPE_CHECKING:
20
+ import logging
21
+
22
+ logger: "logging.Logger" = get_logger("server.api")
23
+
24
+
25
+ @db_injector
26
+ async def run_history(
27
+ db: PrefectDBInterface,
28
+ session: sa.orm.Session,
29
+ run_type: Literal["flow_run", "task_run"],
30
+ history_start: DateTime,
31
+ history_end: DateTime,
32
+ history_interval: datetime.timedelta,
33
+ flows: Optional[schemas.filters.FlowFilter] = None,
34
+ flow_runs: Optional[schemas.filters.FlowRunFilter] = None,
35
+ task_runs: Optional[schemas.filters.TaskRunFilter] = None,
36
+ deployments: Optional[schemas.filters.DeploymentFilter] = None,
37
+ work_pools: Optional[schemas.filters.WorkPoolFilter] = None,
38
+ work_queues: Optional[schemas.filters.WorkQueueFilter] = None,
39
+ ) -> list[schemas.responses.HistoryResponse]:
40
+ """
41
+ Produce a history of runs aggregated by interval and state
42
+ """
43
+
44
+ # normalize to stdlib timedeltas; pendulum intervals, which the timestamp
45
+ # arguments produce when they are pendulum instances, do not support floor
46
+ # division by a timedelta
47
+ history_interval = datetime.timedelta(seconds=history_interval.total_seconds())
48
+
49
+ # SQLite has issues with very small intervals
50
+ # (by 0.001 seconds it stops incrementing the interval)
51
+ if history_interval < datetime.timedelta(seconds=1):
52
+ raise ValueError("History interval must not be less than 1 second.")
53
+
54
+ # prepare run-specific models
55
+ if run_type == "flow_run":
56
+ run_model = db.FlowRun
57
+ run_filter_function = models.flow_runs._apply_flow_run_filters
58
+ elif run_type == "task_run":
59
+ run_model = db.TaskRun
60
+ run_filter_function = models.task_runs._apply_task_run_filters
61
+ else:
62
+ raise ValueError(
63
+ f"Unknown run type {run_type!r}. Expected 'flow_run' or 'task_run'."
64
+ )
65
+
66
+ elapsed = datetime.timedelta(seconds=(history_end - history_start).total_seconds())
67
+ interval_count = (
68
+ min(-((-elapsed) // history_interval), 500)
69
+ if elapsed > datetime.timedelta(0)
70
+ else 0
71
+ )
72
+ if interval_count == 0:
73
+ return []
74
+
75
+ history_query_end = history_start + interval_count * history_interval
76
+
77
+ # apply filters to the flow runs (and related states)
78
+ runs = await run_filter_function(
79
+ db,
80
+ sa.select(
81
+ run_model.id,
82
+ run_model.expected_start_time,
83
+ run_model.estimated_run_time,
84
+ run_model.estimated_start_time_delta,
85
+ run_model.state_type,
86
+ run_model.state_name,
87
+ db.queries.make_timestamp_bucket_index(
88
+ run_model.expected_start_time,
89
+ history_start,
90
+ history_interval,
91
+ ).label("bucket_index"),
92
+ )
93
+ .select_from(run_model)
94
+ .where(
95
+ run_model.expected_start_time >= history_start,
96
+ run_model.expected_start_time < history_query_end,
97
+ ),
98
+ flow_filter=flows,
99
+ flow_run_filter=flow_runs,
100
+ task_run_filter=task_runs,
101
+ deployment_filter=deployments,
102
+ work_pool_filter=work_pools,
103
+ work_queue_filter=work_queues,
104
+ )
105
+ runs = runs.alias("runs")
106
+
107
+ counts = sa.select(
108
+ runs.c.bucket_index,
109
+ runs.c.state_type,
110
+ runs.c.state_name,
111
+ sa.func.count(runs.c.id).label("count_runs"),
112
+ # estimated run times only includes positive run times (to avoid any unexpected corner cases)
113
+ sa.func.sum(
114
+ sa.func.greatest(0, sa.extract("epoch", runs.c.estimated_run_time))
115
+ ).label("sum_estimated_run_time"),
116
+ # estimated lateness is the sum of any positive start time deltas
117
+ sa.func.sum(
118
+ sa.func.greatest(0, sa.extract("epoch", runs.c.estimated_start_time_delta))
119
+ ).label("sum_estimated_lateness"),
120
+ ).group_by(
121
+ runs.c.bucket_index,
122
+ runs.c.state_type,
123
+ runs.c.state_name,
124
+ )
125
+
126
+ # issue the query
127
+ result = await session.execute(counts)
128
+ states_by_bucket: dict[int, list[dict[str, Any]]] = defaultdict(list)
129
+ for record in result.mappings():
130
+ states_by_bucket[record["bucket_index"]].append(
131
+ {
132
+ "state_type": record["state_type"],
133
+ "state_name": record["state_name"],
134
+ "count_runs": record["count_runs"],
135
+ "sum_estimated_run_time": record["sum_estimated_run_time"],
136
+ "sum_estimated_lateness": record["sum_estimated_lateness"],
137
+ }
138
+ )
139
+
140
+ records = [
141
+ {
142
+ "interval_start": (history_start + i * history_interval).astimezone(
143
+ datetime.timezone.utc
144
+ ),
145
+ "interval_end": (history_start + (i + 1) * history_interval).astimezone(
146
+ datetime.timezone.utc
147
+ ),
148
+ "states": states_by_bucket[i],
149
+ }
150
+ for i in range(interval_count)
151
+ ]
152
+
153
+ return pydantic.TypeAdapter(
154
+ List[schemas.responses.HistoryResponse]
155
+ ).validate_python(records)
@@ -279,6 +279,19 @@ class Settings(PrefectBaseSettings):
279
279
  to use default_factory. The remaining items here require access to the full Settings instance
280
280
  or have complex interdependencies that will be migrated in future PRs.
281
281
  """
282
+ if "profiles_path" not in self.model_fields_set:
283
+ self.profiles_path = self.home / "profiles.toml"
284
+ self.__pydantic_fields_set__.remove("profiles_path")
285
+ if "local_storage_path" not in self.results.model_fields_set:
286
+ self.results.local_storage_path = self.home / "storage"
287
+ self.results.__pydantic_fields_set__.remove("local_storage_path")
288
+ if "config_path" not in self.logging.model_fields_set:
289
+ self.logging.config_path = self.home / "logging.yml"
290
+ self.logging.__pydantic_fields_set__.remove("config_path")
291
+ if "memo_store_path" not in self.server.model_fields_set:
292
+ self.server.memo_store_path = self.home / "memo_store.toml"
293
+ self.server.__pydantic_fields_set__.remove("memo_store_path")
294
+
282
295
  if self.ui_url is None:
283
296
  self.ui_url = default_ui_url(self)
284
297
  self.__pydantic_fields_set__.remove("ui_url")
@@ -1,5 +0,0 @@
1
- # Generated by versioningit
2
- __version__ = "3.8.5.dev6"
3
- __build_date__ = "2026-09-03 08:20:42.058224+00:00"
4
- __git_commit__ = "d63a95a49f48f869523781116d8adf2eb4118f32"
5
- __dirty__ = False
@@ -1,170 +0,0 @@
1
- """
2
- Utilities for querying flow and task run history.
3
- """
4
-
5
- import datetime
6
- import json
7
- from typing import TYPE_CHECKING, List, Optional
8
-
9
- import pydantic
10
- import sqlalchemy as sa
11
- from typing_extensions import Literal
12
-
13
- import prefect.server.models as models
14
- import prefect.server.schemas as schemas
15
- from prefect.logging import get_logger
16
- from prefect.server.database import PrefectDBInterface, db_injector
17
- from prefect.types import DateTime
18
-
19
- if TYPE_CHECKING:
20
- import logging
21
-
22
- logger: "logging.Logger" = get_logger("server.api")
23
-
24
-
25
- @db_injector
26
- async def run_history(
27
- db: PrefectDBInterface,
28
- session: sa.orm.Session,
29
- run_type: Literal["flow_run", "task_run"],
30
- history_start: DateTime,
31
- history_end: DateTime,
32
- history_interval: datetime.timedelta,
33
- flows: Optional[schemas.filters.FlowFilter] = None,
34
- flow_runs: Optional[schemas.filters.FlowRunFilter] = None,
35
- task_runs: Optional[schemas.filters.TaskRunFilter] = None,
36
- deployments: Optional[schemas.filters.DeploymentFilter] = None,
37
- work_pools: Optional[schemas.filters.WorkPoolFilter] = None,
38
- work_queues: Optional[schemas.filters.WorkQueueFilter] = None,
39
- ) -> list[schemas.responses.HistoryResponse]:
40
- """
41
- Produce a history of runs aggregated by interval and state
42
- """
43
-
44
- # SQLite has issues with very small intervals
45
- # (by 0.001 seconds it stops incrementing the interval)
46
- if history_interval < datetime.timedelta(seconds=1):
47
- raise ValueError("History interval must not be less than 1 second.")
48
-
49
- # prepare run-specific models
50
- if run_type == "flow_run":
51
- run_model = db.FlowRun
52
- run_filter_function = models.flow_runs._apply_flow_run_filters
53
- elif run_type == "task_run":
54
- run_model = db.TaskRun
55
- run_filter_function = models.task_runs._apply_task_run_filters
56
- else:
57
- raise ValueError(
58
- f"Unknown run type {run_type!r}. Expected 'flow_run' or 'task_run'."
59
- )
60
-
61
- # create a CTE for timestamp intervals
62
- intervals = db.queries.make_timestamp_intervals(
63
- history_start,
64
- history_end,
65
- history_interval,
66
- ).cte("intervals")
67
-
68
- # apply filters to the flow runs (and related states)
69
- runs = (
70
- await run_filter_function(
71
- db,
72
- sa.select(
73
- run_model.id,
74
- run_model.expected_start_time,
75
- run_model.estimated_run_time,
76
- run_model.estimated_start_time_delta,
77
- run_model.state_type,
78
- run_model.state_name,
79
- ).select_from(run_model),
80
- flow_filter=flows,
81
- flow_run_filter=flow_runs,
82
- task_run_filter=task_runs,
83
- deployment_filter=deployments,
84
- work_pool_filter=work_pools,
85
- work_queue_filter=work_queues,
86
- )
87
- ).alias("runs")
88
- # outer join intervals to the filtered runs to create a dataset composed of
89
- # every interval and the aggregate of all its runs. The runs aggregate is represented
90
- # by a descriptive JSON object
91
- counts = (
92
- sa.select(
93
- intervals.c.interval_start,
94
- intervals.c.interval_end,
95
- # build a JSON object, ignoring the case where the count of runs is 0
96
- sa.case(
97
- (sa.func.count(runs.c.id) == 0, None),
98
- else_=db.queries.build_json_object(
99
- "state_type",
100
- runs.c.state_type,
101
- "state_name",
102
- runs.c.state_name,
103
- "count_runs",
104
- sa.func.count(runs.c.id),
105
- # estimated run times only includes positive run times (to avoid any unexpected corner cases)
106
- "sum_estimated_run_time",
107
- sa.func.sum(
108
- sa.func.greatest(
109
- 0, sa.extract("epoch", runs.c.estimated_run_time)
110
- )
111
- ),
112
- # estimated lateness is the sum of any positive start time deltas
113
- "sum_estimated_lateness",
114
- sa.func.sum(
115
- sa.func.greatest(
116
- 0, sa.extract("epoch", runs.c.estimated_start_time_delta)
117
- )
118
- ),
119
- ),
120
- ).label("state_agg"),
121
- )
122
- .select_from(intervals)
123
- .join(
124
- runs,
125
- sa.and_(
126
- runs.c.expected_start_time >= intervals.c.interval_start,
127
- runs.c.expected_start_time < intervals.c.interval_end,
128
- ),
129
- isouter=True,
130
- )
131
- .group_by(
132
- intervals.c.interval_start,
133
- intervals.c.interval_end,
134
- runs.c.state_type,
135
- runs.c.state_name,
136
- )
137
- ).alias("counts")
138
-
139
- # aggregate all state-aggregate objects into a single array for each interval,
140
- # ensuring that intervals with no runs have an empty array
141
- query = (
142
- sa.select(
143
- counts.c.interval_start,
144
- counts.c.interval_end,
145
- sa.func.coalesce(
146
- db.queries.json_arr_agg(
147
- db.queries.cast_to_json(counts.c.state_agg)
148
- ).filter(counts.c.state_agg.is_not(None)),
149
- sa.literal("[]", literal_execute=True),
150
- ).label("states"),
151
- )
152
- .group_by(counts.c.interval_start, counts.c.interval_end)
153
- .order_by(counts.c.interval_start)
154
- # return no more than 500 bars
155
- .limit(500)
156
- )
157
-
158
- # issue the query
159
- result = await session.execute(query)
160
- records = result.mappings()
161
-
162
- # load and parse the record if the database returns JSON as strings
163
- if db.queries.uses_json_strings:
164
- records = [dict(r) for r in records]
165
- for r in records:
166
- r["states"] = json.loads(r["states"])
167
-
168
- return pydantic.TypeAdapter(
169
- List[schemas.responses.HistoryResponse]
170
- ).validate_python(records)