prefect-client 3.6.24.dev3__tar.gz → 3.6.24.dev5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/PKG-INFO +1 -1
  2. prefect_client-3.6.24.dev5/src/prefect/_build_info.py +5 -0
  3. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/concurrency/services.py +25 -3
  4. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/blocks/notifications.py +21 -12
  5. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/AGENTS.md +1 -0
  6. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/runner.py +11 -3
  7. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/steps/utility.py +3 -3
  8. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/AGENTS.md +9 -0
  9. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/clients.py +57 -0
  10. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/worker.py +6 -0
  11. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/flow_runs.py +12 -12
  12. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/server.py +17 -0
  13. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/AGENTS.md +1 -0
  14. prefect_client-3.6.24.dev5/src/prefect/settings/models/events.py +27 -0
  15. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/root.py +6 -0
  16. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/AGENTS.md +2 -0
  17. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/engine.py +22 -6
  18. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/processutils.py +2 -2
  19. prefect_client-3.6.24.dev3/src/prefect/_build_info.py +0 -5
  20. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/.gitignore +0 -0
  21. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/LICENSE +0 -0
  22. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/README.md +0 -0
  23. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/pyproject.toml +0 -0
  24. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/.prefectignore +0 -0
  25. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/AGENTS.md +0 -0
  26. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/__init__.py +0 -0
  27. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/__main__.py +0 -0
  28. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/__init__.py +0 -0
  29. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/bundles/__init__.py +0 -0
  30. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/bundles/_file_collector.py +0 -0
  31. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/bundles/_ignore_filter.py +0 -0
  32. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/bundles/_path_resolver.py +0 -0
  33. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/bundles/_zip_builder.py +0 -0
  34. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/bundles/_zip_extractor.py +0 -0
  35. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/bundles/execute.py +0 -0
  36. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/plugins/__init__.py +0 -0
  37. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/plugins/apply.py +0 -0
  38. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  39. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/plugins/manager.py +0 -0
  40. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/plugins/spec.py +0 -0
  41. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/sla/__init__.py +0 -0
  42. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/sla/client.py +0 -0
  43. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_experimental/sla/objects.py +0 -0
  44. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/__init__.py +0 -0
  45. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/_logging.py +0 -0
  46. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/analytics/__init__.py +0 -0
  47. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  48. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/analytics/client.py +0 -0
  49. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/analytics/device_id.py +0 -0
  50. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/analytics/emit.py +0 -0
  51. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/analytics/enabled.py +0 -0
  52. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/analytics/events.py +0 -0
  53. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/analytics/milestones.py +0 -0
  54. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/analytics/notice.py +0 -0
  55. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/analytics/service.py +0 -0
  56. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/compatibility/__init__.py +0 -0
  57. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  58. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/compatibility/backports.py +0 -0
  59. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/compatibility/blocks.py +0 -0
  60. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  61. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/compatibility/migration.py +0 -0
  62. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/compatibility/starlette.py +0 -0
  63. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/concurrency/__init__.py +0 -0
  64. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/concurrency/api.py +0 -0
  65. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/concurrency/calls.py +0 -0
  66. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  67. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  68. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/concurrency/inspection.py +0 -0
  69. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/concurrency/primitives.py +0 -0
  70. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/concurrency/threads.py +0 -0
  71. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/concurrency/waiters.py +0 -0
  72. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/installation.py +0 -0
  73. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/integrations.py +0 -0
  74. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/lazy.py +0 -0
  75. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/observability.py +0 -0
  76. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/pydantic/__init__.py +0 -0
  77. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/pydantic/schemas.py +0 -0
  78. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  79. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  80. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  81. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/pytz.py +0 -0
  82. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/retries.py +0 -0
  83. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/schemas/__init__.py +0 -0
  84. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/schemas/bases.py +0 -0
  85. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/schemas/fields.py +0 -0
  86. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/schemas/serializers.py +0 -0
  87. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/schemas/validators.py +0 -0
  88. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  89. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/testing.py +0 -0
  90. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/urls.py +0 -0
  91. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/uuid7.py +0 -0
  92. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_internal/websockets.py +0 -0
  93. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_observers.py +0 -0
  94. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_result_records.py +0 -0
  95. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/__init__.py +0 -0
  96. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/fetcher.py +0 -0
  97. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/generator.py +0 -0
  98. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/models.py +0 -0
  99. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/naming.py +0 -0
  100. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/renderer.py +0 -0
  101. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/schema_converter.py +0 -0
  102. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/templates/__init__.py +0 -0
  103. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  104. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/types.py +0 -0
  105. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_sdk/unions.py +0 -0
  106. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_states.py +0 -0
  107. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_vendor/croniter/__init__.py +0 -0
  108. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_vendor/croniter/croniter.py +0 -0
  109. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_versioning.py +0 -0
  110. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/_waiters.py +0 -0
  111. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/agent.py +0 -0
  112. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/analytics/__init__.py +0 -0
  113. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/artifacts.py +0 -0
  114. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/assets/__init__.py +0 -0
  115. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/assets/core.py +0 -0
  116. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/assets/materialize.py +0 -0
  117. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/automations.py +0 -0
  118. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/blocks/__init__.py +0 -0
  119. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/blocks/abstract.py +0 -0
  120. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/blocks/core.py +0 -0
  121. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/blocks/fields.py +0 -0
  122. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/blocks/redis.py +0 -0
  123. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/blocks/system.py +0 -0
  124. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/blocks/webhook.py +0 -0
  125. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/cache_policies.py +0 -0
  126. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/AGENTS.md +0 -0
  127. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/__init__.py +0 -0
  128. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/_version_checking.py +0 -0
  129. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/attribution.py +0 -0
  130. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/base.py +0 -0
  131. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/cloud.py +0 -0
  132. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/collections.py +0 -0
  133. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/constants.py +0 -0
  134. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/__init__.py +0 -0
  135. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  136. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  137. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  138. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_automations/client.py +0 -0
  139. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  140. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  141. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  142. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  143. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  144. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  145. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  146. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  147. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  148. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  149. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  150. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_events/client.py +0 -0
  151. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  152. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  153. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  154. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_flows/client.py +0 -0
  155. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  156. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_logs/client.py +0 -0
  157. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  158. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_variables/client.py +0 -0
  159. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  160. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  161. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/base.py +0 -0
  162. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/orchestration/routes.py +0 -0
  163. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/schemas/__init__.py +0 -0
  164. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/schemas/actions.py +0 -0
  165. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/schemas/events.py +0 -0
  166. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/schemas/filters.py +0 -0
  167. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/schemas/objects.py +0 -0
  168. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/schemas/responses.py +0 -0
  169. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/schemas/schedules.py +0 -0
  170. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/schemas/sorting.py +0 -0
  171. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/subscriptions.py +0 -0
  172. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/types/__init__.py +0 -0
  173. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  174. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/client/utilities.py +0 -0
  175. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/AGENTS.md +0 -0
  176. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/__init__.py +0 -0
  177. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/_asyncio.py +0 -0
  178. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/_events.py +0 -0
  179. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/_leases.py +0 -0
  180. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/_sync.py +0 -0
  181. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/asyncio.py +0 -0
  182. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/context.py +0 -0
  183. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/services.py +0 -0
  184. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/sync.py +0 -0
  185. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/v1/__init__.py +0 -0
  186. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  187. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/v1/_events.py +0 -0
  188. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/v1/asyncio.py +0 -0
  189. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/v1/context.py +0 -0
  190. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/v1/services.py +0 -0
  191. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/concurrency/v1/sync.py +0 -0
  192. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/context.py +0 -0
  193. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/__init__.py +0 -0
  194. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/base.py +0 -0
  195. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/deployments.py +0 -0
  196. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/flow_runs.py +0 -0
  197. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/schedules.py +0 -0
  198. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/steps/__init__.py +0 -0
  199. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/steps/core.py +0 -0
  200. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/deployments/steps/pull.py +0 -0
  201. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/docker/__init__.py +0 -0
  202. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/docker/docker_image.py +0 -0
  203. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/engine.py +0 -0
  204. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/__init__.py +0 -0
  205. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/actions.py +0 -0
  206. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/filters.py +0 -0
  207. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/related.py +0 -0
  208. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/schemas/__init__.py +0 -0
  209. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/schemas/automations.py +0 -0
  210. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  211. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/schemas/events.py +0 -0
  212. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/schemas/labelling.py +0 -0
  213. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/subscribers.py +0 -0
  214. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/events/utilities.py +0 -0
  215. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/exceptions.py +0 -0
  216. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/filesystems.py +0 -0
  217. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/flow_engine.py +0 -0
  218. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/flows.py +0 -0
  219. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/futures.py +0 -0
  220. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/infrastructure/__init__.py +0 -0
  221. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/infrastructure/base.py +0 -0
  222. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  223. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  224. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  225. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  226. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  227. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  228. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/input/__init__.py +0 -0
  229. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/input/actions.py +0 -0
  230. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/input/run_input.py +0 -0
  231. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/locking/__init__.py +0 -0
  232. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/locking/filesystem.py +0 -0
  233. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/locking/memory.py +0 -0
  234. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/locking/protocol.py +0 -0
  235. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/logging/AGENTS.md +0 -0
  236. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/logging/__init__.py +0 -0
  237. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/logging/clients.py +0 -0
  238. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/logging/configuration.py +0 -0
  239. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/logging/filters.py +0 -0
  240. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/logging/formatters.py +0 -0
  241. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/logging/handlers.py +0 -0
  242. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/logging/highlighters.py +0 -0
  243. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/logging/loggers.py +0 -0
  244. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/logging/logging.yml +0 -0
  245. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/main.py +0 -0
  246. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/plugins.py +0 -0
  247. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/py.typed +0 -0
  248. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/results.py +0 -0
  249. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/AGENTS.md +0 -0
  250. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/__init__.py +0 -0
  251. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_cancellation_manager.py +0 -0
  252. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_deployment_registry.py +0 -0
  253. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_event_emitter.py +0 -0
  254. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_flow_resolver.py +0 -0
  255. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_flow_run_executor.py +0 -0
  256. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_hook_runner.py +0 -0
  257. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_limit_manager.py +0 -0
  258. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_process_manager.py +0 -0
  259. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  260. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_starter_bundle.py +0 -0
  261. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_starter_direct.py +0 -0
  262. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_starter_engine.py +0 -0
  263. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/_state_proposer.py +0 -0
  264. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/runner.py +0 -0
  265. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/server.py +0 -0
  266. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runner/storage.py +0 -0
  267. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runtime/__init__.py +0 -0
  268. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runtime/deployment.py +0 -0
  269. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runtime/flow_run.py +0 -0
  270. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/runtime/task_run.py +0 -0
  271. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/schedules.py +0 -0
  272. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/serializers.py +0 -0
  273. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/__init__.py +0 -0
  274. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/admin.py +0 -0
  275. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/artifacts.py +0 -0
  276. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/automations.py +0 -0
  277. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/background_workers.py +0 -0
  278. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/block_capabilities.py +0 -0
  279. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/block_documents.py +0 -0
  280. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/block_schemas.py +0 -0
  281. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/block_types.py +0 -0
  282. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/clients.py +0 -0
  283. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/collections.py +0 -0
  284. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  285. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/concurrency_limits.py +0 -0
  286. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  287. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/csrf_token.py +0 -0
  288. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/dependencies.py +0 -0
  289. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/deployments.py +0 -0
  290. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/events.py +0 -0
  291. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/flow_run_states.py +0 -0
  292. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/flow_runs.py +0 -0
  293. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/flows.py +0 -0
  294. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/logs.py +0 -0
  295. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/middleware.py +0 -0
  296. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/root.py +0 -0
  297. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/run_history.py +0 -0
  298. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/saved_searches.py +0 -0
  299. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  300. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/task_run_states.py +0 -0
  301. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/task_runs.py +0 -0
  302. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/task_workers.py +0 -0
  303. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/templates.py +0 -0
  304. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/ui/__init__.py +0 -0
  305. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/ui/flow_runs.py +0 -0
  306. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/ui/flows.py +0 -0
  307. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/ui/schemas.py +0 -0
  308. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/ui/task_runs.py +0 -0
  309. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/validation.py +0 -0
  310. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/variables.py +0 -0
  311. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/work_queues.py +0 -0
  312. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/server/api/workers.py +0 -0
  313. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/__init__.py +0 -0
  314. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/base.py +0 -0
  315. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/constants.py +0 -0
  316. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/context.py +0 -0
  317. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/legacy.py +0 -0
  318. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/__init__.py +0 -0
  319. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/_defaults.py +0 -0
  320. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/api.py +0 -0
  321. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/cli.py +0 -0
  322. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/client.py +0 -0
  323. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/cloud.py +0 -0
  324. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/deployments.py +0 -0
  325. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/experiments.py +0 -0
  326. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/flows.py +0 -0
  327. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/internal.py +0 -0
  328. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/logging.py +0 -0
  329. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/results.py +0 -0
  330. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/runner.py +0 -0
  331. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/__init__.py +0 -0
  332. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/api.py +0 -0
  333. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/concurrency.py +0 -0
  334. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/database.py +0 -0
  335. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/deployments.py +0 -0
  336. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/docket.py +0 -0
  337. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/ephemeral.py +0 -0
  338. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/events.py +0 -0
  339. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  340. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/logs.py +0 -0
  341. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/root.py +0 -0
  342. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/services.py +0 -0
  343. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/tasks.py +0 -0
  344. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/server/ui.py +0 -0
  345. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/tasks.py +0 -0
  346. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/telemetry.py +0 -0
  347. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/testing.py +0 -0
  348. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/models/worker.py +0 -0
  349. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/profiles.py +0 -0
  350. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/profiles.toml +0 -0
  351. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/settings/sources.py +0 -0
  352. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/states.py +0 -0
  353. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/task_engine.py +0 -0
  354. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/task_runners.py +0 -0
  355. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/task_runs.py +0 -0
  356. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/task_worker.py +0 -0
  357. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/tasks.py +0 -0
  358. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/telemetry/__init__.py +0 -0
  359. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/telemetry/_metrics.py +0 -0
  360. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/telemetry/run_telemetry.py +0 -0
  361. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/transactions.py +0 -0
  362. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/types/__init__.py +0 -0
  363. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/types/_concurrency.py +0 -0
  364. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/types/_datetime.py +0 -0
  365. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/types/_schema.py +0 -0
  366. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/types/entrypoint.py +0 -0
  367. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/types/names.py +0 -0
  368. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/__init__.py +0 -0
  369. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/_ast.py +0 -0
  370. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/_deprecated.py +0 -0
  371. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/_engine.py +0 -0
  372. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/_git.py +0 -0
  373. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/_infrastructure_exit_codes.py +0 -0
  374. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/annotations.py +0 -0
  375. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/asyncutils.py +0 -0
  376. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/callables.py +0 -0
  377. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/collections.py +0 -0
  378. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/compat.py +0 -0
  379. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/context.py +0 -0
  380. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/dispatch.py +0 -0
  381. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/dockerutils.py +0 -0
  382. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/filesystem.py +0 -0
  383. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/generics.py +0 -0
  384. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/hashing.py +0 -0
  385. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/importtools.py +0 -0
  386. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/math.py +0 -0
  387. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/names.py +0 -0
  388. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/pydantic.py +0 -0
  389. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/render_swagger.py +0 -0
  390. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  391. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  392. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/schema_tools/validation.py +0 -0
  393. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/services.py +0 -0
  394. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/slugify.py +0 -0
  395. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/templating.py +0 -0
  396. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/text.py +0 -0
  397. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/timeout.py +0 -0
  398. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/urls.py +0 -0
  399. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/utilities/visualization.py +0 -0
  400. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/variables.py +0 -0
  401. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/workers/__init__.py +0 -0
  402. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/workers/base.py +0 -0
  403. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/workers/block.py +0 -0
  404. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/workers/cloud.py +0 -0
  405. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/workers/process.py +0 -0
  406. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/src/prefect/workers/server.py +0 -0
  407. {prefect_client-3.6.24.dev3 → prefect_client-3.6.24.dev5}/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.24.dev3
