prefect-client 3.6.30.dev3__tar.gz → 3.6.30.dev4__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 (425) hide show
  1. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/PKG-INFO +1 -1
  2. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/AGENTS.md +4 -0
  3. prefect_client-3.6.30.dev4/src/prefect/_build_info.py +5 -0
  4. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/flow_engine.py +131 -18
  5. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/flows.py +147 -19
  6. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/results.py +151 -20
  7. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/AGENTS.md +2 -0
  8. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_workspace_starter.py +75 -3
  9. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/concurrency_limits_v2.py +37 -17
  10. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/task_engine.py +8 -6
  11. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/task_runners.py +80 -1
  12. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/AGENTS.md +1 -1
  13. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/visualization.py +18 -0
  14. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/workers/base.py +25 -11
  15. prefect_client-3.6.30.dev3/src/prefect/_build_info.py +0 -5
  16. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/.gitignore +0 -0
  17. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/LICENSE +0 -0
  18. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/README.md +0 -0
  19. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/hatch_build.py +0 -0
  20. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/pyproject.toml +0 -0
  21. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/.prefectignore +0 -0
  22. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/__init__.py +0 -0
  23. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/__main__.py +0 -0
  24. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/__init__.py +0 -0
  25. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/_launchers.py +0 -0
  26. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/bundles/__init__.py +0 -0
  27. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/bundles/_file_collector.py +0 -0
  28. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/bundles/_ignore_filter.py +0 -0
  29. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/bundles/_path_resolver.py +0 -0
  30. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/bundles/_zip_builder.py +0 -0
  31. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/bundles/_zip_extractor.py +0 -0
  32. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/bundles/execute.py +0 -0
  33. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/plugins/__init__.py +0 -0
  34. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/plugins/apply.py +0 -0
  35. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  36. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/plugins/manager.py +0 -0
  37. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/plugins/spec.py +0 -0
  38. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/sla/__init__.py +0 -0
  39. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/sla/client.py +0 -0
  40. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_experimental/sla/objects.py +0 -0
  41. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/__init__.py +0 -0
  42. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/_logging.py +0 -0
  43. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/analytics/__init__.py +0 -0
  44. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  45. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/analytics/client.py +0 -0
  46. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/analytics/device_id.py +0 -0
  47. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/analytics/emit.py +0 -0
  48. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/analytics/enabled.py +0 -0
  49. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/analytics/events.py +0 -0
  50. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/analytics/milestones.py +0 -0
  51. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/analytics/notice.py +0 -0
  52. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/analytics/service.py +0 -0
  53. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/compatibility/__init__.py +0 -0
  54. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  55. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/compatibility/backports.py +0 -0
  56. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/compatibility/blocks.py +0 -0
  57. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  58. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/compatibility/migration.py +0 -0
  59. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/compatibility/starlette.py +0 -0
  60. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/concurrency/__init__.py +0 -0
  61. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/concurrency/api.py +0 -0
  62. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/concurrency/calls.py +0 -0
  63. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  64. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  65. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/concurrency/inspection.py +0 -0
  66. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/concurrency/primitives.py +0 -0
  67. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/concurrency/services.py +0 -0
  68. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/concurrency/threads.py +0 -0
  69. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/concurrency/waiters.py +0 -0
  70. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/control_listener.py +0 -0
  71. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/installation.py +0 -0
  72. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/integrations.py +0 -0
  73. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/lazy.py +0 -0
  74. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/observability.py +0 -0
  75. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/pydantic/__init__.py +0 -0
  76. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/pydantic/schemas.py +0 -0
  77. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  78. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  79. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  80. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/pytz.py +0 -0
  81. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/retries.py +0 -0
  82. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/schemas/__init__.py +0 -0
  83. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/schemas/bases.py +0 -0
  84. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/schemas/fields.py +0 -0
  85. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/schemas/serializers.py +0 -0
  86. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/schemas/validators.py +0 -0
  87. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  88. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/testing.py +0 -0
  89. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/urls.py +0 -0
  90. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/uuid7.py +0 -0
  91. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_internal/websockets.py +0 -0
  92. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_observers.py +0 -0
  93. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_result_records.py +0 -0
  94. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/__init__.py +0 -0
  95. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/fetcher.py +0 -0
  96. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/generator.py +0 -0
  97. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/models.py +0 -0
  98. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/naming.py +0 -0
  99. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/renderer.py +0 -0
  100. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/schema_converter.py +0 -0
  101. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/templates/__init__.py +0 -0
  102. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  103. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/types.py +0 -0
  104. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_sdk/unions.py +0 -0
  105. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_states.py +0 -0
  106. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_vendor/croniter/__init__.py +0 -0
  107. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_vendor/croniter/croniter.py +0 -0
  108. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_versioning.py +0 -0
  109. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/_waiters.py +0 -0
  110. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/agent.py +0 -0
  111. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/analytics/__init__.py +0 -0
  112. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/artifacts.py +0 -0
  113. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/assets/__init__.py +0 -0
  114. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/assets/core.py +0 -0
  115. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/assets/materialize.py +0 -0
  116. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/automations.py +0 -0
  117. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/blocks/AGENTS.md +0 -0
  118. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/blocks/__init__.py +0 -0
  119. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/blocks/abstract.py +0 -0
  120. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/blocks/core.py +0 -0
  121. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/blocks/fields.py +0 -0
  122. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/blocks/notifications.py +0 -0
  123. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/blocks/redis.py +0 -0
  124. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/blocks/system.py +0 -0
  125. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/blocks/webhook.py +0 -0
  126. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/cache_policies.py +0 -0
  127. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/AGENTS.md +0 -0
  128. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/__init__.py +0 -0
  129. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/_version_checking.py +0 -0
  130. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/attribution.py +0 -0
  131. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/base.py +0 -0
  132. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/cloud.py +0 -0
  133. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/collections.py +0 -0
  134. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/constants.py +0 -0
  135. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/__init__.py +0 -0
  136. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  137. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  138. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  139. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_automations/client.py +0 -0
  140. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  141. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  142. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  143. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  144. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  145. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  146. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  147. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  148. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  149. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  150. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  151. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_events/client.py +0 -0
  152. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  153. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  154. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  155. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_flows/client.py +0 -0
  156. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  157. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_logs/client.py +0 -0
  158. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  159. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_variables/client.py +0 -0
  160. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  161. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  162. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/base.py +0 -0
  163. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/orchestration/routes.py +0 -0
  164. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/schemas/__init__.py +0 -0
  165. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/schemas/actions.py +0 -0
  166. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/schemas/events.py +0 -0
  167. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/schemas/filters.py +0 -0
  168. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/schemas/objects.py +0 -0
  169. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/schemas/responses.py +0 -0
  170. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/schemas/schedules.py +0 -0
  171. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/schemas/sorting.py +0 -0
  172. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/subscriptions.py +0 -0
  173. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/types/__init__.py +0 -0
  174. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  175. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/client/utilities.py +0 -0
  176. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/AGENTS.md +0 -0
  177. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/__init__.py +0 -0
  178. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/_asyncio.py +0 -0
  179. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/_events.py +0 -0
  180. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/_leases.py +0 -0
  181. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/_sync.py +0 -0
  182. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/asyncio.py +0 -0
  183. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/context.py +0 -0
  184. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/services.py +0 -0
  185. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/sync.py +0 -0
  186. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/v1/__init__.py +0 -0
  187. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  188. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/v1/_events.py +0 -0
  189. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/v1/asyncio.py +0 -0
  190. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/v1/context.py +0 -0
  191. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/v1/services.py +0 -0
  192. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/concurrency/v1/sync.py +0 -0
  193. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/context.py +0 -0
  194. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/AGENTS.md +0 -0
  195. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/__init__.py +0 -0
  196. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/base.py +0 -0
  197. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/deployments.py +0 -0
  198. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/flow_runs.py +0 -0
  199. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/runner.py +0 -0
  200. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/schedules.py +0 -0
  201. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/steps/__init__.py +0 -0
  202. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/steps/core.py +0 -0
  203. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/steps/pull.py +0 -0
  204. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/deployments/steps/utility.py +0 -0
  205. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/docker/__init__.py +0 -0
  206. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/docker/_buildx.py +0 -0
  207. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/docker/docker_image.py +0 -0
  208. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/engine.py +0 -0
  209. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/AGENTS.md +0 -0
  210. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/__init__.py +0 -0
  211. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/actions.py +0 -0
  212. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/clients.py +0 -0
  213. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/filters.py +0 -0
  214. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/related.py +0 -0
  215. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/schemas/__init__.py +0 -0
  216. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/schemas/automations.py +0 -0
  217. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  218. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/schemas/events.py +0 -0
  219. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/schemas/labelling.py +0 -0
  220. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/subscribers.py +0 -0
  221. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/utilities.py +0 -0
  222. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/events/worker.py +0 -0
  223. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/exceptions.py +0 -0
  224. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/filesystems.py +0 -0
  225. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/flow_runs.py +0 -0
  226. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/futures.py +0 -0
  227. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/infrastructure/__init__.py +0 -0
  228. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/infrastructure/base.py +0 -0
  229. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  230. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  231. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  232. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  233. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  234. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  235. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/input/__init__.py +0 -0
  236. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/input/actions.py +0 -0
  237. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/input/run_input.py +0 -0
  238. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/locking/__init__.py +0 -0
  239. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/locking/_filelock.py +0 -0
  240. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/locking/filesystem.py +0 -0
  241. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/locking/memory.py +0 -0
  242. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/locking/protocol.py +0 -0
  243. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/logging/AGENTS.md +0 -0
  244. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/logging/__init__.py +0 -0
  245. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/logging/clients.py +0 -0
  246. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/logging/configuration.py +0 -0
  247. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/logging/filters.py +0 -0
  248. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/logging/formatters.py +0 -0
  249. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/logging/handlers.py +0 -0
  250. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/logging/highlighters.py +0 -0
  251. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/logging/loggers.py +0 -0
  252. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/logging/logging.yml +0 -0
  253. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/main.py +0 -0
  254. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/plugins.py +0 -0
  255. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/py.typed +0 -0
  256. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/__init__.py +0 -0
  257. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_cancel_finalizer.py +0 -0
  258. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_cancellation_manager.py +0 -0
  259. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_control_channel.py +0 -0
  260. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_deployment_registry.py +0 -0
  261. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_event_emitter.py +0 -0
  262. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_flow_resolver.py +0 -0
  263. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_flow_run_executor.py +0 -0
  264. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_hook_runner.py +0 -0
  265. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_limit_manager.py +0 -0
  266. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_process_manager.py +0 -0
  267. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  268. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_starter_bundle.py +0 -0
  269. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_starter_direct.py +0 -0
  270. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_starter_engine.py +0 -0
  271. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_state_proposer.py +0 -0
  272. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/_workspace_resolver.py +0 -0
  273. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/runner.py +0 -0
  274. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/server.py +0 -0
  275. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runner/storage.py +0 -0
  276. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runtime/__init__.py +0 -0
  277. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runtime/deployment.py +0 -0
  278. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runtime/flow_run.py +0 -0
  279. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/runtime/task_run.py +0 -0
  280. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/schedules.py +0 -0
  281. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/serializers.py +0 -0
  282. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/__init__.py +0 -0
  283. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/admin.py +0 -0
  284. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/artifacts.py +0 -0
  285. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/automations.py +0 -0
  286. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/background_workers.py +0 -0
  287. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/block_capabilities.py +0 -0
  288. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/block_documents.py +0 -0
  289. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/block_schemas.py +0 -0
  290. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/block_types.py +0 -0
  291. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/clients.py +0 -0
  292. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/collections.py +0 -0
  293. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  294. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/concurrency_limits.py +0 -0
  295. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/csrf_token.py +0 -0
  296. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/dependencies.py +0 -0
  297. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/deployments.py +0 -0
  298. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/events.py +0 -0
  299. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/flow_run_states.py +0 -0
  300. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/flow_runs.py +0 -0
  301. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/flows.py +0 -0
  302. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/logs.py +0 -0
  303. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/middleware.py +0 -0
  304. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/root.py +0 -0
  305. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/run_history.py +0 -0
  306. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/saved_searches.py +0 -0
  307. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/server.py +0 -0
  308. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  309. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/task_run_states.py +0 -0
  310. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/task_runs.py +0 -0
  311. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/task_workers.py +0 -0
  312. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/templates.py +0 -0
  313. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/ui/__init__.py +0 -0
  314. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/ui/flow_runs.py +0 -0
  315. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/ui/flows.py +0 -0
  316. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/ui/schemas.py +0 -0
  317. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/ui/task_runs.py +0 -0
  318. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/validation.py +0 -0
  319. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/variables.py +0 -0
  320. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/work_queues.py +0 -0
  321. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/server/api/workers.py +0 -0
  322. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/AGENTS.md +0 -0
  323. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/__init__.py +0 -0
  324. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/base.py +0 -0
  325. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/constants.py +0 -0
  326. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/context.py +0 -0
  327. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/legacy.py +0 -0
  328. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/__init__.py +0 -0
  329. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/_defaults.py +0 -0
  330. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/api.py +0 -0
  331. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/cli.py +0 -0
  332. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/client.py +0 -0
  333. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/cloud.py +0 -0
  334. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/deployments.py +0 -0
  335. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/events.py +0 -0
  336. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/experiments.py +0 -0
  337. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/flows.py +0 -0
  338. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/internal.py +0 -0
  339. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/logging.py +0 -0
  340. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/results.py +0 -0
  341. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/root.py +0 -0
  342. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/runner.py +0 -0
  343. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/__init__.py +0 -0
  344. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/api.py +0 -0
  345. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/concurrency.py +0 -0
  346. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/database.py +0 -0
  347. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/deployments.py +0 -0
  348. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/docket.py +0 -0
  349. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/ephemeral.py +0 -0
  350. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/events.py +0 -0
  351. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  352. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/logs.py +0 -0
  353. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/root.py +0 -0
  354. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/services.py +0 -0
  355. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/tasks.py +0 -0
  356. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/server/ui.py +0 -0
  357. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/tasks.py +0 -0
  358. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/telemetry.py +0 -0
  359. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/testing.py +0 -0
  360. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/models/worker.py +0 -0
  361. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/profiles.py +0 -0
  362. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/profiles.toml +0 -0
  363. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/settings/sources.py +0 -0
  364. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/states.py +0 -0
  365. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/task_runs.py +0 -0
  366. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/task_worker.py +0 -0
  367. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/tasks.py +0 -0
  368. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/telemetry/__init__.py +0 -0
  369. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/telemetry/_metrics.py +0 -0
  370. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/telemetry/run_telemetry.py +0 -0
  371. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/transactions.py +0 -0
  372. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/types/__init__.py +0 -0
  373. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/types/_concurrency.py +0 -0
  374. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/types/_datetime.py +0 -0
  375. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/types/_schema.py +0 -0
  376. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/types/entrypoint.py +0 -0
  377. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/types/names.py +0 -0
  378. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/__init__.py +0 -0
  379. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/_ast.py +0 -0
  380. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/_deprecated.py +0 -0
  381. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/_engine.py +0 -0
  382. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/_git.py +0 -0
  383. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/_infrastructure_exit_codes.py +0 -0
  384. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/annotations.py +0 -0
  385. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  386. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/asyncutils/__init__.py +0 -0
  387. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/callables/AGENTS.md +0 -0
  388. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/callables/__init__.py +0 -0
  389. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/collections.py +0 -0
  390. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/compat.py +0 -0
  391. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/context.py +0 -0
  392. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/dispatch.py +0 -0
  393. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/dockerutils.py +0 -0
  394. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/engine/AGENTS.md +0 -0
  395. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/engine/__init__.py +0 -0
  396. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  397. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/filesystem/__init__.py +0 -0
  398. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/generics.py +0 -0
  399. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/hashing.py +0 -0
  400. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/importtools.py +0 -0
  401. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/math.py +0 -0
  402. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/names.py +0 -0
  403. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  404. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/processutils/__init__.py +0 -0
  405. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/pydantic.py +0 -0
  406. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/render_swagger.py +0 -0
  407. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/schema_tools/AGENTS.md +0 -0
  408. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  409. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  410. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/schema_tools/validation.py +0 -0
  411. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/services.py +0 -0
  412. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/slugify.py +0 -0
  413. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/templating/AGENTS.md +0 -0
  414. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/templating/__init__.py +0 -0
  415. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/text.py +0 -0
  416. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/timeout.py +0 -0
  417. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/utilities/urls.py +0 -0
  418. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/variables.py +0 -0
  419. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/workers/AGENTS.md +0 -0
  420. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/workers/__init__.py +0 -0
  421. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/workers/block.py +0 -0
  422. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/workers/cloud.py +0 -0
  423. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/workers/process.py +0 -0
  424. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/workers/server.py +0 -0
  425. {prefect_client-3.6.30.dev3 → prefect_client-3.6.30.dev4}/src/prefect/workers/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prefect-client
