prefect-client 3.7.4.dev3__tar.gz → 3.7.5__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 (452) hide show
  1. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/PKG-INFO +1 -1
  2. prefect_client-3.7.5/src/prefect/_build_info.py +5 -0
  3. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/concurrency/threads.py +9 -0
  4. prefect_client-3.7.5/src/prefect/_internal/schemas/_registry.py +13 -0
  5. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/schemas/validators.py +5 -1
  6. prefect_client-3.7.5/src/prefect/_internal/urls.py +57 -0
  7. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/schemas/actions.py +18 -2
  8. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/schemas/schedules.py +28 -7
  9. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/base.py +27 -0
  10. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/flow_engine.py +2 -0
  11. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/flows.py +5 -1
  12. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/AGENTS.md +2 -2
  13. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_event_emitter.py +24 -16
  14. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/storage.py +51 -9
  15. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/background_workers.py +2 -0
  16. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/deployments.py +5 -1
  17. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/flow_runs.py +78 -5
  18. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/server.py +35 -14
  19. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/ui/schemas.py +6 -0
  20. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/workers.py +95 -6
  21. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/_types.py +4 -0
  22. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/services.py +37 -0
  23. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/tasks.py +13 -0
  24. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/asyncutils/__init__.py +19 -1
  25. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/dockerutils.py +1 -0
  26. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/schema_tools/AGENTS.md +1 -0
  27. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/schema_tools/validation.py +14 -2
  28. prefect_client-3.7.4.dev3/src/prefect/_build_info.py +0 -5
  29. prefect_client-3.7.4.dev3/src/prefect/_internal/urls.py +0 -29
  30. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/.gitignore +0 -0
  31. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/LICENSE +0 -0
  32. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/README.md +0 -0
  33. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/hatch_build.py +0 -0
  34. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/pyproject.toml +0 -0
  35. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/.prefectignore +0 -0
  36. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/AGENTS.md +0 -0
  37. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/__init__.py +0 -0
  38. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/__main__.py +0 -0
  39. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/__init__.py +0 -0
  40. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/_launchers.py +0 -0
  41. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/bundles/__init__.py +0 -0
  42. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/bundles/execute.py +0 -0
  43. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/plugins/__init__.py +0 -0
  44. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/plugins/apply.py +0 -0
  45. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  46. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/plugins/manager.py +0 -0
  47. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/plugins/spec.py +0 -0
  48. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/sla/__init__.py +0 -0
  49. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/sla/client.py +0 -0
  50. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_experimental/sla/objects.py +0 -0
  51. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_flow_run_suspension.py +0 -0
  52. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/__init__.py +0 -0
  53. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/_logging.py +0 -0
  54. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/analytics/__init__.py +0 -0
  55. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  56. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/analytics/client.py +0 -0
  57. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/analytics/device_id.py +0 -0
  58. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/analytics/emit.py +0 -0
  59. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/analytics/enabled.py +0 -0
  60. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/analytics/events.py +0 -0
  61. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/analytics/milestones.py +0 -0
  62. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/analytics/notice.py +0 -0
  63. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/analytics/service.py +0 -0
  64. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/ast_utils.py +0 -0
  65. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/buildx.py +0 -0
  66. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/compatibility/__init__.py +0 -0
  67. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  68. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/compatibility/backports.py +0 -0
  69. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/compatibility/blocks.py +0 -0
  70. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  71. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/compatibility/deprecated_paths.py +0 -0
  72. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/compatibility/migration.py +0 -0
  73. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/compatibility/starlette.py +0 -0
  74. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/concurrency/__init__.py +0 -0
  75. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/concurrency/api.py +0 -0
  76. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/concurrency/calls.py +0 -0
  77. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  78. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  79. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/concurrency/inspection.py +0 -0
  80. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/concurrency/primitives.py +0 -0
  81. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/concurrency/services.py +0 -0
  82. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/concurrency/waiters.py +0 -0
  83. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/control_listener.py +0 -0
  84. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/deprecated.py +0 -0
  85. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/engine.py +0 -0
  86. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/git.py +0 -0
  87. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/infrastructure_exit_codes.py +0 -0
  88. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/installation.py +0 -0
  89. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/integrations.py +0 -0
  90. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/launchers.py +0 -0
  91. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/lazy.py +0 -0
  92. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/metrics.py +0 -0
  93. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/observability.py +0 -0
  94. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/observers.py +0 -0
  95. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/plugins/__init__.py +0 -0
  96. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/plugins/apply.py +0 -0
  97. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/plugins/collections.py +0 -0
  98. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/plugins/diagnostics.py +0 -0
  99. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/plugins/manager.py +0 -0
  100. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/plugins/spec.py +0 -0
  101. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/plugins/startup.py +0 -0
  102. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/pydantic/__init__.py +0 -0
  103. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/pydantic/schemas.py +0 -0
  104. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  105. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  106. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  107. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/pytz.py +0 -0
  108. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/result_records.py +0 -0
  109. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/retries.py +0 -0
  110. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/schema.py +0 -0
  111. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/schemas/__init__.py +0 -0
  112. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/schemas/bases.py +0 -0
  113. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/schemas/fields.py +0 -0
  114. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/schemas/serializers.py +0 -0
  115. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  116. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/states.py +0 -0
  117. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/testing.py +0 -0
  118. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/uuid7.py +0 -0
  119. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/version_checking.py +0 -0
  120. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/versioning.py +0 -0
  121. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/waiters.py +0 -0
  122. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_internal/websockets.py +0 -0
  123. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/__init__.py +0 -0
  124. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/fetcher.py +0 -0
  125. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/generator.py +0 -0
  126. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/models.py +0 -0
  127. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/naming.py +0 -0
  128. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/renderer.py +0 -0
  129. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/schema_converter.py +0 -0
  130. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/templates/__init__.py +0 -0
  131. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  132. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/types.py +0 -0
  133. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_sdk/unions.py +0 -0
  134. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_vendor/croniter/__init__.py +0 -0
  135. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/_vendor/croniter/croniter.py +0 -0
  136. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/agent.py +0 -0
  137. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/analytics/__init__.py +0 -0
  138. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/artifacts.py +0 -0
  139. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/assets/__init__.py +0 -0
  140. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/assets/core.py +0 -0
  141. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/assets/materialize.py +0 -0
  142. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/automations.py +0 -0
  143. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/blocks/AGENTS.md +0 -0
  144. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/blocks/__init__.py +0 -0
  145. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/blocks/abstract.py +0 -0
  146. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/blocks/core.py +0 -0
  147. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/blocks/fields.py +0 -0
  148. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/blocks/notifications.py +0 -0
  149. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/blocks/redis.py +0 -0
  150. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/blocks/system.py +0 -0
  151. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/blocks/webhook.py +0 -0
  152. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/bundles/__init__.py +0 -0
  153. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/bundles/_file_collector.py +0 -0
  154. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/bundles/_ignore_filter.py +0 -0
  155. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/bundles/_path_resolver.py +0 -0
  156. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/bundles/_zip_builder.py +0 -0
  157. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/bundles/_zip_extractor.py +0 -0
  158. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/bundles/execute.py +0 -0
  159. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/cache_policies.py +0 -0
  160. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/AGENTS.md +0 -0
  161. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/__init__.py +0 -0
  162. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/attribution.py +0 -0
  163. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/base.py +0 -0
  164. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/cloud.py +0 -0
  165. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/collections.py +0 -0
  166. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/constants.py +0 -0
  167. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/__init__.py +0 -0
  168. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  169. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  170. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  171. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_automations/client.py +0 -0
  172. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  173. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  174. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  175. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  176. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  177. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  178. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  179. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  180. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  181. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  182. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  183. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_events/client.py +0 -0
  184. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  185. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  186. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  187. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_flows/client.py +0 -0
  188. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  189. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_logs/client.py +0 -0
  190. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  191. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_variables/client.py +0 -0
  192. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  193. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  194. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/base.py +0 -0
  195. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/orchestration/routes.py +0 -0
  196. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/schemas/__init__.py +0 -0
  197. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/schemas/events.py +0 -0
  198. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/schemas/filters.py +0 -0
  199. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/schemas/objects.py +0 -0
  200. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/schemas/responses.py +0 -0
  201. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/schemas/sorting.py +0 -0
  202. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/schemas/worker_channel.py +0 -0
  203. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/subscriptions.py +0 -0
  204. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/types/__init__.py +0 -0
  205. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  206. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/client/utilities.py +0 -0
  207. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/AGENTS.md +0 -0
  208. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/__init__.py +0 -0
  209. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/_asyncio.py +0 -0
  210. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/_events.py +0 -0
  211. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/_leases.py +0 -0
  212. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/_sync.py +0 -0
  213. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/asyncio.py +0 -0
  214. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/context.py +0 -0
  215. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/services.py +0 -0
  216. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/sync.py +0 -0
  217. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/v1/__init__.py +0 -0
  218. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  219. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/v1/_events.py +0 -0
  220. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/v1/asyncio.py +0 -0
  221. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/v1/context.py +0 -0
  222. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/v1/services.py +0 -0
  223. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/concurrency/v1/sync.py +0 -0
  224. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/context.py +0 -0
  225. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/AGENTS.md +0 -0
  226. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/__init__.py +0 -0
  227. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/deployments.py +0 -0
  228. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/flow_runs.py +0 -0
  229. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/runner.py +0 -0
  230. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/schedules.py +0 -0
  231. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/steps/__init__.py +0 -0
  232. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/steps/core.py +0 -0
  233. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/steps/pull.py +0 -0
  234. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/deployments/steps/utility.py +0 -0
  235. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/docker/__init__.py +0 -0
  236. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/docker/_buildx.py +0 -0
  237. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/docker/docker_image.py +0 -0
  238. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/engine.py +0 -0
  239. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/AGENTS.md +0 -0
  240. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/__init__.py +0 -0
  241. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/actions.py +0 -0
  242. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/clients.py +0 -0
  243. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/filters.py +0 -0
  244. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/related.py +0 -0
  245. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/schemas/__init__.py +0 -0
  246. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/schemas/automations.py +0 -0
  247. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  248. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/schemas/events.py +0 -0
  249. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/schemas/labelling.py +0 -0
  250. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/subscribers.py +0 -0
  251. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/utilities.py +0 -0
  252. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/events/worker.py +0 -0
  253. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/exceptions.py +0 -0
  254. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/filesystems.py +0 -0
  255. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/flow_runs.py +0 -0
  256. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/futures.py +0 -0
  257. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/infrastructure/__init__.py +0 -0
  258. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/infrastructure/base.py +0 -0
  259. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  260. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  261. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  262. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  263. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  264. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  265. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/input/__init__.py +0 -0
  266. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/input/actions.py +0 -0
  267. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/input/run_input.py +0 -0
  268. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/locking/__init__.py +0 -0
  269. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/locking/_filelock.py +0 -0
  270. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/locking/filesystem.py +0 -0
  271. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/locking/memory.py +0 -0
  272. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/locking/protocol.py +0 -0
  273. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/logging/AGENTS.md +0 -0
  274. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/logging/__init__.py +0 -0
  275. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/logging/clients.py +0 -0
  276. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/logging/configuration.py +0 -0
  277. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/logging/filters.py +0 -0
  278. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/logging/formatters.py +0 -0
  279. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/logging/handlers.py +0 -0
  280. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/logging/highlighters.py +0 -0
  281. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/logging/loggers.py +0 -0
  282. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/logging/logging.yml +0 -0
  283. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/main.py +0 -0
  284. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/plugins.py +0 -0
  285. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/py.typed +0 -0
  286. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/results.py +0 -0
  287. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/__init__.py +0 -0
  288. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_cancel_finalizer.py +0 -0
  289. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_cancellation_manager.py +0 -0
  290. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_control_channel.py +0 -0
  291. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_deployment_registry.py +0 -0
  292. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_flow_resolver.py +0 -0
  293. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_flow_run_executor.py +0 -0
  294. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_hook_runner.py +0 -0
  295. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_limit_manager.py +0 -0
  296. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_process_manager.py +0 -0
  297. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  298. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_starter_bundle.py +0 -0
  299. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_starter_direct.py +0 -0
  300. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_starter_engine.py +0 -0
  301. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_state_proposer.py +0 -0
  302. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_workspace_resolver.py +0 -0
  303. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/_workspace_starter.py +0 -0
  304. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/runner.py +0 -0
  305. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runner/server.py +0 -0
  306. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runtime/__init__.py +0 -0
  307. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runtime/deployment.py +0 -0
  308. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runtime/flow_run.py +0 -0
  309. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/runtime/task_run.py +0 -0
  310. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/schedules.py +0 -0
  311. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/serializers.py +0 -0
  312. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/__init__.py +0 -0
  313. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/_ui_static.py +0 -0
  314. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/admin.py +0 -0
  315. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/artifacts.py +0 -0
  316. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/automations.py +0 -0
  317. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/block_capabilities.py +0 -0
  318. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/block_documents.py +0 -0
  319. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/block_schemas.py +0 -0
  320. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/block_types.py +0 -0
  321. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/clients.py +0 -0
  322. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/collections.py +0 -0
  323. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  324. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/concurrency_limits.py +0 -0
  325. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  326. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/csrf_token.py +0 -0
  327. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/dependencies.py +0 -0
  328. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/events.py +0 -0
  329. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/flow_run_states.py +0 -0
  330. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/flows.py +0 -0
  331. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/logs.py +0 -0
  332. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/middleware.py +0 -0
  333. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/root.py +0 -0
  334. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/run_history.py +0 -0
  335. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/saved_searches.py +0 -0
  336. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  337. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/task_run_states.py +0 -0
  338. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/task_runs.py +0 -0
  339. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/task_workers.py +0 -0
  340. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/templates.py +0 -0
  341. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/ui/__init__.py +0 -0
  342. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/ui/flow_runs.py +0 -0
  343. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/ui/flows.py +0 -0
  344. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/ui/task_runs.py +0 -0
  345. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/validation.py +0 -0
  346. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/variables.py +0 -0
  347. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/server/api/work_queues.py +0 -0
  348. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/AGENTS.md +0 -0
  349. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/__init__.py +0 -0
  350. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/base.py +0 -0
  351. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/constants.py +0 -0
  352. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/context.py +0 -0
  353. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/legacy.py +0 -0
  354. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/__init__.py +0 -0
  355. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/_defaults.py +0 -0
  356. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/api.py +0 -0
  357. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/cli.py +0 -0
  358. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/client.py +0 -0
  359. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/cloud.py +0 -0
  360. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/deployments.py +0 -0
  361. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/events.py +0 -0
  362. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/experiments.py +0 -0
  363. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/flows.py +0 -0
  364. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/internal.py +0 -0
  365. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/logging.py +0 -0
  366. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/plugins.py +0 -0
  367. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/results.py +0 -0
  368. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/root.py +0 -0
  369. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/runner.py +0 -0
  370. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/__init__.py +0 -0
  371. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/api.py +0 -0
  372. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/concurrency.py +0 -0
  373. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/database.py +0 -0
  374. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/deployments.py +0 -0
  375. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/docket.py +0 -0
  376. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/ephemeral.py +0 -0
  377. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/events.py +0 -0
  378. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  379. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/logs.py +0 -0
  380. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/root.py +0 -0
  381. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/tasks.py +0 -0
  382. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/ui.py +0 -0
  383. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/server/worker_channel.py +0 -0
  384. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/tasks.py +0 -0
  385. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/telemetry.py +0 -0
  386. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/testing.py +0 -0
  387. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/models/worker.py +0 -0
  388. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/profiles.py +0 -0
  389. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/profiles.toml +0 -0
  390. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/settings/sources.py +0 -0
  391. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/states.py +0 -0
  392. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/task_engine.py +0 -0
  393. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/task_runners.py +0 -0
  394. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/task_runs.py +0 -0
  395. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/task_worker.py +0 -0
  396. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/telemetry/__init__.py +0 -0
  397. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/telemetry/run_telemetry.py +0 -0
  398. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/transactions.py +0 -0
  399. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/types/__init__.py +0 -0
  400. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/types/_concurrency.py +0 -0
  401. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/types/_datetime.py +0 -0
  402. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/types/entrypoint.py +0 -0
  403. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/types/names.py +0 -0
  404. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/AGENTS.md +0 -0
  405. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/__init__.py +0 -0
  406. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/annotations.py +0 -0
  407. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/asyncutils/AGENTS.md +0 -0
  408. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/callables/AGENTS.md +0 -0
  409. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/callables/__init__.py +0 -0
  410. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/collections.py +0 -0
  411. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/compat.py +0 -0
  412. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/context.py +0 -0
  413. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/dispatch.py +0 -0
  414. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/engine/AGENTS.md +0 -0
  415. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/engine/__init__.py +0 -0
  416. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/filesystem/AGENTS.md +0 -0
  417. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/filesystem/__init__.py +0 -0
  418. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/generics.py +0 -0
  419. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/hashing.py +0 -0
  420. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/importtools.py +0 -0
  421. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/math.py +0 -0
  422. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/names.py +0 -0
  423. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/processutils/AGENTS.md +0 -0
  424. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/processutils/__init__.py +0 -0
  425. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/pydantic.py +0 -0
  426. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/render_swagger.py +0 -0
  427. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  428. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  429. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/services.py +0 -0
  430. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/slugify.py +0 -0
  431. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/templating/AGENTS.md +0 -0
  432. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/templating/__init__.py +0 -0
  433. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/text.py +0 -0
  434. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/timeout.py +0 -0
  435. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/urls.py +0 -0
  436. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/utilities/visualization.py +0 -0
  437. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/variables.py +0 -0
  438. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/AGENTS.md +0 -0
  439. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/__init__.py +0 -0
  440. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/_cleanup.py +0 -0
  441. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/_cleanup_handlers.py +0 -0
  442. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/_worker_channel/__init__.py +0 -0
  443. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/_worker_channel/_protocol.py +0 -0
  444. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/_worker_channel/_state.py +0 -0
  445. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/_worker_channel/_sync.py +0 -0
  446. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/_worker_channel/_transport.py +0 -0
  447. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/base.py +0 -0
  448. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/block.py +0 -0
  449. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/cloud.py +0 -0
  450. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/process.py +0 -0
  451. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/src/prefect/workers/server.py +0 -0
  452. {prefect_client-3.7.4.dev3 → prefect_client-3.7.5}/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.7.4.dev3