3
+ Version: 3.6.24.dev5
4
4
  Summary: Workflow orchestration and management.
5
5
  Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
6
6
  Project-URL: Documentation, https://docs.prefect.io
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.6.24.dev5"
3
+ __build_date__ = "2026-03-27 08:21:08.545102+00:00"
4
+ __git_commit__ = "cb945cbe647c75a0476662c8daedee8530398fd7"
5
+ __dirty__ = False
@@ -57,9 +57,12 @@ if hasattr(os, "register_at_fork"):
57
57
  class _QueueServiceBase(abc.ABC, Generic[T]):
58
58
  _instances: dict[int, Self] = {}
59
59
  _instance_lock = threading.Lock()
60
+ _max_queue_size: int = 0 # 0 means unbounded
60
61
 
61
62
  def __init__(self, *args: Hashable) -> None:
62
- self._queue: queue.Queue[Optional[T]] = queue.Queue()
63
+ self._queue: queue.Queue[Optional[T]] = queue.Queue(
64
+ maxsize=self._max_queue_size
65
+ )
63
66
  self._loop: Optional[asyncio.AbstractEventLoop] = None
64
67
  self._done_event: Optional[asyncio.Event] = None
65
68
  self._task: Optional[asyncio.Task[None]] = None
@@ -85,7 +88,7 @@ class _QueueServiceBase(abc.ABC, Generic[T]):
85
88
  self._loop = None
