prefect-client 3.6.24.dev5__tar.gz → 3.6.25.dev1__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 (409) hide show
  1. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/PKG-INFO +1 -1
  2. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/AGENTS.md +1 -0
  3. prefect_client-3.6.25.dev1/src/prefect/_build_info.py +5 -0
  4. prefect_client-3.6.25.dev1/src/prefect/blocks/AGENTS.md +48 -0
  5. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/blocks/core.py +76 -8
  6. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/blocks/notifications.py +2 -3
  7. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/AGENTS.md +3 -1
  8. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/_asyncio.py +9 -1
  9. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/_leases.py +30 -6
  10. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/_sync.py +9 -1
  11. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/asyncio.py +7 -0
  12. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/sync.py +7 -0
  13. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/context.py +47 -0
  14. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/docker/__init__.py +6 -0
  15. prefect_client-3.6.25.dev1/src/prefect/docker/_buildx.py +217 -0
  16. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/docker/docker_image.py +91 -4
  17. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/flow_engine.py +75 -83
  18. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/sources.py +3 -1
  19. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/pydantic.py +10 -4
  20. prefect_client-3.6.24.dev5/src/prefect/_build_info.py +0 -5
  21. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/.gitignore +0 -0
  22. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/LICENSE +0 -0
  23. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/README.md +0 -0
  24. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/pyproject.toml +0 -0
  25. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/.prefectignore +0 -0
  26. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/__init__.py +0 -0
  27. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/__main__.py +0 -0
  28. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/__init__.py +0 -0
  29. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/bundles/__init__.py +0 -0
  30. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/bundles/_file_collector.py +0 -0
  31. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/bundles/_ignore_filter.py +0 -0
  32. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/bundles/_path_resolver.py +0 -0
  33. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/bundles/_zip_builder.py +0 -0
  34. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/bundles/_zip_extractor.py +0 -0
  35. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/bundles/execute.py +0 -0
  36. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/plugins/__init__.py +0 -0
  37. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/plugins/apply.py +0 -0
  38. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/plugins/diagnostics.py +0 -0
  39. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/plugins/manager.py +0 -0
  40. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/plugins/spec.py +0 -0
  41. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
  42. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/sla/client.py +0 -0
  43. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
  44. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/__init__.py +0 -0
  45. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/_logging.py +0 -0
  46. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/analytics/__init__.py +0 -0
  47. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/analytics/ci_detection.py +0 -0
  48. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/analytics/client.py +0 -0
  49. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/analytics/device_id.py +0 -0
  50. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/analytics/emit.py +0 -0
  51. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/analytics/enabled.py +0 -0
  52. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/analytics/events.py +0 -0
  53. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/analytics/milestones.py +0 -0
  54. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/analytics/notice.py +0 -0
  55. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/analytics/service.py +0 -0
  56. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
  57. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  58. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/compatibility/backports.py +0 -0
  59. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/compatibility/blocks.py +0 -0
  60. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  61. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
  62. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/compatibility/starlette.py +0 -0
  63. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
  64. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
  65. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
  66. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  67. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  68. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
  69. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
  70. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/concurrency/services.py +0 -0
  71. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
  72. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
  73. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/installation.py +0 -0
  74. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/integrations.py +0 -0
  75. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/lazy.py +0 -0
  76. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/observability.py +0 -0
  77. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
  78. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
  79. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  80. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  81. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/pydantic/validated_func.py +0 -0
  82. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/pytz.py +0 -0
  83. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/retries.py +0 -0
  84. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
  85. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
  86. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
  87. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
  88. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
  89. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/send_entrypoint_logs.py +0 -0
  90. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/testing.py +0 -0
  91. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/urls.py +0 -0
  92. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/uuid7.py +0 -0
  93. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_internal/websockets.py +0 -0
  94. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_observers.py +0 -0
  95. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_result_records.py +0 -0
  96. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/__init__.py +0 -0
  97. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/fetcher.py +0 -0
  98. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/generator.py +0 -0
  99. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/models.py +0 -0
  100. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/naming.py +0 -0
  101. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/renderer.py +0 -0
  102. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/schema_converter.py +0 -0
  103. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/templates/__init__.py +0 -0
  104. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/templates/sdk.py.jinja +0 -0
  105. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/types.py +0 -0
  106. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_sdk/unions.py +0 -0
  107. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_states.py +0 -0
  108. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
  109. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
  110. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_versioning.py +0 -0
  111. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/_waiters.py +0 -0
  112. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/agent.py +0 -0
  113. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/analytics/__init__.py +0 -0
  114. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/artifacts.py +0 -0
  115. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/assets/__init__.py +0 -0
  116. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/assets/core.py +0 -0
  117. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/assets/materialize.py +0 -0
  118. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/automations.py +0 -0
  119. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/blocks/__init__.py +0 -0
  120. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/blocks/abstract.py +0 -0
  121. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/blocks/fields.py +0 -0
  122. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/blocks/redis.py +0 -0
  123. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/blocks/system.py +0 -0
  124. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/blocks/webhook.py +0 -0
  125. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/cache_policies.py +0 -0
  126. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/AGENTS.md +0 -0
  127. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/__init__.py +0 -0
  128. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/_version_checking.py +0 -0
  129. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/attribution.py +0 -0
  130. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/base.py +0 -0
  131. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/cloud.py +0 -0
  132. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/collections.py +0 -0
  133. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/constants.py +0 -0
  134. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/__init__.py +0 -0
  135. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  136. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  137. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  138. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
  139. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  140. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  141. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  142. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  143. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  144. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  145. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  146. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  147. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  148. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  149. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_events/__init__.py +0 -0
  150. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_events/client.py +0 -0
  151. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  152. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  153. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  154. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
  155. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  156. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
  157. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  158. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
  159. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  160. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  161. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/base.py +0 -0
  162. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/orchestration/routes.py +0 -0
  163. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/schemas/__init__.py +0 -0
  164. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/schemas/actions.py +0 -0
  165. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/schemas/events.py +0 -0
  166. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/schemas/filters.py +0 -0
  167. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/schemas/objects.py +0 -0
  168. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/schemas/responses.py +0 -0
  169. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/schemas/schedules.py +0 -0
  170. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/schemas/sorting.py +0 -0
  171. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/subscriptions.py +0 -0
  172. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/types/__init__.py +0 -0
  173. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  174. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/client/utilities.py +0 -0
  175. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/__init__.py +0 -0
  176. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/_events.py +0 -0
  177. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/context.py +0 -0
  178. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/services.py +0 -0
  179. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
  180. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  181. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
  182. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
  183. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/v1/context.py +0 -0
  184. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/v1/services.py +0 -0
  185. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
  186. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/AGENTS.md +0 -0
  187. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/__init__.py +0 -0
  188. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/base.py +0 -0
  189. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/deployments.py +0 -0
  190. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/flow_runs.py +0 -0
  191. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/runner.py +0 -0
  192. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/schedules.py +0 -0
  193. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
  194. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/steps/core.py +0 -0
  195. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/steps/pull.py +0 -0
  196. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/deployments/steps/utility.py +0 -0
  197. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/engine.py +0 -0
  198. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/AGENTS.md +0 -0
  199. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/__init__.py +0 -0
  200. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/actions.py +0 -0
  201. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/clients.py +0 -0
  202. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/filters.py +0 -0
  203. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/related.py +0 -0
  204. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/schemas/__init__.py +0 -0
  205. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/schemas/automations.py +0 -0
  206. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  207. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/schemas/events.py +0 -0
  208. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/schemas/labelling.py +0 -0
  209. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/subscribers.py +0 -0
  210. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/utilities.py +0 -0
  211. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/events/worker.py +0 -0
  212. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/exceptions.py +0 -0
  213. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/filesystems.py +0 -0
  214. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/flow_runs.py +0 -0
  215. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/flows.py +0 -0
  216. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/futures.py +0 -0
  217. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/infrastructure/__init__.py +0 -0
  218. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/infrastructure/base.py +0 -0
  219. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  220. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  221. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  222. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  223. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  224. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  225. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/input/__init__.py +0 -0
  226. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/input/actions.py +0 -0
  227. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/input/run_input.py +0 -0
  228. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/locking/__init__.py +0 -0
  229. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/locking/filesystem.py +0 -0
  230. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/locking/memory.py +0 -0
  231. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/locking/protocol.py +0 -0
  232. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/logging/AGENTS.md +0 -0
  233. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/logging/__init__.py +0 -0
  234. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/logging/clients.py +0 -0
  235. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/logging/configuration.py +0 -0
  236. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/logging/filters.py +0 -0
  237. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/logging/formatters.py +0 -0
  238. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/logging/handlers.py +0 -0
  239. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/logging/highlighters.py +0 -0
  240. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/logging/loggers.py +0 -0
  241. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/logging/logging.yml +0 -0
  242. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/main.py +0 -0
  243. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/plugins.py +0 -0
  244. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/py.typed +0 -0
  245. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/results.py +0 -0
  246. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/AGENTS.md +0 -0
  247. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/__init__.py +0 -0
  248. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_cancellation_manager.py +0 -0
  249. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_deployment_registry.py +0 -0
  250. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_event_emitter.py +0 -0
  251. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_flow_resolver.py +0 -0
  252. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_flow_run_executor.py +0 -0
  253. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_hook_runner.py +0 -0
  254. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_limit_manager.py +0 -0
  255. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_process_manager.py +0 -0
  256. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_scheduled_run_poller.py +0 -0
  257. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_starter_bundle.py +0 -0
  258. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_starter_direct.py +0 -0
  259. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_starter_engine.py +0 -0
  260. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/_state_proposer.py +0 -0
  261. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/runner.py +0 -0
  262. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/server.py +0 -0
  263. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runner/storage.py +0 -0
  264. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runtime/__init__.py +0 -0
  265. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runtime/deployment.py +0 -0
  266. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runtime/flow_run.py +0 -0
  267. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/runtime/task_run.py +0 -0
  268. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/schedules.py +0 -0
  269. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/serializers.py +0 -0
  270. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/__init__.py +0 -0
  271. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/admin.py +0 -0
  272. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/artifacts.py +0 -0
  273. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/automations.py +0 -0
  274. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/background_workers.py +0 -0
  275. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
  276. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/block_documents.py +0 -0
  277. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/block_schemas.py +0 -0
  278. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/block_types.py +0 -0
  279. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/clients.py +0 -0
  280. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/collections.py +0 -0
  281. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  282. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
  283. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  284. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/csrf_token.py +0 -0
  285. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/dependencies.py +0 -0
  286. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/deployments.py +0 -0
  287. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/events.py +0 -0
  288. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
  289. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/flow_runs.py +0 -0
  290. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/flows.py +0 -0
  291. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/logs.py +0 -0
  292. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/middleware.py +0 -0
  293. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/root.py +0 -0
  294. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/run_history.py +0 -0
  295. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/saved_searches.py +0 -0
  296. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/server.py +0 -0
  297. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  298. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/task_run_states.py +0 -0
  299. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/task_runs.py +0 -0
  300. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/task_workers.py +0 -0
  301. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/templates.py +0 -0
  302. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
  303. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/ui/flow_runs.py +0 -0
  304. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/ui/flows.py +0 -0
  305. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
  306. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/ui/task_runs.py +0 -0
  307. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/validation.py +0 -0
  308. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/variables.py +0 -0
  309. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/work_queues.py +0 -0
  310. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/server/api/workers.py +0 -0
  311. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/AGENTS.md +0 -0
  312. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/__init__.py +0 -0
  313. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/base.py +0 -0
  314. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/constants.py +0 -0
  315. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/context.py +0 -0
  316. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/legacy.py +0 -0
  317. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/__init__.py +0 -0
  318. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/_defaults.py +0 -0
  319. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/api.py +0 -0
  320. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/cli.py +0 -0
  321. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/client.py +0 -0
  322. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/cloud.py +0 -0
  323. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/deployments.py +0 -0
  324. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/events.py +0 -0
  325. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/experiments.py +0 -0
  326. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/flows.py +0 -0
  327. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/internal.py +0 -0
  328. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/logging.py +0 -0
  329. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/results.py +0 -0
  330. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/root.py +0 -0
  331. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/runner.py +0 -0
  332. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
  333. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/api.py +0 -0
  334. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/concurrency.py +0 -0
  335. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/database.py +0 -0
  336. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
  337. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/docket.py +0 -0
  338. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
  339. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/events.py +0 -0
  340. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  341. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/logs.py +0 -0
  342. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/root.py +0 -0
  343. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/services.py +0 -0
  344. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/tasks.py +0 -0
  345. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/server/ui.py +0 -0
  346. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/tasks.py +0 -0
  347. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/telemetry.py +0 -0
  348. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/testing.py +0 -0
  349. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/models/worker.py +0 -0
  350. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/profiles.py +0 -0
  351. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/settings/profiles.toml +0 -0
  352. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/states.py +0 -0
  353. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/task_engine.py +0 -0
  354. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/task_runners.py +0 -0
  355. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/task_runs.py +0 -0
  356. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/task_worker.py +0 -0
  357. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/tasks.py +0 -0
  358. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/telemetry/__init__.py +0 -0
  359. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/telemetry/_metrics.py +0 -0
  360. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
  361. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/transactions.py +0 -0
  362. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/types/__init__.py +0 -0
  363. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/types/_concurrency.py +0 -0
  364. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/types/_datetime.py +0 -0
  365. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/types/_schema.py +0 -0
  366. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/types/entrypoint.py +0 -0
  367. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/types/names.py +0 -0
  368. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/AGENTS.md +0 -0
  369. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/__init__.py +0 -0
  370. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/_ast.py +0 -0
  371. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/_deprecated.py +0 -0
  372. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/_engine.py +0 -0
  373. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/_git.py +0 -0
  374. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/_infrastructure_exit_codes.py +0 -0
  375. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/annotations.py +0 -0
  376. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/asyncutils.py +0 -0
  377. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/callables.py +0 -0
  378. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/collections.py +0 -0
  379. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/compat.py +0 -0
  380. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/context.py +0 -0
  381. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/dispatch.py +0 -0
  382. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/dockerutils.py +0 -0
  383. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/engine.py +0 -0
  384. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/filesystem.py +0 -0
  385. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/generics.py +0 -0
  386. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/hashing.py +0 -0
  387. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/importtools.py +0 -0
  388. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/math.py +0 -0
  389. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/names.py +0 -0
  390. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/processutils.py +0 -0
  391. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/render_swagger.py +0 -0
  392. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  393. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  394. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/schema_tools/validation.py +0 -0
  395. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/services.py +0 -0
  396. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/slugify.py +0 -0
  397. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/templating.py +0 -0
  398. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/text.py +0 -0
  399. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/timeout.py +0 -0
  400. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/urls.py +0 -0
  401. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/utilities/visualization.py +0 -0
  402. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/variables.py +0 -0
  403. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/workers/__init__.py +0 -0
  404. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/workers/base.py +0 -0
  405. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/workers/block.py +0 -0
  406. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/workers/cloud.py +0 -0
  407. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/workers/process.py +0 -0
  408. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/src/prefect/workers/server.py +0 -0
  409. {prefect_client-3.6.24.dev5 → prefect_client-3.6.25.dev1}/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.dev5