3
- Version: 3.6.30.dev3
3
+ Version: 3.6.30.dev4
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
@@ -10,6 +10,7 @@ There is no formal public/private boundary beyond the `_` prefix convention. Mod
10
10
 
11
11
  - `flows.py` / `tasks.py` — `@flow` and `@task` decorator definitions. The primary user-facing API.
12
12
  - `flow_engine.py` / `task_engine.py` — Async execution engines that orchestrate runs. **Critical invariant:** both sync and async engine paths must be kept in lockstep. Changes to one must be mirrored in the other.
13
+ - `flow_engine.py` is also a subprocess entrypoint: `python -m prefect.flow_engine <entrypoint>`. Reads `PREFECT__FLOW_RUN_ID` from the environment; accepts exactly one argument (the flow entrypoint path or module ref). Workers and infrastructure use this to launch flow runs as isolated subprocesses. Plain functions not decorated with `@flow` are auto-converted to flows at this entry point.
13
14
  - `states.py` — State objects and transition logic
14
15
  - `results.py` — Result persistence and retrieval
15
16
  - `futures.py` — `PrefectFuture` for async task results
@@ -20,12 +21,15 @@ There is no formal public/private boundary beyond the `_` prefix convention. Mod
20
21
  ## Key Contracts
21
22
 