86
89
  self._done_event = None
87
90
  self._task = None
88
- self._queue = queue.Queue()
91
+ self._queue = queue.Queue(maxsize=self._max_queue_size)
89
92
  self._lock = threading.Lock()
90
93
 
91
94
  @classmethod
@@ -345,7 +348,16 @@ class QueueService(_QueueServiceBase[T]):
345
348
  raise RuntimeError("Cannot put items in a stopped service instance.")
346
349
 
347
350
  logger.debug("Service %r enqueuing item %r", self, item)
348
- self._queue.put_nowait(self._prepare_item(item))
351
+ prepared = self._prepare_item(item)
352
+ try:
353
+ self._queue.put_nowait(prepared)
354
+ except queue.Full:
355
+ self._logger.warning(
356
+ "Service %r queue is full (%d items), dropping item",
357
+ type(self).__name__,
358
+ self._queue.qsize(),
359
+ )
360
+ self._on_item_dropped(prepared)
349
361
 
350
362
  def _prepare_item(self, item: T) -> T:
351
363
  """
@@ -356,6 +368,16 @@ class QueueService(_QueueServiceBase[T]):
356
368
  """
357
369
  return item
358
370
 
371
+ def _on_item_dropped(self, item: T) -> None:
372
+ """
373
+ Called when a prepared item is dropped because the queue is full.
374
+
375
+ Subclasses can override this to clean up any resources allocated
376
+ during _prepare_item.
377
+
378
+ The default implementation is a no-op.
379
+ """
380
+
359
381
  @abc.abstractmethod