3
+ Version: 3.7.5
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.7.5"
3
+ __build_date__ = "2026-06-18 21:29:47.502929+00:00"
4
+ __git_commit__ = "756685ab55d5afe34017dc5c7ab68cf79600d664"
5
+ __dirty__ = False
@@ -38,9 +38,18 @@ def _reset_after_fork_in_child():
38
38
 
39
39
  This handler is called by os.register_at_fork() in the child process after fork().
40
40
  """
41
+ global _global_loop, _run_sync_loop
42
+
41
43
  for instance in list(_active_instances):
42
44
  instance.reset_for_fork()
43
45
 
46
+ # Clear global references so get_global_loop() / get_run_sync_loop() create
47
+ # fresh instances. After fork the old EventLoopThread objects have a stale
48
+ # Thread whose is_alive() still returns True (the dead thread's tstate lock
49
+ # is held), so the "is the thread alive?" guard in the getters never fires.
50
+ _global_loop = None
51
+ _run_sync_loop = None
52
+
44
53
 
45
54
  # Register fork handler if supported (POSIX systems)
46
55
  if hasattr(os, "register_at_fork"):
@@ -0,0 +1,13 @@
1
+ from referencing import Registry
2
+
3
+
4
+ def non_fetching_registry() -> Registry:
5
+ """An empty `referencing.Registry` that disables remote `$ref` fetching.
6
+
7
+ Passing an explicit registry to jsonschema suppresses its default behavior of
8
+ fetching `$ref` URLs over the network while validating an instance. With an
9
+ empty registry, external references raise `referencing.exceptions.Unresolvable`
10
+ without any network request, while in-document references (`#/$defs/...`) still
11
+ resolve normally.
12
+ """
13
+ return Registry()
@@ -21,7 +21,9 @@ from uuid import UUID
21
21
  from zoneinfo import ZoneInfo
22
22
 
23
23
  import jsonschema
24
+ import referencing.exceptions
24
25
 
26
+ from prefect._internal.schemas._registry import non_fetching_registry
25
27
  from prefect.types._datetime import DateTime, create_datetime_instance, get_timezones
26
28
  from prefect.utilities.collections import isiterable
27
29
  from prefect.utilities.filesystem import relative_path_to_current_platform
@@ -65,7 +67,9 @@ def validate_values_conform_to_schema(
65
67
 
66
68
  try:
67
69
  if schema is not None and values is not None:
68
- jsonschema.validate(values, schema)
70
+ jsonschema.validate(values, schema, registry=non_fetching_registry())
71
+ except referencing.exceptions.Unresolvable as exc:
72
+ raise ValueError(f"Validation failed. Failure reason: {exc}") from exc
69
73
  except jsonschema.ValidationError as exc:
70
74
  if exc.json_path == "$":
71
75
  error_message = "Validation failed."
@@ -0,0 +1,57 @@
1
+ import re
2
+ from collections.abc import Iterable
3
+ from urllib.parse import urlparse, urlunparse
4
+
5
+ _URL_AUTH_PATTERN = re.compile(
6
+ r"(?P<scheme>https?://)[^/\s'\"<>]*@", flags=re.IGNORECASE
7
+ )
8
+
9
+
10
+ def strip_auth_from_url(url: str) -> str:
11
+ """
12
+ Remove authentication credentials (username/password) from a URL.
13
+
14
+ Useful for sanitizing URLs before including them in error messages
15
+ or logs to avoid leaking secrets.
16
+ """
17
+ try:
18
+ parsed = urlparse(url)
19
+
20
+ if not parsed.hostname:
21
+ return url
22
+
23
+ netloc = parsed.hostname
24
+ if parsed.port:
25
+ netloc = f"{netloc}:{parsed.port}"
26
+
27
+ return urlunparse(
28
+ (
29
+ parsed.scheme,
30
+ netloc,
31
+ parsed.path,
32
+ parsed.params,
33
+ parsed.query,
34
+ parsed.fragment,
35
+ )
36
+ )
37
+ except ValueError:
38
+ return strip_auth_from_urls_in_text(url)
39
+
40
+
41
+ def strip_auth_from_urls_in_text(
42
+ text: str, extra_secrets: Iterable[str] | None = None
43
+ ) -> str:
44
+ """
45
+ Remove authentication credentials from HTTP(S) URLs embedded in text.
46
+
47
+ Useful for sanitizing command output before including it in error messages
48
+ or logs. Any caller-supplied secrets are replaced with a redaction marker.
49
+ """
50
+ if not text:
51
+ return text
52
+
53
+ sanitized = _URL_AUTH_PATTERN.sub(r"\g<scheme>", text)
54
+ for secret in extra_secrets or ():
55
+ if secret:
56
+ sanitized = sanitized.replace(secret, "***")
57
+ return sanitized
@@ -6,6 +6,7 @@ from typing import Annotated, Any, Callable, Optional, TypeVar, Union
6
6
  from uuid import UUID, uuid4
7
7
 
8
8
  import jsonschema
9
+ import referencing.exceptions
9
10
  from pydantic import (
10
11
  AfterValidator,
11
12
  BaseModel,
@@ -18,6 +19,7 @@ from pydantic import (
18
19
  import prefect.client.schemas.objects as objects
19
20
  from prefect._internal.result_records import ResultRecordMetadata
20
21
  from prefect._internal.schema import ParameterSchema
22
+ from prefect._internal.schemas._registry import non_fetching_registry
21
23
  from prefect._internal.schemas.bases import ActionBaseModel
22
24
  from prefect._internal.schemas.validators import (
23
25
  convert_to_strings,
@@ -324,7 +326,14 @@ class DeploymentCreate(ActionBaseModel):
324
326
  if "default" in v and k in required:
325
327
  required.remove(k)
326
328
 
327
- jsonschema.validate(self.job_variables, variables_schema)
329
+ try:
330
+ jsonschema.validate(
331
+ self.job_variables,
332
+ variables_schema,
333
+ registry=non_fetching_registry(),
334
+ )
335
+ except referencing.exceptions.Unresolvable as exc:
336
+ raise jsonschema.ValidationError(str(exc)) from exc
328
337
 
329
338
 
330
339
  class DeploymentUpdate(ActionBaseModel):
@@ -403,7 +412,14 @@ class DeploymentUpdate(ActionBaseModel):
403
412
  required.remove(k)
404
413
 
405
414
  if variables_schema is not None:
406
- jsonschema.validate(self.job_variables, variables_schema)
415
+ try:
416
+ jsonschema.validate(
417
+ self.job_variables,
418
+ variables_schema,
419
+ registry=non_fetching_registry(),
420
+ )
421
+ except referencing.exceptions.Unresolvable as exc:
422
+ raise jsonschema.ValidationError(str(exc)) from exc
407
423
 
408
424
 
409
425
  class DeploymentBranch(ActionBaseModel):
@@ -26,6 +26,26 @@ MAX_ITERATIONS = 1000
26
26
  MAX_RRULE_LENGTH = 6500
27
27
 
28
28
 
29
+ def _iana_timezone_name(tzinfo: datetime.tzinfo) -> str:
30
+ """Return a valid IANA timezone name for *tzinfo*, or `"UTC"`."""
31
+ for attr in ("key", "name"):
32
+ value: Optional[str] = getattr(tzinfo, attr, None)
33
+ if value and is_valid_timezone(value):
34
+ return value
35
+
36
+ filename: Optional[str] = getattr(tzinfo, "_filename", None)
37
+ if filename:
38
+ normalized = filename.replace("\\", "/")
39
+ marker = "/zoneinfo/"
40
+ idx = normalized.find(marker)
41
+ if idx != -1:
42
+ candidate = normalized[idx + len(marker) :]
43
+ if candidate and is_valid_timezone(candidate):
44
+ return candidate
45
+
46
+ return "UTC"
47
+
48
+
29
49
  def is_valid_timezone(v: str) -> bool:
30
50
  """