22
23
  - **Engine ordering matters.** The engines apply features (retries, caching, result persistence, transactions) in a specific order. Changing the order or forgetting a feature in one engine path is the most common source of breakage.
24
+ - **Set run metadata before state transitions.** Any run attribute that event subscribers observe at the moment of a state transition (e.g., custom `flow_run_name`) must be persisted to the server *before* `set_state()` is called for that transition. Metadata set after the call appears stale to subscribers of that state event.
23
25
  - **Sync and async must stay in sync.** Both `flow_engine.py` and `task_engine.py` have sync and async paths. Any behavior change must be applied to both.
24
26
  - **Use `whenever` compat helpers for all datetime conversions on Python 3.13+.** `types/_datetime.py` provides `now()`, `_whenever_to_stdlib()`, `_whenever_zdt_from_py()`, and `_whenever_pdt_from_py()` to abstract over API differences between whenever 0.7.x–0.9.x and ≥ 0.10.0. The `_WHENEVER_NEW_API` flag (True when whenever ≥ 0.10.0) guards version-specific code. Never call `DateTime.now()` or `pendulum.now()` directly — use `now()` from `types/_datetime.py` instead. Never call `ZonedDateTime.from_py_datetime()`, `PlainDateTime.from_py_datetime()`, or `.py_datetime()` directly — use the helpers instead. Violations will silently break on whichever whenever version the helpers weren't written for.