360
382
  async def _handle(self, item: T) -> None:
361
383
  """
@@ -714,6 +714,8 @@ class MattermostWebhook(AbstractAppriseNotificationBlock):
714
714
  )
715
715
 
716
716
  def block_initialization(self) -> None:
717
+ from apprise import Apprise, AppriseAsset
718
+
717
719
  try:
718
720
  # Try importing for apprise>=1.18.0
719
721
  from apprise.plugins.mattermost import NotifyMattermost
@@ -723,19 +725,26 @@ class MattermostWebhook(AbstractAppriseNotificationBlock):
723
725
  NotifyMattermost, # pyright: ignore[reportUnknownVariableType] incomplete type hints in apprise
724
726
  )
725
727
 
726
- url = SecretStr(
727
- NotifyMattermost(
728
- token=self.token.get_secret_value(),
729
- fullpath=self.path,
730
- host=self.hostname,
731
- user=self.botname,
732
- channels=self.channels,
733
- include_image=self.include_image,
734
- port=self.port,
735
- secure=self.secure,
736
- ).url() # pyright: ignore[reportUnknownMemberType, reportUnknownArgumentType] incomplete type hints in apprise
728
+ # Add the NotifyMattermost instance directly rather than going through
729
+ # .url() because apprise>=1.9.9 no longer includes channels in the URL.
730
+ # apprise>=1.9.9 renamed `channels` to `targets`.
731
+ mattermost_instance = NotifyMattermost(
732
+ token=self.token.get_secret_value(),
733
+ fullpath=self.path,
734
+ host=self.hostname,
735
+ targets=self.channels,
736
+ include_image=self.include_image,
737
+ port=self.port,
738
+ secure=self.secure,
739
+ ) # pyright: ignore[reportUnknownVariableType] incomplete type hints in apprise
740
+
741
+ prefect_app_data = AppriseAsset(
742
+ app_id="Prefect Notifications",
743
+ app_desc="Prefect Notifications",
744
+ app_url="https://prefect.io",
737
745
  )
738
- self._start_apprise_client(url)
746
+ self._apprise_client = Apprise(asset=prefect_app_data)
747
+ self._apprise_client.add(mattermost_instance) # pyright: ignore[reportUnknownMemberType]
739
748
 
740
749
 
741
750
  class DiscordWebhook(AbstractAppriseNotificationBlock):
@@ -33,6 +33,7 @@ For module path entrypoints, the storage destination is temporarily prepended to
33
33
 
34
34
  ## Pitfalls
35
35
 
36
+ - **Flow source outside cwd**: `RunnerDeployment.from_flow()` computes the entrypoint path with `Path.relative_to(cwd)`. When the flow file is outside the working directory (e.g., on a different drive on Windows, or an absolute path not under cwd), `relative_to()` raises `ValueError` — the code falls back to `os.path.relpath()`, which may produce paths containing `..` components. Infrastructure that expects clean relative paths (no `..`) must handle this case.
36
37
  - **Windows shell mode**: `run_shell_script` always uses `asyncio.create_subprocess_shell` on Windows (`sys.platform == "win32"`), regardless of the `shell` parameter. This ensures cmd.exe built-ins (`echo`, `dir`, `set`, etc.) work. On non-Windows, `shell=False` (default) uses `create_subprocess_exec` with `shlex.split`.
37
38
  - **Step ID namespace**: `id` and `requires` are reserved keywords — do not use them as step output keys.
38
39
  - **Step import side effects**: steps are imported dynamically; packages listed in `requires` are installed into the current environment at execution time.
@@ -32,6 +32,7 @@ Example:
32
32
  from __future__ import annotations
33
33
 
34
34
  import importlib
35
+ import os
35
36
  import sys
36
37
  import tempfile
37
38
  from datetime import datetime, timedelta
@@ -1011,9 +1012,16 @@ class RunnerDeployment(BaseModel):
1011
1012
  raise ValueError(no_file_location_error)
1012
1013
 
1013
1014
  # set entrypoint
1014
- entry_path = (
1015
- Path(flow_file).absolute().relative_to(Path.cwd().absolute())
1016
- )
1015
+ try:
1016
+ entry_path = (
1017
+ Path(flow_file).absolute().relative_to(Path.cwd().absolute())
1018
+ )
1019
+ except ValueError:
1020
+ entry_path = Path(
1021
+ os.path.relpath(
1022
+ Path(flow_file).absolute(), Path.cwd().absolute()
1023
+ )
1024
+ )
1017
1025
  deployment.entrypoint = (
1018
1026
  f"{entry_path}:{getattr(flow.fn, '__qualname__', flow.fn.__name__)}"
1019
1027
  )
@@ -52,12 +52,12 @@ async def _stream_capture_process_output(
52
52
  async with create_task_group() as tg:
53
53
  tg.start_soon(
54
54
  stream_text,
55
- TextReceiveStream(process.stdout),
55
+ TextReceiveStream(process.stdout, errors="replace"),
56
56
  *stdout_sinks,
57
57
  )
58
58
  tg.start_soon(
59
59
  stream_text,
60
- TextReceiveStream(process.stderr),
60
+ TextReceiveStream(process.stderr, errors="replace"),
61
61
  *stderr_sinks,
62
62
  )
63
63
 
@@ -71,7 +71,7 @@ async def _read_stream(
71
71
  data = await stream.read(4096)
72
72
  if not data:
73
73
  break
74
- text = data.decode()
74
+ text = data.decode(errors="replace")
75
75
  for sink in sinks:
76
76
  sink.write(text)
77
77
  if hasattr(sink, "flush"):
@@ -9,6 +9,15 @@ Client-side event system for emitting, subscribing to, and defining automations
9
9
  - Automations combine triggers (event, metric, compound, sequence) with actions.
10
10
  - `DeploymentTriggerTypes` are the subset of triggers usable in `prefect.yaml` deployment definitions.
11
11
 
12
+ ## clients.py — Checkpointing Invariant
13
+
14
+ `PrefectEventsClient` uses **two independent checkpointing mechanisms** to confirm server receipt of sent events:
15
+
16
+ 1. **Count-based** (`checkpoint_every`, default 700): checkpoints after N emitted events.
17
+ 2. **Time-based** (`checkpoint_interval`, default 30s): a background `asyncio.Task` that fires periodically regardless of event count. Prevents unbounded buffer growth for low-throughput connections.
18
+
19
+ The background task is started in `__aenter__` and after each reconnect, and cancelled in `__aexit__`. If you subclass or mock `PrefectEventsClient`, ensure both checkpointing paths are exercised — the count threshold alone is not sufficient for low-volume scenarios.
20
+
12
21
  ## Structure
13
22
 
14
23
  - `schemas/` — Pydantic models: `Event`, `Resource`, `RelatedResource`, `Automation`, triggers, deployment triggers
@@ -101,17 +101,20 @@ def events_out_socket_from_api_url(url: str) -> str:
101
101
  def get_events_client(
102
102
  reconnection_attempts: int = 10,
103
103
  checkpoint_every: int = 700,
104
+ checkpoint_interval: float = 30.0,
104
105
  ) -> "EventsClient":
105
106
  api_url = PREFECT_API_URL.value()
106
107
  if isinstance(api_url, str) and api_url.startswith(PREFECT_CLOUD_API_URL.value()):
107
108
  return PrefectCloudEventsClient(
108
109
  reconnection_attempts=reconnection_attempts,
109
110
  checkpoint_every=checkpoint_every,
111
+ checkpoint_interval=checkpoint_interval,
110
112
  )
111
113
  elif api_url:
112
114
  return PrefectEventsClient(
113
115
  reconnection_attempts=reconnection_attempts,
114
116
  checkpoint_every=checkpoint_every,
117
+ checkpoint_interval=checkpoint_interval,
115
118
  )
116
119
  elif PREFECT_SERVER_ALLOW_EPHEMERAL_MODE:
117
120
  from prefect.server.api.server import SubprocessASGIServer
@@ -122,6 +125,7 @@ def get_events_client(
122
125
  api_url=server.api_url,
123
126
  reconnection_attempts=reconnection_attempts,
124
127
  checkpoint_every=checkpoint_every,
128
+ checkpoint_interval=checkpoint_interval,
125
129
  )
126
130
  else:
127
131
  raise ValueError(
@@ -268,6 +272,7 @@ class PrefectEventsClient(EventsClient):
268
272
  api_url: Optional[str] = None,
269
273
  reconnection_attempts: int = 10,
270
274
  checkpoint_every: int = 700,
275
+ checkpoint_interval: float = 30.0,
271
276
  ):
272
277
  """