31
51
  Validate that the provided timezone is a valid IANA timezone.
@@ -204,26 +224,27 @@ class RRuleSchedule(PrefectBaseModel):
204
224
  if isinstance(rrule, dateutil.rrule.rrule):
205
225
  dtstart = _rrule_dt(rrule)
206
226
  if dtstart and dtstart.tzinfo is not None:
207
- timezone = dtstart.tzinfo.tzname(dtstart)
227
+ timezone = _iana_timezone_name(dtstart.tzinfo)
208
228
  else:
209
229
  timezone = "UTC"
210
230
  return RRuleSchedule(rrule=str(rrule), timezone=timezone)
211
231
  rrules = _rrule(rrule)
212
232
  dtstarts = [dts for rr in rrules if (dts := _rrule_dt(rr)) is not None]
213
233
  unique_dstarts = set(d.astimezone(ZoneInfo("UTC")) for d in dtstarts)
214
- unique_timezones = set(d.tzinfo for d in dtstarts if d.tzinfo is not None)
234
+ unique_tz_names = set(
235
+ _iana_timezone_name(d.tzinfo) for d in dtstarts if d.tzinfo is not None
236
+ )
215
237
 
216
- if len(unique_timezones) > 1:
238
+ if len(unique_tz_names) > 1:
217
239
  raise ValueError(
218
- f"rruleset has too many dtstart timezones: {unique_timezones}"
240
+ f"rruleset has too many dtstart timezones: {unique_tz_names}"
219
241
  )