25
27
  - **Flow and task engines advance state differently.** The flow engine makes blocking API calls to the server to propose and advance states. The task engine emits `prefect.task_run.*` events (delivered via WebSockets) but advances state locally through `set_state` calls with polling/backoff — do not assume the two engines work the same way.
26
28
  - **Flow state transitions go through the server.** The flow engine proposes states to the server, which accepts or rejects them via orchestration rules. The task engine, by contrast, manages state transitions locally via `set_state` and emits `prefect.task_run.*` events — it does not propose states to the server.
27
29
  - **`ProcessPoolTaskRunner` requires picklable data across subprocess boundaries.** `PrefectFuture` objects are not picklable and cannot be passed to worker subprocesses. Any `wait_for` futures must be waited on in the parent process and converted to `State` objects before submission. The subprocess task engine handles `State` objects via `resolve_to_final_result`, which raises `UpstreamTaskError` for non-completed upstreams.
28
30
  - **`ProcessPoolTaskRunner` instances may be deserialized without `__init__` running.** When a runner is pickled and restored in a subprocess, `__init__` is not called, so instance attributes set there may be absent. Access any such attribute via `getattr(self, "_attr", default)` rather than `self._attr` directly — both in the property getter and in `duplicate()`. The `subprocess_message_processor_factories` property demonstrates the required pattern.