273
278
  Args:
@@ -276,6 +281,9 @@ class PrefectEventsClient(EventsClient):
276
281
  the client should attempt to reconnect
277
282
  checkpoint_every: How often the client should sync with the server to
278
283
  confirm receipt of all previously sent events
284
+ checkpoint_interval: Maximum seconds between checkpoints, regardless of
285
+ event count. Prevents unbounded growth of the unconfirmed events
286
+ buffer for low-throughput connections.
279
287
  """
280
288
  api_url = api_url or PREFECT_API_URL.value()
281
289
  if not api_url:
@@ -297,6 +305,8 @@ class PrefectEventsClient(EventsClient):
297
305
  self._reconnection_attempts = reconnection_attempts
298
306
  self._unconfirmed_events = []
299
307
  self._checkpoint_every = checkpoint_every
308
+ self._checkpoint_interval = checkpoint_interval
309
+ self._checkpoint_task: Optional[asyncio.Task[None]] = None
300
310
 
301
311
  async def __aenter__(self) -> Self:
302
312
  await super().__aenter__()
@@ -324,6 +334,7 @@ class PrefectEventsClient(EventsClient):
324
334
  # propagate immediately with a warning
325
335
  self._log_connection_error(e)
326
336
  raise
337
+ self._start_checkpoint_task()
327
338
  return self
328
339
 
329
340
  async def __aexit__(
@@ -332,6 +343,7 @@ class PrefectEventsClient(EventsClient):
332
343
  exc_val: Optional[BaseException],
333
344
  exc_tb: Optional[TracebackType],
334
345
  ) -> None:
346
+ self._stop_checkpoint_task()
335
347
  self._websocket = None
336
348
  # Only call __aexit__ on the connection if it was successfully established.
337
349
  # The websockets library sets the "connection" attribute on the connect
@@ -427,6 +439,47 @@ class PrefectEventsClient(EventsClient):
427
439
  for event in events_to_resend:
428
440
  await self.emit(event)
429
441
  logger.debug("Finished resending unconfirmed events.")
442
+ self._start_checkpoint_task()
443
+
444
+ def _start_checkpoint_task(self) -> None:
445
+ self._stop_checkpoint_task()
446
+ self._checkpoint_task = asyncio.create_task(self._checkpoint_loop())
447
+
448
+ def _stop_checkpoint_task(self) -> None:
449
+ if self._checkpoint_task is not None:
450
+ self._checkpoint_task.cancel()
451
+ self._checkpoint_task = None
452
+
453
+ async def _checkpoint_loop(self) -> None:
454
+ """Periodically checkpoint unconfirmed events on a time interval,
455
+ independent of the count-based checkpoint in _checkpoint."""
456
+ while True:
457
+ await asyncio.sleep(self._checkpoint_interval)
458
+ if self._websocket and self._unconfirmed_events:
459
+ try:
460
+ await self._force_checkpoint()
461
+ except Exception:
462
+ logger.debug(
463
+ "Time-based checkpoint failed, will retry next interval.",
464
+ exc_info=True,
465
+ )
466
+
467
+ async def _force_checkpoint(self) -> None:
468
+ """Checkpoint all unconfirmed events unconditionally."""
469
+ assert self._websocket
470
+
471
+ unconfirmed_count = len(self._unconfirmed_events)
472
+ if unconfirmed_count == 0:
473
+ return
474
+
475
+ logger.debug("Time-based checkpoint: confirming %s events.", unconfirmed_count)
476
+ pong = await self._websocket.ping()
477
+ await pong
478
+ self._log_debug("Pong received. Events checkpointed.")
479
+
480
+ self._unconfirmed_events = self._unconfirmed_events[unconfirmed_count:]
481
+
482
+ EVENT_WEBSOCKET_CHECKPOINTS.labels(self.client_name).inc()
430
483
 
431
484
  async def _checkpoint(self) -> None:
432
485
  assert self._websocket
@@ -547,6 +600,7 @@ class PrefectCloudEventsClient(PrefectEventsClient):
547
600
  api_key: Optional[str] = None,
548
601
  reconnection_attempts: int = 10,
549
602
  checkpoint_every: int = 700,
603
+ checkpoint_interval: float = 30.0,
550
604
  ):
551
605
  """