220
242
 
221
243
  if len(unique_dstarts) > 1:
222
244
  raise ValueError(f"rruleset has too many dtstarts: {unique_dstarts}")
223
245
 
224
- if unique_dstarts and unique_timezones:
225
- [unique_tz] = unique_timezones
226
- timezone = unique_tz.tzname(dtstarts[0])
246
+ if unique_dstarts and unique_tz_names:
247
+ [timezone] = unique_tz_names
227
248
  else:
228
249
  timezone = "UTC"
229
250
 
@@ -278,6 +278,33 @@ def _interval_schedule_to_dict(schedule: IntervalSchedule) -> dict[str, Any]:
278
278
  return schedule_config
279
279
 
280
280
 
281
+ def _deployment_already_saved_to_prefect_file(
282
+ deployment: dict[str, Any],
283
+ prefect_file: Path = Path("prefect.yaml"),
284
+ ) -> bool:
285
+ """
286
+ Return True if `prefect.yaml` already contains a deployment entry matching the
287
+ given deployment's name and entrypoint.
288
+
289
+ Used to decide whether the interactive `prefect deploy` flow should offer to
290
+ persist a newly-created deployment: a deployment that is already declared in
291
+ the file does not need to be saved again, but a brand-new one (even when the
292
+ file otherwise exists) should still be offered up for saving.
293
+ """
294
+ if not prefect_file.exists():
295
+ return False
296
+
297
+ with prefect_file.open(mode="r") as f:
298
+ contents = yaml.safe_load(f) or {}
299
+
300
+ for existing in contents.get("deployments") or []:
301
+ if existing.get("name") == deployment.get("name") and existing.get(
302
+ "entrypoint"
303
+ ) == deployment.get("entrypoint"):
304
+ return True
305
+ return False
306
+
307
+
281
308
  def _save_deployment_to_prefect_file(
282
309
  deployment: dict[str, Any],
283
310
  build_steps: list[dict[str, Any]] | None = None,
@@ -972,6 +972,7 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
972
972
  parent_task = Task(
973
973
  name=self.flow.name, fn=self.flow.fn, version=self.flow.version
974
974
  )
975
+ setattr(parent_task, "_is_subflow_tracking_task", True)
975
976
 
976
977
  parent_task_run = run_coro_as_sync(
977
978
  parent_task.create_run(
@@ -1667,6 +1668,7 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1667
1668
  parent_task = Task(
1668
1669
  name=self.flow.name, fn=self.flow.fn, version=self.flow.version
1669
1670
  )
1671
+ setattr(parent_task, "_is_subflow_tracking_task", True)
1670
1672
 
1671
1673
  parent_task_run = await parent_task.create_run(
1672
1674
  flow_run_context=flow_run_ctx,
@@ -706,7 +706,11 @@ class Flow(Generic[P, R]):
706
706
  from fastapi.encoders import jsonable_encoder
707
707
 
708
708
  serialized_parameters[key] = jsonable_encoder(value)
709
- except (TypeError, ValueError):
709
+ except (TypeError, ValueError, RecursionError):
710
+ # `jsonable_encoder` recurses into unknown objects with no cycle
711
+ # or depth limit, so a deeply-nested or self-referential value
712
+ # raises `RecursionError`. Treat it like any other unserializable
713
+ # value and fall back to the placeholder below.
710
714
  logger.debug(
711
715
  f"Parameter {key!r} for flow {self.name!r} is unserializable. "
712
716
  f"Type {type(value).__name__!r} and will not be stored "
@@ -15,7 +15,7 @@ Thin facade over single-responsibility extracted classes. New behavior belongs i
15
15
  | CancelFinalizer | _cancel_finalizer.py | Persist Cancelled state after kill; fall back to Crashed if state cannot be confirmed |
16
16
  | ControlChannel | _control_channel.py | Runner-side TCP loopback IPC for delivering cancel intent to child processes before kill |
17
17
  | HookRunner | _hook_runner.py | on_cancellation / on_crashed hook execution |
18
- | EventEmitter | _event_emitter.py | Event emission via EventsClient; degrades to NullEventsClient on WebSocket rejection |
18
+ | EventEmitter | _event_emitter.py | Event emission via EventsClient; degrades to NullEventsClient on any WebSocket connection failure |
19
19
  | LimitManager | _limit_manager.py | Concurrency limiting |
20
20
  | DeploymentRegistry | _deployment_registry.py | Deployment/flow/storage/bundle maps |
21
21
  | ScheduledRunPoller | _scheduled_run_poller.py | Poll loop, run discovery, scheduling |
@@ -49,7 +49,7 @@ These will be removed once internal callers (notably ProcessWorker) are migrated
49
49
 
50
50
  ## EventEmitter WebSocket Degradation
51
51
 
52
- `EventEmitter.__aenter__` catches `websockets.exceptions.InvalidStatus` (HTTP 4xx rejections) and silently swaps the failed client for a `NullEventsClient`. This handles old clients (≤3.6.13) connecting to servers ≥3.6.14 with `PREFECT_SERVER_API_AUTH_STRING` configured the server rejects the WebSocket handshake, but events are non-critical telemetry so the flow run must not crash. A `WARNING` is logged. If `__aenter__` raises, `__aexit__` is **not** called on the original client (it was never successfully entered); the replacement `NullEventsClient` is entered instead.
52
+ `EventEmitter.__aenter__` catches connection failures and silently swaps the failed client for a `NullEventsClient` events are non-critical telemetry (the runner emits only `prefect.runner.cancelled-flow-run`), so the flow run must not crash when the events WebSocket is unreachable. Two failure classes are caught (`_NONFATAL_CONNECTION_EXCEPTIONS`): permanent rejections (`websockets.exceptions.InvalidStatus`, i.e. HTTP 4xx — e.g. a client ≤3.6.13 connecting to a server ≥3.6.14 with `PREFECT_SERVER_API_AUTH_STRING` configured) and transient failures (`RETRYABLE_EXCEPTIONS` from `events/clients.py`: `ConnectionClosed`, `TimeoutError`, `OSError`) that outlive the events client's own reconnection attempts. A `WARNING` is logged. If `__aenter__` raises, `__aexit__` is **not** called on the original client (it was never successfully entered); the replacement `NullEventsClient` is entered instead.
53
53
 
54
54
  ## AsyncExitStack LIFO Ordering
55
55
 
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Any, Callable
5
5
  from cachetools import TTLCache
6
6
  from websockets.exceptions import InvalidStatus as _WsInvalidStatus
7
7
 
8
- from prefect.events.clients import NullEventsClient
8
+ from prefect.events.clients import RETRYABLE_EXCEPTIONS, NullEventsClient
9
9
  from prefect.events.related import tags_as_related_resources
10
10
  from prefect.events.schemas.events import Event, RelatedResource, Resource
11
11
  from prefect.logging import get_logger
@@ -18,12 +18,19 @@ if TYPE_CHECKING:
18
18
  from prefect.client.schemas.responses import DeploymentResponse
19
19
  from prefect.events.clients import EventsClient
20
20
 
21
- # Exceptions that indicate a permanent connection failure (e.g. auth rejected).
22
- # On these, EventEmitter degrades gracefully to NullEventsClient rather than
23
- # crashing the flow run. This preserves backwards-compatibility with clients
24
- # running against a server that has PREFECT_SERVER_API_AUTH_STRING configured
25
- # (server >=3.6.14) where the WS handshake is rejected with HTTP 401/403.
26
- _NONFATAL_CONNECTION_EXCEPTIONS: tuple[type[Exception], ...] = (_WsInvalidStatus,)
21
+ # Connection failures that must not crash the flow run. The events WebSocket
22
+ # carries non-critical telemetry, so a failure to connect degrades to
23
+ # NullEventsClient rather than taking the flow run down with it.
24
+ # - _WsInvalidStatus: the server rejected the handshake (HTTP 401/403), e.g. a
25
+ # client <=3.6.13 connecting to a server >=3.6.14 that has
26
+ # PREFECT_SERVER_API_AUTH_STRING configured. A permanent failure.
27
+ # - RETRYABLE_EXCEPTIONS: transient failures (handshake timeout, dropped
28
+ # connection, network errors) that the events client already retries; once
29
+ # those retries are exhausted the error must still not be fatal here.
30
+ _NONFATAL_CONNECTION_EXCEPTIONS: tuple[type[Exception], ...] = (
31
+ _WsInvalidStatus,
32
+ *RETRYABLE_EXCEPTIONS,
33
+ )
27
34
 
28
35
 
29
36
  def _default_get_events_client() -> "EventsClient":
@@ -60,17 +67,18 @@ class EventEmitter:
60
67
  try:
61
68
  await self._events_client.__aenter__()
62
69
  except _NONFATAL_CONNECTION_EXCEPTIONS as exc:
63
- # The events WebSocket was rejected by the server (e.g. HTTP 401/403).
64
- # This happens when an old client (<=3.6.13) connects to a server
65
- # >=3.6.14 that has PREFECT_SERVER_API_AUTH_STRING configured: the
66
- # server now requires the "prefect" subprotocol + auth handshake, but
67
- # old clients omit it. Events are non-critical telemetry, so we
68
- # degrade gracefully instead of crashing the flow run.
70
+ # The events WebSocket could not be established -- either rejected by
71
+ # the server (HTTP 401/403, e.g. a client <=3.6.13 connecting to a
72
+ # server >=3.6.14 with PREFECT_SERVER_API_AUTH_STRING configured) or a
73
+ # transient connection failure that outlived the events client's own
74
+ # retries. Events are non-critical telemetry, so degrade gracefully
75
+ # instead of crashing the flow run.
69
76
  self._logger.warning(
70
77
  "Unable to connect to the events WebSocket (%s). "
71
- "Event data will not be emitted for this runner. "
72
- "Upgrade the Prefect client to >=3.6.14 to restore event support "
73
- "when the server has authentication configured.",
78
+ "Event data will not be emitted for this runner; the flow run "
79
+ "will continue. Upgrade the Prefect client to >=3.6.14 to "
80
+ "restore event support if the server has authentication "
81
+ "configured.",
74
82
  exc,
75
83
  )
76
84
  # __aenter__ failed, so __aexit__ must NOT be called on the original
@@ -14,7 +14,7 @@ from typing import (
14
14
  Union,
15
15
  runtime_checkable,
16
16
  )
17
- from urllib.parse import quote, urlparse, urlsplit, urlunparse
17
+ from urllib.parse import quote, unquote, urlparse, urlsplit, urlunparse
18
18
  from uuid import uuid4
19
19
 
20
20
  import fsspec # pyright: ignore[reportMissingTypeStubs]
@@ -22,7 +22,7 @@ from anyio import run_process
22
22
  from pydantic import SecretStr
23
23
 
24
24
  from prefect._internal.concurrency.api import create_call, from_async
25
- from prefect._internal.urls import strip_auth_from_url
25
+ from prefect._internal.urls import strip_auth_from_url, strip_auth_from_urls_in_text
26
26
  from prefect.blocks.core import Block, BlockNotSavedError
27
27
  from prefect.blocks.system import Secret
28
28
  from prefect.filesystems import ReadableDeploymentStorage, WritableDeploymentStorage
@@ -499,6 +499,21 @@ class GitRepository:
499
499
  else exc
500
500
  )
501
501
  safe_url = strip_auth_from_url(self._url)
502
+ sanitized_stderr = strip_auth_from_urls_in_text(
503
+ _decode_stderr(exc),
504
+ extra_secrets=_url_auth_secrets(self._url, repository_url),
505
+ )
506
+ # Surface the raw git error at DEBUG so users can opt in via log
507
+ # level when the hint patterns don't match. The exception chain is
508
+ # suppressed above when credentials are present, so DEBUG is the
509
+ # only way to see the actual git output in that case.
510
+ if sanitized_stderr:
511
+ self._logger.debug(
512
+ "git clone failed (exit %d) for %r: %s",
513
+ exc.returncode,
514
+ safe_url,
515
+ sanitized_stderr.strip(),
516
+ )
502
517
  error_message = (
503
518
  f"Failed to clone repository {safe_url!r} with exit code"
504
519
  f" {exc.returncode}."
@@ -506,6 +521,14 @@ class GitRepository:
506
521
  hint = _get_git_clone_error_hint(exc)
507
522
  if hint:
508
523
  error_message += f" {hint}"
524
+ elif sanitized_stderr:
525
+ # No pattern matched -- surface the actual git error so the
526
+ # user doesn't have to enable DEBUG to know what went wrong.
527
+ snippet = sanitized_stderr.strip().splitlines()
528
+ # Keep the last few lines; git's final 'fatal:' line is usually
529
+ # the actionable one.
530
+ tail = " | ".join(snippet[-3:])
531
+ error_message += f" git stderr: {tail}"
509
532
  raise RuntimeError(error_message) from exc_chain
510
533
 
511
534
  if self._commit_sha:
@@ -985,15 +1008,34 @@ _GIT_CLONE_ERROR_HINTS: list[tuple[str, str]] = [
985
1008
  ]
986
1009
 
987
1010
 
1011
+ def _decode_stderr(exc: subprocess.CalledProcessError) -> str:
1012
+ """Decode a CalledProcessError's stderr to text, tolerating bytes/None."""
1013
+ if not exc.stderr:
1014
+ return ""
1015
+ if isinstance(exc.stderr, bytes):
1016
+ return exc.stderr.decode("utf-8", errors="replace")
1017
+ return str(exc.stderr)
1018
+
1019
+
1020
+ def _url_auth_secrets(*urls: str) -> list[str]:
1021
+ """Extract userinfo values from URLs so echoed auth can be redacted."""
1022
+ secrets: list[str] = []
1023
+ seen: set[str] = set()
1024
+ for url in urls:
1025
+ parsed = urlparse(url)
1026
+ for value in (parsed.username, parsed.password):
1027
+ if not value:
1028
+ continue
1029
+ for secret in (value, unquote(value)):
1030
+ if secret and secret not in seen:
1031
+ secrets.append(secret)
1032
+ seen.add(secret)
1033
+ return secrets
1034
+
1035
+
988
1036
  def _get_git_clone_error_hint(exc: subprocess.CalledProcessError) -> str | None:
989
1037
  """Extract a resolution hint from a git clone CalledProcessError's stderr."""
990
- stderr = ""
991
- if exc.stderr:
992
- stderr = (
993
- exc.stderr.decode("utf-8", errors="replace")
994
- if isinstance(exc.stderr, bytes)
995
- else str(exc.stderr)
996
- )
1038
+ stderr = _decode_stderr(exc)
997
1039
  for pattern, hint in _GIT_CLONE_ERROR_HINTS:
998
1040
  if pattern.lower() in stderr.lower():
999
1041
  return hint
@@ -14,6 +14,7 @@ from prefect.server.models.work_queues import mark_work_queues_ready
14
14
  from prefect.server.services.cancellation_cleanup import (
15
15
  cancel_child_task_runs,
16
16
  cancel_subflow_run,
17
+ handle_cancelling_timeout,
17
18
  )
18
19
  from prefect.server.services.db_vacuum import (
19
20
  vacuum_events_with_retention_overrides,
@@ -40,6 +41,7 @@ task_functions: list[Callable[..., Any]] = [
40
41
  delete_task_run_logs,
41
42
  delete_flow_run_logs,
42
43
  # Find-and-flood pattern tasks used by perpetual services
44
+ handle_cancelling_timeout,
43
45
  cancel_child_task_runs,
44
46
  cancel_subflow_run,
45
47
  fail_expired_pause,
@@ -311,7 +311,11 @@ async def update_deployment(
311
311
  )
312
312
  try:
313
313
  deployment.check_valid_configuration(work_pool.base_job_template)
314
- except (MissingVariableError, jsonschema.exceptions.ValidationError) as exc:
314
+ except (
315
+ MissingVariableError,
316
+ jsonschema.exceptions.ValidationError,
317
+ ValidationError,
318
+ ) as exc:
315
319
  raise HTTPException(
316
320
  status_code=status.HTTP_409_CONFLICT,
317
321
  detail=f"Error creating deployment: {exc!r}",