31
+ - **`ThreadPoolTaskRunner` is cloudpickled when a flow run is dispatched to a subprocess.** `threading.Lock` and other non-picklable thread primitives must be dropped in `__getstate__` and rebuilt in `__setstate__`. Any new instance state added to this class must be evaluated for picklability.
32
+ - **Nested task submissions on a bounded `ThreadPoolTaskRunner` can deadlock.** When a worker task submits children and blocks on `.result()` while all `max_workers` threads are busy, the pool starves. `_warn_if_nested_submit_would_deadlock` detects this and emits a one-time warning — preserve this detection when changing pool management.
29
33
  - **`ResultRecordMetadata` tolerates unknown serializer types.** When loading persisted metadata, an unrecognized serializer `type` is converted to an `UnknownSerializer` placeholder rather than raising `ValidationError`. This allows inspecting result metadata when the serializer implementation is unavailable in the current environment. However, known serializer types with invalid fields still raise `ValidationError`. `UnknownSerializer.dumps()` and `UnknownSerializer.loads()` raise `RuntimeError` — the tolerance is for inspection only, not actual serialization/deserialization.
30
34
 
31
35
  ## Logging
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.6.30.dev4"
3
+ __build_date__ = "2026-05-06 08:56:13.081322+00:00"
4
+ __git_commit__ = "2b9d462118706889dfeee26df45a1b6108491070"
5
+ __dirty__ = False
@@ -8,6 +8,7 @@ import multiprocessing
8
8
  import multiprocessing.context
9
9
  import os
10
10
  import signal
11
+ import sys
11
12
  import threading
12
13
  import time