552
606
  Args:
@@ -556,12 +610,15 @@ class PrefectCloudEventsClient(PrefectEventsClient):
556
610
  the client should attempt to reconnect
557
611
  checkpoint_every: How often the client should sync with the server to
558
612
  confirm receipt of all previously sent events
613
+ checkpoint_interval: Maximum seconds between checkpoints, regardless of
614
+ event count.
559
615
  """
560
616
  api_url, api_key = _get_api_url_and_key(api_url, api_key)
561
617
  super().__init__(
562
618
  api_url=api_url,
563
619
  reconnection_attempts=reconnection_attempts,
564
620
  checkpoint_every=checkpoint_every,
621
+ checkpoint_interval=checkpoint_interval,
565
622
  )
566
623
  # Cloud authenticates via the Authorization header at the HTTP level,
567
624
  # not via the "prefect" subprotocol auth handshake used by self-hosted servers.
@@ -69,6 +69,9 @@ class EventsWorker(QueueService[Event]):
69
69
  def __init__(
70
70
  self, client_type: Type[EventsClient], client_options: Tuple[Tuple[str, Any]]
71
71
  ):
72
+ from prefect.settings import get_current_settings
73
+
74
+ self._max_queue_size = get_current_settings().events.worker_max_queue_size
72
75
  super().__init__(client_type, client_options)
73
76
  self.client_type = client_type
74
77
  self.client_options = client_options
@@ -90,6 +93,9 @@ class EventsWorker(QueueService[Event]):
90
93
  self._context_cache[event.id] = copy_context()
91
94
  return event
92
95
 
96
+ def _on_item_dropped(self, item: Event) -> None:
97
+ self._context_cache.pop(item.id, None)
98
+
93
99
  async def _handle(self, event: Event):
94
100
  context = self._context_cache.pop(event.id)
95
101
  with temporary_context(context=context):
@@ -472,7 +472,7 @@ def pause_flow_run(
472
472
  async def asuspend_flow_run(
473
473
  wait_for_input: None = None,
474
474
  flow_run_id: UUID | None = None,
475
- timeout: int | None = 3600,
475
+ timeout: int | None = None,
476
476
  key: str | None = None,
477
477
  ) -> None: ...
478
478
 
@@ -481,7 +481,7 @@ async def asuspend_flow_run(
481
481
  async def asuspend_flow_run(
482
482
  wait_for_input: Type[T],
483
483
  flow_run_id: UUID | None = None,
484
- timeout: int | None = 3600,
484
+ timeout: int | None = None,
485
485
  key: str | None = None,
486
486
  ) -> T: ...
487
487
 
@@ -489,7 +489,7 @@ async def asuspend_flow_run(
489
489
  async def asuspend_flow_run(
490
490
  wait_for_input: Type[T] | None = None,
491
491
  flow_run_id: UUID | None = None,
492
- timeout: int | None = 3600,
492
+ timeout: int | None = None,
493
493
  key: str | None = None,
494
494
  ) -> T | None:
495
495
  """
@@ -509,9 +509,9 @@ async def asuspend_flow_run(
509
509
  suspend the specified flow run. If not supplied will attempt to
510
510
  suspend the current flow run.
511
511
  timeout: the number of seconds to wait for the flow to be resumed before
512
- failing. Defaults to 1 hour (3600 seconds). If the pause timeout
513
- exceeds any configured flow-level timeout, the flow might fail even
514
- after resuming.
512
+ failing. Defaults to no timeout. If the pause timeout exceeds any
513
+ configured flow-level timeout, the flow might fail even after
514
+ resuming.
515
515
  key: An optional key to prevent calling suspend more than once. This
516
516
  defaults to a random string and prevents suspends from running the
517
517
  same suspend twice. A custom key can be supplied for custom
@@ -596,7 +596,7 @@ async def asuspend_flow_run(
596
596
  def suspend_flow_run(
597
597
  wait_for_input: None = None,
598
598
  flow_run_id: UUID | None = None,
599
- timeout: int | None = 3600,
599
+ timeout: int | None = None,
600
600
  key: str | None = None,
601
601
  ) -> None: ...
602
602
 
@@ -605,7 +605,7 @@ def suspend_flow_run(
605
605
  def suspend_flow_run(
606
606
  wait_for_input: Type[T],
607
607
  flow_run_id: UUID | None = None,
608
- timeout: int | None = 3600,
608
+ timeout: int | None = None,
609
609
  key: str | None = None,
610
610
  ) -> T: ...
611
611
 
@@ -614,7 +614,7 @@ def suspend_flow_run(
614
614
  def suspend_flow_run(
615
615
  wait_for_input: Type[T] | None = None,
616
616
  flow_run_id: UUID | None = None,
617
- timeout: int | None = 3600,
617
+ timeout: int | None = None,
618
618
  key: str | None = None,
619
619
  ) -> T | None:
620
620
  """
@@ -634,9 +634,9 @@ def suspend_flow_run(
634
634
  suspend the specified flow run. If not supplied will attempt to
635
635
  suspend the current flow run.
636
636
  timeout: the number of seconds to wait for the flow to be resumed before
637
- failing. Defaults to 1 hour (3600 seconds). If the pause timeout
638
- exceeds any configured flow-level timeout, the flow might fail even
639
- after resuming.
637
+ failing. Defaults to no timeout. If the pause timeout exceeds any
638
+ configured flow-level timeout, the flow might fail even after
639
+ resuming.
640
640
  key: An optional key to prevent calling suspend more than once. This
641
641
  defaults to a random string and prevents suspends from running the
642
642
  same suspend twice. A custom key can be supplied for custom
@@ -415,6 +415,23 @@ def create_api_app(
415
415
  if final:
416
416
  gc.collect()
417
417
 
418
+ @api_app.middleware("http")
419
+ async def default_content_type(request: Request, call_next: Any): # type: ignore[reportUnusedFunction]
420
+ # Older Prefect clients (<3.6.19) sent JSON bodies via httpx's
421
+ # content= parameter, which omits the Content-Type header.
422
+ # FastAPI >=0.132.0 requires Content-Type: application/json to
423
+ # parse request bodies. Default it here for backward compat.
424
+ if (
425
+ request.method in {"POST", "PUT", "PATCH"}
426
+ and "content-type" not in request.headers
427
+ and int(request.headers.get("content-length", "0")) > 0
428
+ ):
429
+ request.scope["headers"] = [
430
+ *request.scope["headers"],
431
+ (b"content-type", b"application/json"),
432
+ ]
433
+ return await call_next(request)
434
+
418
435
  auth_string = prefect.settings.PREFECT_SERVER_API_AUTH_STRING.value()
419
436
 
420
437
  if auth_string is not None:
@@ -13,6 +13,7 @@ All settings are rooted in the `Settings` class in `models/root.py`, which compo
13
13
  | `client` | `models/client.py` | HTTP client behavior (retries, CSRF, headers) |
14
14
  | `cloud` | `models/cloud.py` | Prefect Cloud-specific config |
15
15
  | `deployments` | `models/deployments.py` | Deployment defaults |
16
+ | `events` | `models/events.py` | Client-side event worker behavior (queue size) |
16
17
  | `experiments` | `models/experiments.py` | Feature flags and experimental features |
17
18
  | `flows` | `models/flows.py` | Flow behavior defaults |
18
19
  | `internal` | `models/internal.py` | Internal machinery |
@@ -0,0 +1,27 @@
1
+ from typing import ClassVar
2
+
3
+ from pydantic import Field
4
+ from pydantic_settings import SettingsConfigDict
5
+
6
+ from prefect.settings.base import PrefectBaseSettings, build_settings_config
7
+
8
+
9
+ class EventsSettings(PrefectBaseSettings):
10
+ """
11
+ Settings for controlling events behavior
12
+ """
13
+
14
+ model_config: ClassVar[SettingsConfigDict] = build_settings_config(("events",))
15
+
16
+ worker_max_queue_size: int = Field(
17
+ default=0,
18
+ ge=0,
19
+ description="""
20
+ Maximum number of events that can be queued for delivery to the
21
+ Prefect server. When the queue is full, new events are dropped with
22
+ a warning. Set to 0 for unbounded (the default).
23
+
24
+ Warning: setting this value too low may result in data loss as events
25
+ will be silently dropped when the queue is full.
26
+ """,
27
+ )
@@ -32,6 +32,7 @@ from .cli import CLISettings
32
32
  from .client import ClientSettings
33
33
  from .cloud import CloudSettings
34
34
  from .deployments import DeploymentsSettings
35
+ from .events import EventsSettings
35
36
  from .experiments import ExperimentsSettings
36
37
  from .flows import FlowsSettings
37
38
  from .internal import InternalSettings
@@ -98,6 +99,11 @@ class Settings(PrefectBaseSettings):
98
99
  description="Settings for configuring deployments defaults",
99
100
  )
100
101
 
102
+ events: EventsSettings = Field(
103
+ default_factory=EventsSettings,
104
+ description="Settings for controlling events behavior",
105
+ )
106
+
101
107
  experiments: ExperimentsSettings = Field(
102
108
  default_factory=ExperimentsSettings,
103
109
  description="Settings for controlling experimental features",
@@ -15,6 +15,7 @@ Does NOT include: server-specific utilities (`server/utilities/`), concurrency s
15
15
  - `callables.py` — Function signature introspection and parameter coercion
16
16
  - `collections.py` — Extended collection helpers (visit, flatten, remove nested keys)
17
17
  - `annotations.py` — Custom Prefect type annotations used in flow/task signatures
18
+ - `processutils.py` — Subprocess execution and output streaming helpers (`run_process`, `consume_process_output`, `stream_text`)
18
19
  - `pydantic.py` — Pydantic v1/v2 compatibility shims
19
20
  - `templating.py` — Jinja template utilities and `maybe_template()` detection
20
21
 
@@ -68,3 +69,4 @@ Handlers return `Placeholder` subclasses (e.g. `RemoveValue`, `InvalidJSON`, `In
68
69
 
69
70
  - `maybe_template(s)` (in `templating.py`) only checks whether a string looks like it contains a Jinja expression — it does not validate that it's well-formed. A string with `{{` but no `}}` returns `True`.
70
71
  - `HydrationContext` workspace variables are loaded once at build time. Stale contexts don't reflect variable updates made after context creation.
72
+ - **Non-UTF-8 subprocess output is silently replaced.** `consume_process_output` and `stream_text` (via `TextReceiveStream(errors="replace")`) replace invalid bytes with the Unicode replacement character `\ufffd` rather than raising. If captured output contains `\ufffd`, the subprocess emitted bytes that were not valid UTF-8.
@@ -267,21 +267,30 @@ async def resolve_inputs(
267
267
  else:
268
268
  return expr
269
269
 
270
- # Do not allow uncompleted upstreams except failures when `allow_failure` has
271
- # been used
270
+ # Do not allow uncompleted upstreams unless `allow_failure` has been used
271
+ # for failed or failure-derived (PENDING/NotReady) states
272
272
  if not state.is_completed() and not (
273
273
  # TODO: Note that the contextual annotation here is only at the current level
274
274
  # if `allow_failure` is used then another annotation is used, this will
275
275
  # incorrectly evaluate to false — to resolve this, we must track all
276
276
  # annotations wrapping the current expression but this is not yet
277
277
  # implemented.
278
- isinstance(context.get("annotation"), allow_failure) and state.is_failed()
278
+ isinstance(context.get("annotation"), allow_failure)
279
+ and (state.is_failed() or (state.is_pending() and state.name == "NotReady"))
279
280
  ):
280
281
  raise UpstreamTaskError(
281
282
  f"Upstream task run '{state.state_details.task_run_id}' did not reach a"
282
283
  " 'COMPLETED' state."
283
284
  )
284
285
 
286
+ # When allow_failure is used and the state is not final (e.g. PENDING/NotReady
287
+ # from a cascading upstream failure), return state.data directly since
288
+ # result_by_state is only populated for final states.
289
+ if not state.is_final() and isinstance(
290
+ context.get("annotation"), allow_failure
291
+ ):
292
+ return state.data
293
+
285
294
  return result_by_state.get(state)
286
295
 
287
296
  resolved_parameters: dict[str, Any] = {}
@@ -747,21 +756,28 @@ def resolve_to_final_result(expr: Any, context: dict[str, Any]) -> Any:
747
756
 
748
757
  assert state
749
758
 
750
- # Do not allow uncompleted upstreams except failures when `allow_failure` has
751
- # been used
759
+ # Do not allow uncompleted upstreams unless `allow_failure` has been used
760
+ # for failed or failure-derived (PENDING/NotReady) states
752
761
  if not state.is_completed() and not (
753
762
  # TODO: Note that the contextual annotation here is only at the current level
754
763
  # if `allow_failure` is used then another annotation is used, this will
755
764
  # incorrectly evaluate to false — to resolve this, we must track all
756
765
  # annotations wrapping the current expression but this is not yet
757
766
  # implemented.
758
- isinstance(context.get("annotation"), allow_failure) and state.is_failed()
767
+ isinstance(context.get("annotation"), allow_failure)
768
+ and (state.is_failed() or (state.is_pending() and state.name == "NotReady"))
759
769
  ):
760
770
  raise UpstreamTaskError(
761
771
  f"Upstream task run '{state.state_details.task_run_id}' did not reach a"
762
772
  " 'COMPLETED' state."
763
773
  )
764
774
 
775
+ # When allow_failure is used and the state is not final (e.g. PENDING/NotReady
776
+ # from a cascading upstream failure), we cannot call state.result() because it
777
+ # raises UnfinishedRun. Return the state's data directly instead.
778
+ if not state.is_final() and isinstance(context.get("annotation"), allow_failure):
779
+ return state.data
780
+
765
781
  result: Any = state.result(raise_on_failure=False, _sync=True) # pyright: ignore[reportCallIssue] _sync messes up type inference and can be removed once async_dispatch is removed
766
782
 
767
783
  if state.state_details.traceparent:
@@ -338,13 +338,13 @@ async def consume_process_output(
338
338
  if process.stdout is not None:
339
339
  tg.start_soon(
340
340
  stream_text,
341
- TextReceiveStream(process.stdout),
341
+ TextReceiveStream(process.stdout, errors="replace"),
342
342
  stdout_sink,
343
343
  )
344
344
  if process.stderr is not None:
345
345
  tg.start_soon(
346
346
  stream_text,
347
- TextReceiveStream(process.stderr),
347
+ TextReceiveStream(process.stderr, errors="replace"),
348
348
  stderr_sink,
349
349
  )
350
350
 
@@ -1,5 +0,0 @@
1
- # Generated by versioningit
2
- __version__ = "3.6.24.dev3"
3
- __build_date__ = "2026-03-25 08:20:24.449244+00:00"
4
- __git_commit__ = "506781bb04ec791fdbbe4dfd99c8ff692bbffb6f"
5
- __dirty__ = False