3
+ Version: 3.6.25.dev1
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
@@ -49,5 +49,6 @@ Use `get_logger()` from `prefect.logging` instead of raw `logging.getLogger()`
49
49
  - `runner/` → Thin facade over extracted single-responsibility classes for local flow run execution (see runner/AGENTS.md)
50
50
  - `deployments/` → YAML-driven deployment lifecycle: project init, build/push/pull steps, and triggering remote flow runs (see deployments/AGENTS.md)
51
51
  - `utilities/` → Cross-cutting helpers: async utils, schema hydration, callables introspection, and more (see utilities/AGENTS.md)
52
+ - `blocks/` → Server-persisted configuration objects for external service credentials and settings (see blocks/AGENTS.md)
52
53
  - `docker/` → `DockerImage` class for building and pushing Docker images during deployment
53
54
  - `telemetry/` → OS-level resource metric collection and run telemetry
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.6.25.dev1"
3
+ __build_date__ = "2026-03-28 08:16:14.043192+00:00"
4
+ __git_commit__ = "a4ddbe3b3c3499647454b5185ca94dc16aa70a76"
5
+ __dirty__ = False
@@ -0,0 +1,48 @@
1
+ # Blocks
2
+
3
+ Reusable, server-persisted configuration objects for connecting workflows to external services. Blocks store credentials and settings securely and are shared across runs via the Prefect server.
4
+
5
+ ## Purpose & Scope
6
+
7
+ Blocks handle configuration lifecycle: define fields in Python, register schema with the server, save/load named instances, and serialize secrets safely. They do NOT execute workflow logic — that belongs in flows and tasks. Block subclasses define the interface; `core.py` handles all server interaction.
8
+
9
+ ## Entry Points & Contracts
10
+
11
+ - `Block` (`core.py`) — base class for all blocks. Subclass it, declare Pydantic fields, optionally set `_block_type_slug`, `_logo_url`, etc.
12
+ - `abstract.py` — abstract interfaces (`CredentialsBlock`, `NotificationBlock`, `DatabaseBlock`, `ObjectStorageBlock`, `SecretBlock`, `JobBlock`) to signal capability and constrain API shape.
13
+ - `system.py` — built-in `Secret[T]` block for storing a single secret value.
14
+ - `notifications.py` — `SlackWebhook` and Apprise-based notification blocks.
15
+ - `webhook.py` — `Webhook` block for calling HTTP endpoints.
16
+ - `redis.py` — `RedisStorageContainer` implementing `WritableFileSystem`.
17
+
18
+ ## Usage Patterns
19
+
20
+ **Define a block:**
21
+ ```python
22
+ class MyBlock(Block):
23
+ _block_type_slug = "my-block"
24
+ api_key: SecretStr
25
+ endpoint: str
26
+ ```
27
+
28
+ **Save and load:**
29
+ ```python
30
+ await MyBlock(api_key="...", endpoint="...").save("prod")
31
+ block = await MyBlock.load("prod")
32
+ ```
33
+
34
+ **Sync/async dispatch:** All I/O methods (`save`, `load`, `register_type_and_schema`, `delete`) use `@async_dispatch` — the same method name works in sync and async contexts.
35
+
36
+ ## Anti-Patterns
37
+
38
+ - **Don't call `register_type_and_schema()` manually before `save()`** — `save()` calls it automatically and handles idempotency.
39
+ - **Don't change `_block_type_slug` after a block has been registered** — the slug is the server-side primary key; renaming it creates a new block type and orphans existing documents.
40
+ - **Don't use `load(validate=False)` as the normal path** — it bypasses validation and leaves missing fields as `None`. It exists only for schema migration scenarios.
41
+
42
+ ## Pitfalls
43
+
44
+ - **`position` in JSON schema** — `model_json_schema()` injects a `position` key (0-based field declaration order) into every property, including nested block definitions. This key affects the schema checksum. Adding or reordering fields changes the checksum and invalidates previously stored schema references.
45
+ - **Schema checksum stability** — the checksum covers field definitions including `position`. Any field addition, removal, or reorder creates a new schema version on the server.
46
+ - **Secret fields use dot-notation paths** — `"credentials.api_key"` means a nested field is secret; `"passwords.*"` means all values under that key are secret. The `secret_fields` list in the schema drives serialization obfuscation.
47
+ - **Nested blocks are registered transitively** — `register_type_and_schema()` walks all field annotations recursively. A deeply nested block that fails registration will surface an error at the outermost `save()` call.
48
+ - **Sync/async paths must stay in lockstep** — `_save_sync` and `asave` / `_save` must produce identical results. Changes to one must be mirrored in the other.
@@ -428,21 +428,28 @@ class Block(BaseModel, ABC):
428
428
  if (ctx := info.context) and ctx.get("include_secrets") is True:
429
429
  # Add serialization mode to context so handle_secret_render knows how to process nested models
430
430
  ctx["serialization_mode"] = info.mode
431
+ ctx["by_alias"] = info.by_alias
431
432
 
432
- for field_name in type(self).model_fields:
433
+ for field_name, field_info in type(self).model_fields.items():
433
434
  field_value = getattr(self, field_name)
434
435
 
435
- # In JSON mode, skip fields that don't contain secrets
436
+ # Determine the correct key in the serialized dict,
437
+ # respecting alias settings to avoid creating duplicate
438
+ # entries (e.g. both "schema" and "schema_" for a field
439
+ # defined as `schema_: str = Field(alias="schema")`).
440
+ alias = field_info.serialization_alias or field_info.alias
441
+ if info.by_alias and alias:
442
+ key = alias
443
+ else:
444
+ key = field_name
445
+
446
+ # Skip fields that don't contain secrets
436
447
  # as they're already properly serialized by the handler
437
- if (
438
- info.mode == "json"
439
- and field_name in jsonable_self
440
- and not self._field_has_secrets(field_name)
441
- ):
448
+ if key in jsonable_self and not self._field_has_secrets(field_name):
442
449
  continue
443
450
 
444
451
  # For all other fields, use visit_collection with handle_secret_render
445
- jsonable_self[field_name] = visit_collection(
452
+ jsonable_self[key] = visit_collection(
446
453
  expr=field_value,
447
454
  visit_fn=partial(handle_secret_render, context=ctx),
448
455
  return_data=True,
@@ -1946,6 +1953,54 @@ class Block(BaseModel, ABC):
1946
1953
 
1947
1954
  return f"prefect.blocks.{self.get_block_type_slug()}.{block_document_name}"
1948
1955
 
1956
+ @classmethod
1957
+ def _inject_field_positions(
1958
+ cls,
1959
+ schema: dict[str, Any],
1960
+ model_cls: type["Block"],
1961
+ by_alias: bool,
1962
+ ) -> None:
1963
+ """Add a 'position' key to each property in the schema based on field declaration order."""
1964
+ if "properties" not in schema:
1965
+ return
1966
+ for position, field_name in enumerate(model_cls.model_fields):
1967
+ field_info = model_cls.model_fields[field_name]
1968
+ alias = field_info.alias or field_name
1969
+ key = alias if by_alias else field_name
1970
+ if key in schema["properties"]:
1971
+ schema["properties"][key]["position"] = position
1972
+
1973
+ @classmethod
1974
+ def _collect_nested_block_types(
1975
+ cls, model_cls: type["Block"]
1976
+ ) -> dict[str, type["Block"]]:
1977
+ """Return a mapping of class name → Block subclass for all nested blocks."""
1978
+ result: dict[str, type["Block"]] = {}
1979
+
1980
+ for field in model_cls.model_fields.values():
1981
+ annotation = field.annotation
1982
+ if annotation is None:
1983
+ continue
1984
+ cls._walk_annotation_for_blocks(annotation, result)
1985
+
1986
+ return result
1987
+
1988
+ @classmethod
1989
+ def _walk_annotation_for_blocks(
1990
+ cls,
1991
+ annotation: type,
1992
+ result: dict[str, type["Block"]],
1993
+ ) -> None:
1994
+ if Block.is_block_class(annotation):
1995
+ if annotation.__name__ not in result:
1996
+ result[annotation.__name__] = annotation
1997
+ # recurse into the nested block's own fields
1998
+ for nested in cls._collect_nested_block_types(annotation).items():
1999
+ result.setdefault(nested[0], nested[1])
2000
+ if get_origin(annotation) in NestedTypes:
2001
+ for arg in get_args(annotation):
2002
+ cls._walk_annotation_for_blocks(arg, result)
2003
+
1949
2004
  @classmethod
1950
2005
  def model_json_schema(
1951
2006
  cls,
@@ -1964,6 +2019,19 @@ class Block(BaseModel, ABC):
1964
2019
  schema["definitions"] = schema.pop("$defs")
1965
2020
 
1966
2021
  schema = remove_nested_keys(["additionalProperties"], schema)
2022
+
2023
+ # Add position to top-level properties based on field declaration order
2024
+ cls._inject_field_positions(schema, cls, by_alias)
2025
+
2026
+ # Add position to nested block definitions
2027
+ if "definitions" in schema:
2028
+ nested_blocks = cls._collect_nested_block_types(cls)
2029
+ for def_name, def_schema in schema["definitions"].items():
2030
+ if def_name in nested_blocks:
2031
+ cls._inject_field_positions(
2032
+ def_schema, nested_blocks[def_name], by_alias
2033
+ )
2034
+
1967
2035
  return schema
1968
2036
 
1969
2037
  @classmethod
@@ -496,8 +496,7 @@ class TwilioSMS(AbstractAppriseNotificationBlock):
496
496
  to_phone_numbers: list[str] = Field(
497
497
  default=...,
498
498
  description="A list of valid Twilio phone number(s) to send the message to.",
499
- # not wrapped in brackets because of the way UI displays examples; in code should be ["18004242424"]
500
- examples=["18004242424"],
499
+ examples=['["18004242424", "18004242425"]'],
501
500
  )
502
501
 
503
502
  def block_initialization(self) -> None:
@@ -1056,7 +1055,7 @@ class SendgridEmail(AbstractAppriseNotificationBlock):
1056
1055
  default=...,
1057
1056
  title="Recipient emails",
1058
1057
  description="Email ids of all recipients.",
1059
- examples=['"recipient1@gmail.com"'],
1058
+ examples=['["recipient1@gmail.com", "recipient2@gmail.com"]'],
1060
1059
  )
1061
1060
 
1062
1061
  def block_initialization(self) -> None:
@@ -16,7 +16,9 @@ Does NOT define concurrency limits (server-side in `server/`). Does NOT handle t
16
16
 
17
17
  **`strict=False` (default):** logs a warning if the named limit doesn't exist, but proceeds. `strict=True` raises `ConcurrencySlotAcquisitionError`.
18
18
 
19
- **Lease renewal:** `_leases.py` runs a background loop that renews immediately on entry, then sleeps for 75% of `lease_duration` between renewals. Each renewal call uses `@retry_async_fn(max_attempts=3)` for transient failures. If all 3 attempts fail, the background task raises and a done-callback either cancels execution (`raise_on_lease_renewal_failure=True`) or logs a warning.
19
+ **`raise_on_lease_renewal_failure` (public parameter):** Controls lease renewal failure behavior independently from `strict`. When `None` (default), falls back to the value of `strict` for backward compatibility. Set to `False` to let long-running tasks continue even if a transient renewal error occurs; set to `True` to terminate immediately on renewal failure regardless of `strict`. This means `strict=True, raise_on_lease_renewal_failure=False` gives strict slot acquisition but non-fatal renewal failures, and vice versa.
20
+
21
+ **Lease renewal:** `_leases.py` runs a background loop that renews immediately on entry, then sleeps for 75% of `lease_duration` between renewals. Each renewal call uses `@retry_async_fn(max_attempts=3)` for transient failures. If all 3 attempts fail, the background task raises and a done-callback either cancels execution or logs a warning, depending on `raise_on_lease_renewal_failure`.
20
22
 
21
23
  **Sync/async lockstep invariant:** `asyncio.py`/`sync.py` and `_asyncio.py`/`_sync.py` are parallel implementations. Any behavior change to one must be mirrored in the other.
22
24
 
@@ -167,6 +167,7 @@ async def concurrency(
167
167
  strict: bool = False,
168
168
  holder: "Optional[ConcurrencyLeaseHolder]" = None,
169
169
  suppress_warnings: bool = False,
170
+ raise_on_lease_renewal_failure: Optional[bool] = None,
170
171
  ) -> AsyncGenerator[None, None]:
171
172
  """
172
173
  Internal version of the `concurrency` context manager. The public version is located in `prefect.concurrency.asyncio`.
@@ -182,6 +183,11 @@ async def concurrency(
182
183
  Defaults to `False`.
183
184
  holder: A dictionary containing information about the holder of the concurrency slots.
184
185
  Typically includes 'type' and 'id' keys.
186
+ raise_on_lease_renewal_failure: Controls whether to terminate execution when lease
187
+ renewal fails. When `None` (default), follows the `strict` parameter for
188
+ backward compatibility. Set to `False` to allow long-running tasks to continue
189
+ even if a transient lease renewal error occurs. Set to `True` to terminate
190
+ execution immediately on renewal failure.
185
191
 
186
192
  Raises:
187
193
  TimeoutError: If the slots are not acquired within the given timeout.
@@ -227,7 +233,9 @@ async def concurrency(
227
233
  async with amaintain_concurrency_lease(
228
234
  response.lease_id,
229
235
  lease_duration,
230
- raise_on_lease_renewal_failure=strict,
236
+ raise_on_lease_renewal_failure=raise_on_lease_renewal_failure
237
+ if raise_on_lease_renewal_failure is not None
238
+ else strict,
231
239
  suppress_warnings=suppress_warnings,
232
240
  ):
233
241
  yield
@@ -79,19 +79,31 @@ def maintain_concurrency_lease(
79
79
  logger = get_logger("concurrency")
80
80
  if raise_on_lease_renewal_failure:
81
81
  logger.error(
82
- "Concurrency lease renewal failed - slots are no longer reserved. Terminating execution to prevent over-allocation.",
82
+ "Concurrency lease renewal failed - slots are no longer reserved. "
83
+ "Terminating execution to prevent over-allocation. "
84
+ "Lease ID: %s, exception: %s",
85
+ lease_id,
86
+ exc,
83
87
  exc_info=(type(exc), exc, exc.__traceback__),
84
88
  )
85
89
  assert cancel_scope.cancel()
86
90
  else:
87
91
  if suppress_warnings:
88
92
  logger.debug(
89
- "Concurrency lease renewal failed - slots are no longer reserved. Execution will continue, but concurrency limits may be exceeded.",
93
+ "Concurrency lease renewal failed - slots are no longer reserved. "
94
+ "Execution will continue, but concurrency limits may be exceeded. "
95
+ "Lease ID: %s, exception: %s",
96
+ lease_id,
97
+ exc,
90
98
  exc_info=(type(exc), exc, exc.__traceback__),
91
99
  )
92
100
  else:
93
101
  logger.warning(
94
- "Concurrency lease renewal failed - slots are no longer reserved. Execution will continue, but concurrency limits may be exceeded.",
102
+ "Concurrency lease renewal failed - slots are no longer reserved. "
103
+ "Execution will continue, but concurrency limits may be exceeded. "
104
+ "Lease ID: %s, exception: %s",
105
+ lease_id,
106
+ exc,
95
107
  exc_info=(type(exc), exc, exc.__traceback__),
96
108
  )
97
109
 
@@ -137,19 +149,31 @@ async def amaintain_concurrency_lease(
137
149
  logger = get_logger("concurrency")
138
150
  if raise_on_lease_renewal_failure:
139
151
  logger.error(
140
- "Concurrency lease renewal failed - slots are no longer reserved. Terminating execution to prevent over-allocation.",
152
+ "Concurrency lease renewal failed - slots are no longer reserved. "
153
+ "Terminating execution to prevent over-allocation. "
154
+ "Lease ID: %s, exception: %s",
155
+ lease_id,
156
+ exc,
141
157
  exc_info=(type(exc), exc, exc.__traceback__),
142
158
  )
143
159
  cancel_scope.cancel()
144
160
  else:
145
161
  if suppress_warnings:
146
162
  logger.debug(
147
- "Concurrency lease renewal failed - slots are no longer reserved. Execution will continue, but concurrency limits may be exceeded.",
163
+ "Concurrency lease renewal failed - slots are no longer reserved. "
164
+ "Execution will continue, but concurrency limits may be exceeded. "
165
+ "Lease ID: %s, exception: %s",
166
+ lease_id,
167
+ exc,
148
168
  exc_info=(type(exc), exc, exc.__traceback__),
149
169
  )
150
170
  else:
151
171
  logger.warning(
152
- "Concurrency lease renewal failed - slots are no longer reserved. Execution will continue, but concurrency limits may be exceeded.",
172
+ "Concurrency lease renewal failed - slots are no longer reserved. "
173
+ "Execution will continue, but concurrency limits may be exceeded. "
174
+ "Lease ID: %s, exception: %s",
175
+ lease_id,
176
+ exc,
153
177
  exc_info=(type(exc), exc, exc.__traceback__),
154
178
  )
155
179
 
@@ -81,6 +81,7 @@ def concurrency(
81
81
  strict: bool = False,
82
82
  holder: "Optional[ConcurrencyLeaseHolder]" = None,
83
83
  suppress_warnings: bool = False,
84
+ raise_on_lease_renewal_failure: Optional[bool] = None,
84
85
  ) -> Generator[None, None, None]:
85
86
  """A context manager that acquires and releases concurrency slots from the
86
87
  given concurrency limits.
@@ -96,6 +97,11 @@ def concurrency(
96
97
  Defaults to `False`.
97
98
  holder: A dictionary containing information about the holder of the concurrency slots.
98
99
  Typically includes 'type' and 'id' keys.
100
+ raise_on_lease_renewal_failure: Controls whether to terminate execution when lease
101
+ renewal fails. When `None` (default), follows the `strict` parameter for
102
+ backward compatibility. Set to `False` to allow long-running tasks to continue
103
+ even if a transient lease renewal error occurs. Set to `True` to terminate
104
+ execution immediately on renewal failure.
99
105
 
100
106
  Raises:
101
107
  TimeoutError: If the slots are not acquired within the given timeout.
@@ -143,7 +149,9 @@ def concurrency(
143
149
  with maintain_concurrency_lease(
144
150
  acquisition_response.lease_id,
145
151
  lease_duration,
146
- raise_on_lease_renewal_failure=strict,
152
+ raise_on_lease_renewal_failure=raise_on_lease_renewal_failure
153
+ if raise_on_lease_renewal_failure is not None
154
+ else strict,
147
155
  suppress_warnings=suppress_warnings,
148
156
  ):
149
157
  yield
@@ -29,6 +29,7 @@ async def concurrency(
29
29
  lease_duration: float = 300,
30
30
  strict: bool = False,
31
31
  holder: "Optional[ConcurrencyLeaseHolder]" = None,
32
+ raise_on_lease_renewal_failure: Optional[bool] = None,
32
33
  ) -> AsyncGenerator[None, None]:
33
34
  """A
34
35
  context manager that acquires and releases concurrency slots from the
@@ -45,6 +46,11 @@ async def concurrency(
45
46
  Defaults to `False`.
46
47
  holder: A dictionary containing information about the holder of the concurrency slots.
47
48
  Typically includes 'type' and 'id' keys.
49
+ raise_on_lease_renewal_failure: Controls whether to terminate execution when lease
50
+ renewal fails. When `None` (default), follows the `strict` parameter for
51
+ backward compatibility. Set to `False` to allow long-running tasks to continue
52
+ even if a transient lease renewal error occurs. Set to `True` to terminate
53
+ execution immediately on renewal failure.
48
54
 
49
55
  Raises:
50
56
  TimeoutError: If the slots are not acquired within the given timeout.
@@ -72,6 +78,7 @@ async def concurrency(
72
78
  strict=strict,
73
79
  holder=holder,
74
80
  suppress_warnings=False,
81
+ raise_on_lease_renewal_failure=raise_on_lease_renewal_failure,
75
82
  ):
76
83
  yield
77
84
 
@@ -27,6 +27,7 @@ def concurrency(
27
27
  lease_duration: float = 300,
28
28
  strict: bool = False,
29
29
  holder: "Optional[ConcurrencyLeaseHolder]" = None,
30
+ raise_on_lease_renewal_failure: Optional[bool] = None,
30
31
  ) -> Generator[None, None, None]:
31
32
  """A context manager that acquires and releases concurrency slots from the
32
33
  given concurrency limits.
@@ -42,6 +43,11 @@ def concurrency(
42
43
  Defaults to `False`.
43
44
  holder: A dictionary containing information about the holder of the concurrency slots.
44
45
  Typically includes 'type' and 'id' keys.
46
+ raise_on_lease_renewal_failure: Controls whether to terminate execution when lease
47
+ renewal fails. When `None` (default), follows the `strict` parameter for
48
+ backward compatibility. Set to `False` to allow long-running tasks to continue
49
+ even if a transient lease renewal error occurs. Set to `True` to terminate
50
+ execution immediately on renewal failure.
45
51
 
46
52
  Raises:
47
53
  TimeoutError: If the slots are not acquired within the given timeout.
@@ -69,6 +75,7 @@ def concurrency(
69
75
  strict=strict,
70
76
  holder=holder,
71
77
  suppress_warnings=False,
78
+ raise_on_lease_renewal_failure=raise_on_lease_renewal_failure,
72
79
  ):
73
80
  yield
74
81
 
@@ -60,6 +60,53 @@ if TYPE_CHECKING:
60
60
  from prefect.tasks import Task
61
61
 
62
62
 
63
+ class _ContextWrappedCallable:
64
+ """Picklable callable that hydrates Prefect context before calling the
65
+ wrapped function. The serialized context is stored as cloudpickle
66
+ bytes so that standard pickle (used by `multiprocessing`) can handle it."""
67
+
68
+ def __init__(
69
+ self, fn: Callable[..., Any], serialized_context: dict[str, Any]
70
+ ) -> None:
71
+ import cloudpickle
72
+
73
+ self.fn = fn
74
+ self._ctx_bytes = cloudpickle.dumps(serialized_context)
75
+
76
+ def __call__(self, *args: Any, **kwargs: Any) -> Any:
77
+ import cloudpickle
78
+
79
+ ctx = cloudpickle.loads(self._ctx_bytes)
80
+ with hydrated_context(ctx):
81
+ return self.fn(*args, **kwargs)
82
+
83
+
84
+ def with_context(fn: Callable[..., Any]) -> _ContextWrappedCallable:
85
+ """Wrap a function so it runs with the current Prefect context when
86
+ called in a subprocess.
87
+
88
+ Use this to enable `get_run_logger()` and other context-dependent
89
+ APIs in functions executed via `multiprocessing.Pool`,
90
+ `ProcessPoolExecutor`, or `multiprocessing.Process`.
91
+
92
+ Example:
93
+ ```python
94
+ from prefect.context import with_context
95
+
96
+ def worker(item):
97
+ logger = get_run_logger()
98
+ logger.info(f"Processing {item}")
99
+
100
+ @task
101
+ def my_task():
102
+ with multiprocessing.Pool() as pool:
103
+ pool.map(with_context(worker), items)
104
+ ```
105
+ """
106
+ ctx = serialize_context()
107
+ return _ContextWrappedCallable(fn, ctx)
108
+
109
+
63
110
  def serialize_context(
64
111
  asset_ctx_kwargs: Union[dict[str, Any], None] = None,
65
112
  ) -> dict[str, Any]:
@@ -17,4 +17,10 @@ def __getattr__(name: str) -> object:
17
17
  module, attr = _public_api[name]
18
18
  return getattr(import_module(module), attr)
19
19
 
20
+ # Allow submodule imports (e.g. `from prefect.docker._buildx import ...`)
21
+ try:
22
+ return import_module(f"{__name__}.{name}")
23
+ except ModuleNotFoundError:
24
+ pass
25
+
20
26
  raise AttributeError(f"module {__name__!r} has no attribute {name!r}")