13
14
  from contextlib import (
@@ -66,7 +67,7 @@ from prefect.context import (
66
67
  hydrated_context,
67
68
  serialize_context,
68
69
  )
69
- from prefect.engine import handle_engine_signals
70
+ from prefect.engine import _drive_run_flow_result, handle_engine_signals
70
71
  from prefect.events.related import RelatedResource, tags_as_related_resources
71
72
  from prefect.events.utilities import emit_event
72
73
  from prefect.exceptions import (
@@ -92,6 +93,8 @@ from prefect.logging.loggers import (
92
93
  )
93
94
  from prefect.results import (
94
95
  ResultStore,
96
+ _aget_default_persist_result,
97
+ _get_default_persist_result,
95
98
  get_result_store,
96
99
  should_persist_result,
97
100
  )
@@ -109,6 +112,7 @@ from prefect.states import (
109
112
  exception_to_failed_state,
110
113
  return_value_to_state,
111
114
  )
115
+ from prefect.telemetry._metrics import RunMetrics
112
116
  from prefect.telemetry.run_telemetry import (
113
117
  LABELS_TRACEPARENT_KEY,
114
118
  TRACEPARENT_KEY,
@@ -142,6 +146,7 @@ P = ParamSpec("P")
142
146
  R = TypeVar("R")
143
147
 
144
148
  MINIMUM_HEARTBEAT_INTERVAL = 30
149
+ _engine_logger = get_logger("engine")
145
150
  _CONTROL_CHANNEL_ENV_KEYS = frozenset(
146
151
  {"PREFECT__CONTROL_PORT", "PREFECT__CONTROL_TOKEN"}
147
152
  )
@@ -220,15 +225,18 @@ def load_flow_run(flow_run_id: UUID) -> FlowRun:
220
225
  return flow_run
221
226
 
222
227
 
228
+ def _load_flow_from_runtime_entrypoint(entrypoint: str) -> Flow[..., Any]:
229
+ try:
230
+ return load_flow_from_entrypoint(entrypoint, use_placeholder_flow=False)
231
+ except MissingFlowError:
232
+ return load_function_and_convert_to_flow(entrypoint)
233
+
234
+
223
235
  def load_flow(flow_run: FlowRun) -> Flow[..., Any]:
224
236
  entrypoint = os.environ.get("PREFECT__FLOW_ENTRYPOINT")
225
237
 
226
238
  if entrypoint:
227
- # we should not accept a placeholder flow at runtime
228
- try:
229
- flow = load_flow_from_entrypoint(entrypoint, use_placeholder_flow=False)
230
- except MissingFlowError:
231
- flow = load_function_and_convert_to_flow(entrypoint)
239
+ flow = _load_flow_from_runtime_entrypoint(entrypoint)
232
240
  else:
233
241
  flow = run_coro_as_sync(
234
242
  load_flow_from_flow_run(flow_run, use_placeholder_flow=False)
@@ -242,6 +250,51 @@ def load_flow_and_flow_run(flow_run_id: UUID) -> tuple[FlowRun, Flow[..., Any]]:
242
250
  return flow_run, flow
243
251
 
244
252
 
253
+ def _run_flow_from_runtime_entrypoint(flow_run_id: UUID, entrypoint: str) -> None:
254
+ configure_from_env()
255
+
256
+ with handle_engine_signals(flow_run_id):
257
+ flow_run = load_flow_run(flow_run_id=flow_run_id)
258
+ run_logger = flow_run_logger(flow_run=flow_run)
259
+
260
+ try:
261
+ flow = _load_flow_from_runtime_entrypoint(entrypoint)
262
+ except Exception:
263
+ run_logger.error(
264
+ "Unexpected exception encountered when trying to load flow",
265
+ exc_info=True,
266
+ )
267
+ raise
268
+
269
+ with RunMetrics(flow_run, flow):
270
+ run_result = run_flow(flow, flow_run=flow_run, error_logger=run_logger)
271
+ _drive_run_flow_result(flow, run_result)
272
+
273
+
274
+ def _main(argv: list[str] | None = None) -> int:
275
+ args = sys.argv[1:] if argv is None else argv
276
+ if len(args) != 1:
277
+ _engine_logger.error(
278
+ "Invalid flow entrypoint. Expected one argument; received: %s", args
279
+ )
280
+ return 1
281
+
282
+ flow_run_id_value = os.environ.get("PREFECT__FLOW_RUN_ID")
283
+ try:
284
+ flow_run_id = UUID(flow_run_id_value) if flow_run_id_value else None
285
+ except ValueError:
286
+ flow_run_id = None
287
+
288
+ if flow_run_id is None:
289
+ _engine_logger.error(
290
+ "Invalid flow run id. Expected PREFECT__FLOW_RUN_ID to contain a UUID."
291
+ )
292
+ return 1
293
+
294
+ _run_flow_from_runtime_entrypoint(flow_run_id, args[0])
295
+ return 0
296
+
297
+
245
298
  @contextmanager
246
299
  def _send_heartbeats(
247
300
  engine: "BaseFlowRunEngine[Any, Any]",
@@ -602,6 +655,32 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
602
655
  )
603
656
  self.short_circuit = True
604
657
 
658
+ if (
659
+ not self.short_circuit
660
+ and not self._flow_run_name_set
661
+ and self.flow.flow_run_name
662
+ ):
663
+ if self.flow_run is None:
664
+ raise ValueError("Flow run not set")
665
+
666
+ with FlowRunContext(
667
+ flow=self.flow,
668
+ flow_run=self.flow_run,
669
+ parameters=self.parameters,
670
+ client=self.client,
671
+ task_runner=self.flow.task_runner,
672
+ result_store=get_result_store().update_for_flow(self.flow, _sync=True),
673
+ ):
674
+ flow_run_name = resolve_custom_flow_run_name(
675
+ flow=self.flow, parameters=self.parameters or {}
676
+ )
677
+ self.client.set_flow_run_name(
678
+ flow_run_id=self.flow_run.id, name=flow_run_name
679
+ )
680
+ self.flow_run.name = flow_run_name
681
+ self._flow_run_name_set = True
682
+ self._telemetry.update_run_name(name=flow_run_name)
683
+
605
684
  new_state = Running()
606
685
  state = self.set_state(new_state)
607
686
  while state.is_pending():
@@ -927,6 +1006,12 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
927
1006
  if log_prints:
928
1007
  stack.enter_context(patch_print())
929
1008
  task_runner = stack.enter_context(self.flow.task_runner.duplicate())
1009
+ result_store = get_result_store().update_for_flow(self.flow, _sync=True)
1010
+ persist_result = (
1011
+ self.flow.persist_result
1012
+ if self.flow.persist_result is not None
1013
+ else _get_default_persist_result()
1014
+ )
930
1015
  stack.enter_context(
931
1016
  FlowRunContext(
932
1017
  flow=self.flow,
@@ -934,13 +1019,9 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
934
1019
  flow_run=self.flow_run,
935
1020
  parameters=self.parameters,
936
1021
  client=client,
937
- result_store=get_result_store().update_for_flow(
938
- self.flow, _sync=True
939
- ),
1022
+ result_store=result_store,
940
1023
  task_runner=task_runner,
941
- persist_result=self.flow.persist_result
942
- if self.flow.persist_result is not None
943
- else should_persist_result(),
1024
+ persist_result=persist_result,
944
1025
  )
945
1026
  )
946
1027
  # Set deployment context vars only if this is the top-level deployment run
@@ -1248,6 +1329,32 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1248
1329
  )
1249
1330
  self.short_circuit = True
1250
1331
 
1332
+ if (
1333
+ not self.short_circuit
1334
+ and not self._flow_run_name_set
1335
+ and self.flow.flow_run_name
1336
+ ):
1337
+ if self.flow_run is None:
1338
+ raise ValueError("Flow run not set")
1339
+
1340
+ with FlowRunContext(
1341
+ flow=self.flow,
1342
+ flow_run=self.flow_run,
1343
+ parameters=self.parameters,
1344
+ client=self.client,
1345
+ task_runner=self.flow.task_runner,
1346
+ result_store=get_result_store().update_for_flow(self.flow, _sync=True),
1347
+ ):
1348
+ flow_run_name = resolve_custom_flow_run_name(
1349
+ flow=self.flow, parameters=self.parameters or {}
1350
+ )
1351
+ await self.client.set_flow_run_name(
1352
+ flow_run_id=self.flow_run.id, name=flow_run_name
1353
+ )
1354
+ self.flow_run.name = flow_run_name
1355
+ self._flow_run_name_set = True
1356
+ self._telemetry.update_run_name(name=flow_run_name)
1357
+
1251
1358
  new_state = Running()
1252
1359
  state = await self.set_state(new_state)
1253
1360
  while state.is_pending():
@@ -1566,6 +1673,12 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1566
1673
  if log_prints:
1567
1674
  stack.enter_context(patch_print())
1568
1675
  task_runner = stack.enter_context(self.flow.task_runner.duplicate())
1676
+ result_store = get_result_store().update_for_flow(self.flow, _sync=True)
1677
+ persist_result = (
1678
+ self.flow.persist_result
1679
+ if self.flow.persist_result is not None
1680
+ else await _aget_default_persist_result()
1681
+ )
1569
1682
  stack.enter_context(
1570
1683
  FlowRunContext(
1571
1684
  flow=self.flow,
@@ -1573,13 +1686,9 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1573
1686
  flow_run=self.flow_run,
1574
1687
  parameters=self.parameters,
1575
1688
  client=client,
1576
- result_store=get_result_store().update_for_flow(
1577
- self.flow, _sync=True
1578
- ),
1689
+ result_store=result_store,
1579
1690
  task_runner=task_runner,
1580
- persist_result=self.flow.persist_result
1581
- if self.flow.persist_result is not None
1582
- else should_persist_result(),
1691
+ persist_result=persist_result,
1583
1692
  )
1584
1693
  )
1585
1694
  # Set deployment context vars only if this is the top-level deployment run
@@ -2119,3 +2228,7 @@ def run_flow_in_subprocess(
2119
2228
  process.start()
2120
2229
 
2121
2230
  return process
2231
+
2232
+
2233
+ if __name__ == "__main__":
2234
+ raise SystemExit(_main())
@@ -1886,10 +1886,14 @@ class Flow(Generic[P, R]):
1886
1886
  return_type=return_type,
1887
1887
  )
1888
1888
 
1889
- async def avisualize(self, *args: "P.args", **kwargs: "P.kwargs") -> None:
1889
+ async def avisualize(
1890
+ self,
1891
+ *args: "P.args",
1892
+ **kwargs: "P.kwargs",
1893
+ ) -> None:
1890
1894
  """
1891
- Generates a graphviz object representing the current flow. In IPython notebooks,
1892
- it's rendered inline, otherwise in a new window as a PNG.
1895
+ Generates a visualization representing the current flow. In IPython notebooks,
1896
+ graphviz output is rendered inline, otherwise in a new window as a PNG.
1893
1897
 
1894
1898
  Raises:
1895
1899
  - ImportError: If `graphviz` isn't installed.
@@ -1920,7 +1924,6 @@ class Flow(Generic[P, R]):
1920
1924
  self.fn(*args, **kwargs)
1921
1925
 
1922
1926
  graph = build_task_dependencies(tracker)
1923
-
1924
1927
  visualize_task_dependencies(graph, self.name)
1925
1928
 
1926
1929
  except GraphvizImportError:
@@ -1945,10 +1948,14 @@ class Flow(Generic[P, R]):
1945
1948
  raise new_exception
1946
1949
 
1947
1950
  @async_dispatch(avisualize)
1948
- def visualize(self, *args: "P.args", **kwargs: "P.kwargs") -> None:
1951
+ def visualize(
1952
+ self,
1953
+ *args: "P.args",
1954
+ **kwargs: "P.kwargs",
1955
+ ) -> None:
1949
1956
  """
1950
- Generates a graphviz object representing the current flow. In IPython notebooks,
1951
- it's rendered inline, otherwise in a new window as a PNG.
1957
+ Generates a visualization representing the current flow. In IPython notebooks,
1958
+ graphviz output is rendered inline, otherwise in a new window as a PNG.
1952
1959
 
1953
1960
  Raises:
1954
1961
  - ImportError: If `graphviz` isn't installed.
@@ -1980,7 +1987,6 @@ class Flow(Generic[P, R]):
1980
1987
  self.fn(*args, **kwargs)
1981
1988
 
1982
1989
  graph = build_task_dependencies(tracker)
1983
-
1984
1990
  visualize_task_dependencies(graph, self.name)
1985
1991
 
1986
1992
  except GraphvizImportError:
@@ -2004,6 +2010,112 @@ class Flow(Generic[P, R]):
2004
2010
  new_exception.__traceback__ = e.__traceback__
2005
2011
  raise new_exception
2006
2012
 
2013
+ async def agenerate_mermaid_graph(
2014
+ self,
2015
+ *args: "P.args",
2016
+ **kwargs: "P.kwargs",
2017
+ ) -> str:
2018
+ """
2019
+ Generates a Mermaid flowchart diagram representing the structure of the current
2020
+ flow and returns it as a string.
2021
+
2022
+ Returns:
2023
+ A Mermaid `flowchart TD` diagram string.
2024
+
2025
+ Raises:
2026
+ - FlowVisualizationError: If the flow can't be visualized for any other reason.
2027
+ """
2028
+ from prefect.utilities.visualization import (
2029
+ FlowVisualizationError,
2030
+ TaskVizTracker,
2031
+ VisualizationUnsupportedError,
2032
+ build_mermaid_dependencies,
2033
+ )
2034
+
2035
+ if not PREFECT_TESTING_UNIT_TEST_MODE:
2036
+ warnings.warn(
2037
+ "`flow.generate_mermaid_graph()` will execute code inside of your flow"
2038
+ " that is not decorated with `@task` or `@flow`."
2039
+ )
2040
+
2041
+ try:
2042
+ with TaskVizTracker() as tracker:
2043
+ if self.isasync:
2044
+ await self.fn(*args, **kwargs) # type: ignore[reportGeneralTypeIssues]
2045
+ else:
2046
+ self.fn(*args, **kwargs)
2047
+
2048
+ return build_mermaid_dependencies(tracker)
2049
+
2050
+ except VisualizationUnsupportedError:
2051
+ raise
2052
+ except FlowVisualizationError:
2053
+ raise
2054
+ except Exception as e:
2055
+ msg = (
2056
+ "It's possible you are trying to visualize a flow that contains "
2057
+ "code that directly interacts with the result of a task"
2058
+ " inside of the flow. \nTry passing a `viz_return_value` "
2059
+ "to the task decorator, e.g. `@task(viz_return_value=[1, 2, 3]).`"
2060
+ )
2061
+
2062
+ new_exception = type(e)(str(e) + "\n" + msg)
2063
+ new_exception.__traceback__ = e.__traceback__
2064
+ raise new_exception
2065
+
2066
+ def generate_mermaid_graph(
2067
+ self,
2068
+ *args: "P.args",
2069
+ **kwargs: "P.kwargs",
2070
+ ) -> str:
2071
+ """
2072
+ Generates a Mermaid flowchart diagram representing the structure of the current
2073
+ flow and returns it as a string.
2074
+
2075
+ Returns:
2076
+ A Mermaid `flowchart TD` diagram string.
2077
+
2078
+ Raises:
2079
+ - FlowVisualizationError: If the flow can't be visualized for any other reason.
2080
+ """
2081
+ from prefect.utilities.visualization import (
2082
+ FlowVisualizationError,
2083
+ TaskVizTracker,
2084
+ VisualizationUnsupportedError,
2085
+ build_mermaid_dependencies,
2086
+ )
2087
+
2088
+ if not PREFECT_TESTING_UNIT_TEST_MODE:
2089
+ warnings.warn(
2090
+ "`flow.generate_mermaid_graph()` will execute code inside of your flow"
2091
+ " that is not decorated with `@task` or `@flow`."
2092
+ )
2093
+
2094
+ try:
2095
+ with TaskVizTracker() as tracker:
2096
+ if self.isasync:
2097
+ run_coro_as_sync(self.fn(*args, **kwargs))
2098
+ else:
2099
+ self.fn(*args, **kwargs)
2100
+
2101
+ return build_mermaid_dependencies(tracker)
2102
+
2103
+ except VisualizationUnsupportedError:
2104
+ raise
2105
+ except FlowVisualizationError:
2106
+ raise
2107
+ except Exception as e:
2108
+ msg = (
2109
+ "It's possible you are trying to visualize a flow that contains "
2110
+ "code that directly interacts with the result of a task"
2111
+ " inside of the flow. \nTry passing a `viz_return_value` "
2112
+ "to the task decorator, e.g. `@task(viz_return_value=[1, 2, 3]).`"
2113
+ )
2114
+
2115
+ new_exception = type(e)(str(e) + "\n" + msg)
2116
+ new_exception.__traceback__ = e.__traceback__
2117
+ raise new_exception
2118
+
2007
2119
 
2008
2120
  class FlowDecorator:
2009
2121
  @overload
@@ -2542,7 +2654,13 @@ class InfrastructureBoundFlow(Flow[P, R]):
2542
2654
  upload_bundle_to_storage,
2543
2655
  )
2544
2656
  from prefect.context import FlowRunContext, TagsContext
2545
- from prefect.results import get_result_store, resolve_result_storage
2657
+ from prefect.results import (
2658
+ _DefaultResultStorageSource,
2659
+ _get_default_result_storage,
2660
+ _result_storage_is_configured_for_remote_retrieval,
2661
+ get_result_store,
2662
+ resolve_result_storage,
2663
+ )
2546
2664
  from prefect.states import Pending, Scheduled
2547
2665
  from prefect.tasks import Task
2548
2666
 
@@ -2563,26 +2681,36 @@ class InfrastructureBoundFlow(Flow[P, R]):
2563
2681
  )
2564
2682
 
2565
2683
  current_result_store = get_result_store()
2566
- # Check result storage and use the work pool default if needed
2567
- if self.result_storage is None and (
2568
- current_result_store.result_storage is None
2569
- or isinstance(current_result_store.result_storage, LocalFileSystem)
2684
+ if not _result_storage_is_configured_for_remote_retrieval(
2685
+ self.result_storage,
2686
+ current_result_store.result_storage,
2570
2687
  ):
2688
+ result_storage = None
2571
2689
  if (
2572
2690
  work_pool.storage_configuration.default_result_storage_block_id
2573
- is None
2691
+ is not None
2574
2692
  ):
2693
+ result_storage = resolve_result_storage(
2694
+ work_pool.storage_configuration.default_result_storage_block_id,
2695
+ _sync=True,
2696
+ )
2697
+ else:
2698
+ default_result_storage = _get_default_result_storage()
2699
+ if (
2700
+ default_result_storage.source
2701
+ is not _DefaultResultStorageSource.LOCAL_STORAGE_PATH
2702
+ ):
2703
+ result_storage = default_result_storage.storage
2704
+
2705
+ if result_storage is None:
2575
2706
  logger.warning(
2576
2707
  f"Flow {self.name!r} has no result storage configured. Please configure "
2577
2708
  "result storage for the flow if you want to retrieve the result for the flow run."
2578
2709
  )
2710
+ flow = self
2579
2711
  else:
2580
- # Use the work pool's default result storage block for the flow run to ensure the caller can retrieve the result
2581
2712
  flow = self.with_options(
2582
- result_storage=resolve_result_storage(
2583
- work_pool.storage_configuration.default_result_storage_block_id,
2584
- _sync=True,
2585
- ),
2713
+ result_storage=result_storage,
2586
2714
  persist_result=True,
2587
2715
  )
2588
2716
  else: