prefect-client 3.4.11.dev4__tar.gz → 3.4.12.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 (341) hide show
  1. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/PKG-INFO +1 -1
  2. prefect_client-3.4.12.dev1/src/prefect/_build_info.py +5 -0
  3. prefect_client-3.4.12.dev1/src/prefect/_internal/installation.py +60 -0
  4. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/__init__.py +1 -1
  5. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/__init__.py +2 -2
  6. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/schemas/objects.py +3 -0
  7. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/_asyncio.py +0 -21
  8. prefect_client-3.4.12.dev1/src/prefect/concurrency/_leases.py +139 -0
  9. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/asyncio.py +4 -38
  10. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/sync.py +6 -41
  11. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/context.py +1 -1
  12. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/deployments/base.py +1 -1
  13. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/deployments/steps/core.py +6 -3
  14. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/deployments/steps/pull.py +1 -1
  15. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/flow_engine.py +26 -2
  16. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/infrastructure/provisioners/coiled.py +2 -5
  17. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/infrastructure/provisioners/ecs.py +2 -5
  18. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/infrastructure/provisioners/modal.py +2 -3
  19. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/locking/memory.py +4 -0
  20. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/logging/handlers.py +24 -6
  21. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/flow_runs.py +7 -2
  22. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/transactions.py +27 -14
  23. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/dockerutils.py +1 -3
  24. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/workers/process.py +1 -1
  25. prefect_client-3.4.11.dev4/src/prefect/_build_info.py +0 -5
  26. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/.gitignore +0 -0
  27. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/LICENSE +0 -0
  28. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/README.md +0 -0
  29. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/pyproject.toml +0 -0
  30. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/.prefectignore +0 -0
  31. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/AGENTS.md +0 -0
  32. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/__init__.py +0 -0
  33. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/__main__.py +0 -0
  34. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_experimental/__init__.py +0 -0
  35. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_experimental/bundles/__init__.py +0 -0
  36. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_experimental/bundles/execute.py +0 -0
  37. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_experimental/lineage.py +0 -0
  38. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_experimental/sla/__init__.py +0 -0
  39. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_experimental/sla/client.py +0 -0
  40. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_experimental/sla/objects.py +0 -0
  41. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/__init__.py +0 -0
  42. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/_logging.py +0 -0
  43. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/compatibility/__init__.py +0 -0
  44. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  45. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/compatibility/blocks.py +0 -0
  46. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  47. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/compatibility/migration.py +0 -0
  48. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/concurrency/__init__.py +0 -0
  49. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/concurrency/api.py +0 -0
  50. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/concurrency/calls.py +0 -0
  51. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  52. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  53. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/concurrency/inspection.py +0 -0
  54. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/concurrency/primitives.py +0 -0
  55. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/concurrency/services.py +0 -0
  56. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/concurrency/threads.py +0 -0
  57. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/concurrency/waiters.py +0 -0
  58. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/integrations.py +0 -0
  59. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/pydantic/__init__.py +0 -0
  60. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/pydantic/schemas.py +0 -0
  61. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  62. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  63. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
  64. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/pytz.py +0 -0
  65. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/retries.py +0 -0
  66. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/schemas/__init__.py +0 -0
  67. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/schemas/bases.py +0 -0
  68. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/schemas/fields.py +0 -0
  69. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/schemas/serializers.py +0 -0
  70. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/schemas/validators.py +0 -0
  71. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/uuid7.py +0 -0
  72. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_internal/websockets.py +0 -0
  73. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_result_records.py +0 -0
  74. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_vendor/croniter/__init__.py +0 -0
  75. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_vendor/croniter/croniter.py +0 -0
  76. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_versioning.py +0 -0
  77. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/_waiters.py +0 -0
  78. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/agent.py +0 -0
  79. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/artifacts.py +0 -0
  80. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/assets/__init__.py +0 -0
  81. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/assets/core.py +0 -0
  82. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/assets/materialize.py +0 -0
  83. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/automations.py +0 -0
  84. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/blocks/__init__.py +0 -0
  85. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/blocks/abstract.py +0 -0
  86. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/blocks/core.py +0 -0
  87. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/blocks/fields.py +0 -0
  88. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/blocks/notifications.py +0 -0
  89. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/blocks/redis.py +0 -0
  90. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/blocks/system.py +0 -0
  91. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/blocks/webhook.py +0 -0
  92. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/cache_policies.py +0 -0
  93. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/base.py +0 -0
  94. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/cloud.py +0 -0
  95. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/collections.py +0 -0
  96. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/constants.py +0 -0
  97. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  98. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  99. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  100. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_automations/client.py +0 -0
  101. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  102. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  103. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  104. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  105. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  106. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  107. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  108. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  109. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  110. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  111. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  112. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  113. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  114. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_flows/client.py +0 -0
  115. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  116. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_logs/client.py +0 -0
  117. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  118. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_variables/client.py +0 -0
  119. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  120. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  121. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/base.py +0 -0
  122. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/orchestration/routes.py +0 -0
  123. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/schemas/__init__.py +0 -0
  124. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/schemas/actions.py +0 -0
  125. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/schemas/filters.py +0 -0
  126. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/schemas/responses.py +0 -0
  127. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/schemas/schedules.py +0 -0
  128. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/schemas/sorting.py +0 -0
  129. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/subscriptions.py +0 -0
  130. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/types/__init__.py +0 -0
  131. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  132. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/client/utilities.py +0 -0
  133. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/__init__.py +0 -0
  134. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/_events.py +0 -0
  135. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/context.py +0 -0
  136. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/services.py +0 -0
  137. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/v1/__init__.py +0 -0
  138. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  139. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/v1/_events.py +0 -0
  140. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/v1/asyncio.py +0 -0
  141. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/v1/context.py +0 -0
  142. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/v1/services.py +0 -0
  143. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/concurrency/v1/sync.py +0 -0
  144. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/deployments/__init__.py +0 -0
  145. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/deployments/deployments.py +0 -0
  146. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/deployments/flow_runs.py +0 -0
  147. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/deployments/runner.py +0 -0
  148. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/deployments/schedules.py +0 -0
  149. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/deployments/steps/__init__.py +0 -0
  150. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/deployments/steps/utility.py +0 -0
  151. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/docker/__init__.py +0 -0
  152. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/docker/docker_image.py +0 -0
  153. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/engine.py +0 -0
  154. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/__init__.py +0 -0
  155. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/actions.py +0 -0
  156. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/cli/__init__.py +0 -0
  157. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/cli/automations.py +0 -0
  158. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/clients.py +0 -0
  159. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/filters.py +0 -0
  160. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/related.py +0 -0
  161. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/schemas/__init__.py +0 -0
  162. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/schemas/automations.py +0 -0
  163. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  164. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/schemas/events.py +0 -0
  165. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/schemas/labelling.py +0 -0
  166. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/utilities.py +0 -0
  167. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/events/worker.py +0 -0
  168. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/exceptions.py +0 -0
  169. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/filesystems.py +0 -0
  170. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/flow_runs.py +0 -0
  171. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/flows.py +0 -0
  172. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/futures.py +0 -0
  173. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/infrastructure/__init__.py +0 -0
  174. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/infrastructure/base.py +0 -0
  175. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  176. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  177. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  178. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/input/__init__.py +0 -0
  179. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/input/actions.py +0 -0
  180. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/input/run_input.py +0 -0
  181. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/locking/__init__.py +0 -0
  182. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/locking/filesystem.py +0 -0
  183. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/locking/protocol.py +0 -0
  184. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/logging/__init__.py +0 -0
  185. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/logging/clients.py +0 -0
  186. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/logging/configuration.py +0 -0
  187. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/logging/filters.py +0 -0
  188. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/logging/formatters.py +0 -0
  189. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/logging/highlighters.py +0 -0
  190. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/logging/loggers.py +0 -0
  191. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/logging/logging.yml +0 -0
  192. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/main.py +0 -0
  193. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/plugins.py +0 -0
  194. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/py.typed +0 -0
  195. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/results.py +0 -0
  196. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runner/__init__.py +0 -0
  197. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runner/_observers.py +0 -0
  198. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runner/runner.py +0 -0
  199. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runner/server.py +0 -0
  200. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runner/storage.py +0 -0
  201. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runner/submit.py +0 -0
  202. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runner/utils.py +0 -0
  203. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runtime/__init__.py +0 -0
  204. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runtime/deployment.py +0 -0
  205. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runtime/flow_run.py +0 -0
  206. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/runtime/task_run.py +0 -0
  207. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/schedules.py +0 -0
  208. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/serializers.py +0 -0
  209. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/__init__.py +0 -0
  210. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/admin.py +0 -0
  211. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/artifacts.py +0 -0
  212. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/automations.py +0 -0
  213. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/block_capabilities.py +0 -0
  214. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/block_documents.py +0 -0
  215. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/block_schemas.py +0 -0
  216. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/block_types.py +0 -0
  217. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/clients.py +0 -0
  218. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/collections.py +0 -0
  219. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  220. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/concurrency_limits.py +0 -0
  221. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  222. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/csrf_token.py +0 -0
  223. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/dependencies.py +0 -0
  224. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/deployments.py +0 -0
  225. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/events.py +0 -0
  226. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/flow_run_states.py +0 -0
  227. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/flows.py +0 -0
  228. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/logs.py +0 -0
  229. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/middleware.py +0 -0
  230. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/root.py +0 -0
  231. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/run_history.py +0 -0
  232. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/saved_searches.py +0 -0
  233. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/server.py +0 -0
  234. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  235. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/task_run_states.py +0 -0
  236. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/task_runs.py +0 -0
  237. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/task_workers.py +0 -0
  238. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/templates.py +0 -0
  239. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/ui/__init__.py +0 -0
  240. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/ui/flow_runs.py +0 -0
  241. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/ui/flows.py +0 -0
  242. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/ui/schemas.py +0 -0
  243. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/ui/task_runs.py +0 -0
  244. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/validation.py +0 -0
  245. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/variables.py +0 -0
  246. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/work_queues.py +0 -0
  247. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/server/api/workers.py +0 -0
  248. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/__init__.py +0 -0
  249. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/base.py +0 -0
  250. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/constants.py +0 -0
  251. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/context.py +0 -0
  252. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/legacy.py +0 -0
  253. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/__init__.py +0 -0
  254. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/_defaults.py +0 -0
  255. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/api.py +0 -0
  256. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/cli.py +0 -0
  257. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/client.py +0 -0
  258. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/cloud.py +0 -0
  259. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/deployments.py +0 -0
  260. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/experiments.py +0 -0
  261. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/flows.py +0 -0
  262. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/internal.py +0 -0
  263. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/logging.py +0 -0
  264. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/results.py +0 -0
  265. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/root.py +0 -0
  266. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/runner.py +0 -0
  267. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/__init__.py +0 -0
  268. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/api.py +0 -0
  269. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/concurrency.py +0 -0
  270. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/database.py +0 -0
  271. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/deployments.py +0 -0
  272. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/ephemeral.py +0 -0
  273. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/events.py +0 -0
  274. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  275. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/logs.py +0 -0
  276. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/root.py +0 -0
  277. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/services.py +0 -0
  278. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/tasks.py +0 -0
  279. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/server/ui.py +0 -0
  280. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/tasks.py +0 -0
  281. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/testing.py +0 -0
  282. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/models/worker.py +0 -0
  283. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/profiles.py +0 -0
  284. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/profiles.toml +0 -0
  285. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/settings/sources.py +0 -0
  286. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/states.py +0 -0
  287. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/task_engine.py +0 -0
  288. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/task_runners.py +0 -0
  289. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/task_runs.py +0 -0
  290. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/task_worker.py +0 -0
  291. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/tasks.py +0 -0
  292. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/telemetry/__init__.py +0 -0
  293. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/telemetry/bootstrap.py +0 -0
  294. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/telemetry/instrumentation.py +0 -0
  295. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/telemetry/logging.py +0 -0
  296. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/telemetry/processors.py +0 -0
  297. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/telemetry/run_telemetry.py +0 -0
  298. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/telemetry/services.py +0 -0
  299. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/types/__init__.py +0 -0
  300. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/types/_datetime.py +0 -0
  301. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/types/entrypoint.py +0 -0
  302. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/types/names.py +0 -0
  303. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/__init__.py +0 -0
  304. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/_ast.py +0 -0
  305. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/_deprecated.py +0 -0
  306. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/_engine.py +0 -0
  307. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/_git.py +0 -0
  308. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/annotations.py +0 -0
  309. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/asyncutils.py +0 -0
  310. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/callables.py +0 -0
  311. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/collections.py +0 -0
  312. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/compat.py +0 -0
  313. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/context.py +0 -0
  314. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/dispatch.py +0 -0
  315. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/engine.py +0 -0
  316. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/filesystem.py +0 -0
  317. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/generics.py +0 -0
  318. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/hashing.py +0 -0
  319. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/importtools.py +0 -0
  320. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/math.py +0 -0
  321. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/names.py +0 -0
  322. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/processutils.py +0 -0
  323. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/pydantic.py +0 -0
  324. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/render_swagger.py +0 -0
  325. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  326. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  327. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/schema_tools/validation.py +0 -0
  328. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/services.py +0 -0
  329. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/slugify.py +0 -0
  330. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/templating.py +0 -0
  331. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/text.py +0 -0
  332. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/timeout.py +0 -0
  333. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/urls.py +0 -0
  334. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/utilities/visualization.py +0 -0
  335. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/variables.py +0 -0
  336. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/workers/__init__.py +0 -0
  337. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/workers/base.py +0 -0
  338. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/workers/block.py +0 -0
  339. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/workers/cloud.py +0 -0
  340. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.dev1}/src/prefect/workers/server.py +0 -0
  341. {prefect_client-3.4.11.dev4 → prefect_client-3.4.12.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.4.11.dev4
3
+ Version: 3.4.12.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
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.4.12.dev1"
3
+ __build_date__ = "2025-08-02 08:08:42.755918+00:00"
4
+ __git_commit__ = "4fee08bf0dfe814941b70db3585eab891397519c"
5
+ __dirty__ = False
@@ -0,0 +1,60 @@
1
+ import importlib
2
+ import subprocess
3
+ import sys
4
+
5
+ import prefect.utilities.processutils
6
+
7
+
8
+ def install_packages(
9
+ packages: list[str], stream_output: bool = False, upgrade: bool = False
10
+ ):
11
+ """
12
+ Install packages using uv if available, otherwise use pip.
13
+ """
14
+ base_command = ["pip", "install", *packages]
15
+ if upgrade:
16
+ base_command.append("--upgrade")
17
+ if stream_output:
18
+ stdout = sys.stdout
19
+ stderr = sys.stderr
20
+ else:
21
+ stdout = subprocess.DEVNULL
22
+ stderr = subprocess.DEVNULL
23
+ try:
24
+ uv = importlib.import_module("uv")
25
+
26
+ command = [uv.find_uv_bin(), *base_command]
27
+ subprocess.check_call(
28
+ command,
29
+ stdout=stdout,
30
+ stderr=stderr,
31
+ )
32
+ except (ImportError, ModuleNotFoundError, FileNotFoundError):
33
+ command = [sys.executable, "-m", *base_command]
34
+ subprocess.check_call(
35
+ command,
36
+ stdout=stdout,
37
+ stderr=stderr,
38
+ )
39
+
40
+
41
+ async def ainstall_packages(
42
+ packages: list[str], stream_output: bool = False, upgrade: bool = False
43
+ ):
44
+ """
45
+ Install packages using uv if available, otherwise use pip.
46
+ """
47
+ base_command = ["pip", "install", *packages]
48
+ if upgrade:
49
+ base_command.append("--upgrade")
50
+ try:
51
+ uv = importlib.import_module("uv")
52
+
53
+ await prefect.utilities.processutils.run_process(
54
+ [uv.find_uv_bin(), *base_command], stream_output=stream_output
55
+ )
56
+ except (ImportError, ModuleNotFoundError, FileNotFoundError):
57
+ await prefect.utilities.processutils.run_process(
58
+ [sys.executable, "-m", *base_command],
59
+ stream_output=stream_output,
60
+ )
@@ -1,5 +1,5 @@
1
1
  """
2
- Asynchronous client implementation for communicating with the [Prefect REST API](/api-ref/rest-api/).
2
+ Asynchronous client implementation for communicating with the [Prefect REST API](https://docs.prefect.io/v3/api-ref/rest-api/).
3
3
 
4
4
  Explore the client by communicating with an in-memory webserver - no setup required:
5
5
 
@@ -279,7 +279,7 @@ class PrefectClient(
279
279
  WorkPoolAsyncClient,
280
280
  ):
281
281
  """
282
- An asynchronous client for interacting with the [Prefect REST API](/api-ref/rest-api/).
282
+ An asynchronous client for interacting with the [Prefect REST API](https://docs.prefect.io/v3/api-ref/rest-api/).
283
283
 
284
284
  Args:
285
285
  api: the REST API URL or FastAPI application to connect to
@@ -1142,7 +1142,7 @@ class SyncPrefectClient(
1142
1142
  WorkPoolClient,
1143
1143
  ):
1144
1144
  """
1145
- A synchronous client for interacting with the [Prefect REST API](/api-ref/rest-api/).
1145
+ A synchronous client for interacting with the [Prefect REST API](https://docs.prefect.io/v3/api-ref/rest-api/).
1146
1146
 
1147
1147
  Args:
1148
1148
  api: the REST API URL or FastAPI application to connect to
@@ -185,6 +185,9 @@ class StateDetails(PrefectBaseModel):
185
185
  task_parameters_id: Optional[UUID] = None
186
186
  # Captures the trace_id and span_id of the span where this state was created
187
187
  traceparent: Optional[str] = None
188
+ # The ID of the lease that is currently holding the deployment concurrency slot
189
+ # for this run.
190
+ deployment_concurrency_lease_id: Optional[UUID] = None
188
191
 
189
192
  def to_run_result(
190
193
  self, run_type: RunType
@@ -131,27 +131,6 @@ async def aacquire_concurrency_slots_with_lease(
131
131
  ) from exc
132
132
 
133
133
 
134
- async def amaintain_concurrency_lease(
135
- lease_id: UUID,
136
- lease_duration: float,
137
- ) -> None:
138
- """
139
- Maintain a concurrency lease by renewing it after the given interval.
140
-
141
- Args:
142
- lease_id: The ID of the lease to maintain.
143
- lease_duration: The duration of the lease in seconds.
144
- """
145
- async with get_client() as client:
146
- while True:
147
- await asyncio.sleep( # Renew the lease 3/4 of the way through the lease duration
148
- lease_duration * 0.75
149
- )
150
- await client.renew_concurrency_lease(
151
- lease_id=lease_id, lease_duration=lease_duration
152
- )
153
-
154
-
155
134
  async def arelease_concurrency_slots(
156
135
  names: list[str], slots: int, occupancy_seconds: float
157
136
  ) -> list[MinimalConcurrencyLimitResponse]:
@@ -0,0 +1,139 @@
1
+ import asyncio
2
+ import concurrent.futures
3
+ from contextlib import asynccontextmanager, contextmanager
4
+ from typing import AsyncGenerator, Generator
5
+ from uuid import UUID
6
+
7
+ from prefect._internal.concurrency.api import create_call
8
+ from prefect._internal.concurrency.cancellation import (
9
+ AsyncCancelScope,
10
+ WatcherThreadCancelScope,
11
+ )
12
+ from prefect._internal.concurrency.threads import get_global_loop
13
+ from prefect.client.orchestration import get_client
14
+ from prefect.logging.loggers import get_logger, get_run_logger
15
+
16
+
17
+ async def _lease_renewal_loop(
18
+ lease_id: UUID,
19
+ lease_duration: float,
20
+ ) -> None:
21
+ """
22
+ Maintain a concurrency lease by renewing it after the given interval.
23
+
24
+ Args:
25
+ lease_id: The ID of the lease to maintain.
26
+ lease_duration: The duration of the lease in seconds.
27
+ """
28
+ async with get_client() as client:
29
+ while True:
30
+ await client.renew_concurrency_lease(
31
+ lease_id=lease_id, lease_duration=lease_duration
32
+ )
33
+ await asyncio.sleep( # Renew the lease 3/4 of the way through the lease duration
34
+ lease_duration * 0.75
35
+ )
36
+
37
+
38
+ @contextmanager
39
+ def maintain_concurrency_lease(
40
+ lease_id: UUID,
41
+ lease_duration: float,
42
+ raise_on_lease_renewal_failure: bool = False,
43
+ ) -> Generator[None, None, None]:
44
+ """
45
+ Maintain a concurrency lease for the given lease ID.
46
+
47
+ Args:
48
+ lease_id: The ID of the lease to maintain.
49
+ lease_duration: The duration of the lease in seconds.
50
+ raise_on_lease_renewal_failure: A boolean specifying whether to raise an error if the lease renewal fails.
51
+ """
52
+ # Start a loop to renew the lease on the global event loop to avoid blocking the main thread
53
+ global_loop = get_global_loop()
54
+ lease_renewal_call = create_call(
55
+ _lease_renewal_loop,
56
+ lease_id,
57
+ lease_duration,
58
+ )
59
+ global_loop.submit(lease_renewal_call)
60
+
61
+ with WatcherThreadCancelScope() as cancel_scope:
62
+
63
+ def handle_lease_renewal_failure(future: concurrent.futures.Future[None]):
64
+ if future.cancelled():
65
+ return
66
+ exc = future.exception()
67
+ if exc:
68
+ try:
69
+ # Use a run logger if available
70
+ logger = get_run_logger()
71
+ except Exception:
72
+ logger = get_logger("concurrency")
73
+ if raise_on_lease_renewal_failure:
74
+ logger.error(
75
+ "Concurrency lease renewal failed - slots are no longer reserved. Terminating execution to prevent over-allocation."
76
+ )
77
+ assert cancel_scope.cancel()
78
+ else:
79
+ logger.warning(
80
+ "Concurrency lease renewal failed - slots are no longer reserved. Execution will continue, but concurrency limits may be exceeded."
81
+ )
82
+
83
+ lease_renewal_call.future.add_done_callback(handle_lease_renewal_failure)
84
+
85
+ try:
86
+ yield
87
+ finally:
88
+ # Cancel the lease renewal loop
89
+ lease_renewal_call.cancel()
90
+
91
+
92
+ @asynccontextmanager
93
+ async def amaintain_concurrency_lease(
94
+ lease_id: UUID,
95
+ lease_duration: float,
96
+ raise_on_lease_renewal_failure: bool = False,
97
+ ) -> AsyncGenerator[None, None]:
98
+ """
99
+ Maintain a concurrency lease for the given lease ID.
100
+
101
+ Args:
102
+ lease_id: The ID of the lease to maintain.
103
+ lease_duration: The duration of the lease in seconds.
104
+ raise_on_lease_renewal_failure: A boolean specifying whether to raise an error if the lease renewal fails.
105
+ """
106
+ lease_renewal_task = asyncio.create_task(
107
+ _lease_renewal_loop(lease_id, lease_duration)
108
+ )
109
+ with AsyncCancelScope() as cancel_scope:
110
+
111
+ def handle_lease_renewal_failure(task: asyncio.Task[None]):
112
+ exc = task.exception()
113
+ if exc:
114
+ try:
115
+ # Use a run logger if available
116
+ logger = get_run_logger()
117
+ except Exception:
118
+ logger = get_logger("concurrency")
119
+ if raise_on_lease_renewal_failure:
120
+ logger.error(
121
+ "Concurrency lease renewal failed - slots are no longer reserved. Terminating execution to prevent over-allocation."
122
+ )
123
+ cancel_scope.cancel()
124
+ else:
125
+ logger.warning(
126
+ "Concurrency lease renewal failed - slots are no longer reserved. Execution will continue, but concurrency limits may be exceeded."
127
+ )
128
+
129
+ # Add a callback to stop execution if the lease renewal fails and strict is True
130
+ lease_renewal_task.add_done_callback(handle_lease_renewal_failure)
131
+ try:
132
+ yield
133
+ finally:
134
+ lease_renewal_task.cancel()
135
+ try:
136
+ await lease_renewal_task
137
+ except (asyncio.CancelledError, Exception):
138
+ # Handling for errors will be done in the callback
139
+ pass
@@ -1,12 +1,10 @@
1
- import asyncio
2
1
  from collections.abc import AsyncGenerator
3
2
  from contextlib import asynccontextmanager
4
3
  from typing import Optional, Union
5
4
 
6
5
  import anyio
7
6
 
8
- from prefect._internal.concurrency.cancellation import AsyncCancelScope
9
- from prefect.logging.loggers import get_logger, get_run_logger
7
+ from prefect.concurrency._leases import amaintain_concurrency_lease
10
8
 
11
9
  from ._asyncio import (
12
10
  AcquireConcurrencySlotTimeoutError as AcquireConcurrencySlotTimeoutError,
@@ -15,7 +13,6 @@ from ._asyncio import ConcurrencySlotAcquisitionError as ConcurrencySlotAcquisit
15
13
  from ._asyncio import (
16
14
  aacquire_concurrency_slots,
17
15
  aacquire_concurrency_slots_with_lease,
18
- amaintain_concurrency_lease,
19
16
  arelease_concurrency_slots_with_lease,
20
17
  )
21
18
  from ._events import (
@@ -81,43 +78,12 @@ async def concurrency(
81
78
  )
82
79
  emitted_events = emit_concurrency_acquisition_events(response.limits, occupy)
83
80
 
84
- lease_renewal_task = asyncio.create_task(
85
- amaintain_concurrency_lease(response.lease_id, lease_duration)
86
- )
87
-
88
81
  try:
89
- with AsyncCancelScope() as cancel_scope:
90
-
91
- def handle_lease_renewal_failure(task: asyncio.Task[None]):
92
- exc = task.exception()
93
- if exc:
94
- try:
95
- # Use a run logger if available
96
- logger = get_run_logger()
97
- except Exception:
98
- logger = get_logger("concurrency")
99
- if strict:
100
- logger.error(
101
- "Concurrency lease renewal failed - slots are no longer reserved. Terminating execution to prevent over-allocation."
102
- )
103
- cancel_scope.cancel()
104
- else:
105
- logger.warning(
106
- "Concurrency lease renewal failed - slots are no longer reserved. Execution will continue, but concurrency limits may be exceeded."
107
- )
108
-
109
- # Add a callback to stop execution if the lease renewal fails and strict is True
110
- lease_renewal_task.add_done_callback(handle_lease_renewal_failure)
111
-
82
+ async with amaintain_concurrency_lease(
83
+ response.lease_id, lease_duration, raise_on_lease_renewal_failure=strict
84
+ ):
112
85
  yield
113
86
  finally:
114
- lease_renewal_task.cancel()
115
- try:
116
- await lease_renewal_task
117
- except (asyncio.CancelledError, Exception):
118
- # Handling for errors will be done in the callback
119
- pass
120
-
121
87
  try:
122
88
  await arelease_concurrency_slots_with_lease(
123
89
  lease_id=response.lease_id,
@@ -1,4 +1,3 @@
1
- import concurrent.futures
2
1
  from collections.abc import Generator
3
2
  from contextlib import contextmanager
4
3
  from typing import Optional, TypeVar, Union
@@ -6,22 +5,16 @@ from uuid import UUID
6
5
 
7
6
  from typing_extensions import Literal
8
7
 
9
- from prefect._internal.concurrency.api import create_call
10
- from prefect._internal.concurrency.cancellation import (
11
- WatcherThreadCancelScope,
12
- )
13
- from prefect._internal.concurrency.threads import get_global_loop
14
8
  from prefect.client.schemas.responses import (
15
9
  ConcurrencyLimitWithLeaseResponse,
16
10
  MinimalConcurrencyLimitResponse,
17
11
  )
18
- from prefect.logging.loggers import get_logger, get_run_logger
12
+ from prefect.concurrency._leases import maintain_concurrency_lease
19
13
  from prefect.utilities.asyncutils import run_coro_as_sync
20
14
 
21
15
  from ._asyncio import (
22
16
  aacquire_concurrency_slots,
23
17
  aacquire_concurrency_slots_with_lease,
24
- amaintain_concurrency_lease,
25
18
  arelease_concurrency_slots_with_lease,
26
19
  )
27
20
  from ._events import (
@@ -126,42 +119,14 @@ def concurrency(
126
119
  acquisition_response.limits, occupy
127
120
  )
128
121
 
129
- # Start a loop to renew the lease on the global event loop to avoid blocking the main thread
130
- global_loop = get_global_loop()
131
- lease_renewal_call = create_call(
132
- amaintain_concurrency_lease,
133
- acquisition_response.lease_id,
134
- lease_duration,
135
- )
136
- global_loop.submit(lease_renewal_call)
137
-
138
122
  try:
139
- with WatcherThreadCancelScope() as cancel_scope:
140
-
141
- def handle_lease_renewal_failure(future: concurrent.futures.Future[None]):
142
- exc = future.exception()
143
- if exc:
144
- try:
145
- # Use a run logger if available
146
- logger = get_run_logger()
147
- except Exception:
148
- logger = get_logger("concurrency")
149
- if strict:
150
- logger.error(
151
- "Concurrency lease renewal failed - slots are no longer reserved. Terminating execution to prevent over-allocation."
152
- )
153
- assert cancel_scope.cancel()
154
- else:
155
- logger.warning(
156
- "Concurrency lease renewal failed - slots are no longer reserved. Execution will continue, but concurrency limits may be exceeded."
157
- )
158
-
159
- lease_renewal_call.future.add_done_callback(handle_lease_renewal_failure)
123
+ with maintain_concurrency_lease(
124
+ acquisition_response.lease_id,
125
+ lease_duration,
126
+ raise_on_lease_renewal_failure=strict,
127
+ ):
160
128
  yield
161
129
  finally:
162
- # Cancel the lease renewal loop
163
- lease_renewal_call.cancel()
164
-
165
130
  _release_concurrency_slots_with_lease(acquisition_response.lease_id)
166
131
  emit_concurrency_release_events(
167
132
  acquisition_response.limits, occupy, emitted_events
@@ -3,7 +3,7 @@ Async and thread safe models for passing runtime context data.
3
3
 
4
4
  These contexts should never be directly mutated by the user.
5
5
 
6
- For more user-accessible information about the current run, see [`prefect.runtime`](../runtime/flow_run).
6
+ For more user-accessible information about the current run, see [`prefect.runtime`](https://docs.prefect.io/v3/api-ref/python/prefect-runtime-flow_run).
7
7
  """
8
8
 
9
9
  import asyncio
@@ -2,7 +2,7 @@
2
2
  Core primitives for managing Prefect deployments via `prefect deploy`, providing a minimally opinionated
3
3
  build system for managing flows and deployments.
4
4
 
5
- To get started, follow along with [the deloyments tutorial](/tutorials/deployments/).
5
+ To get started, follow along with [the deployments tutorial](https://docs.prefect.io/v3/how-to-guides/deployments/create-deployments).
6
6
  """
7
7
 
8
8
  from __future__ import annotations
@@ -5,16 +5,17 @@ Deployment steps are YAML representations of Python functions along with their i
5
5
 
6
6
  Whenever a step is run, the following actions are taken:
7
7
 
8
- - The step's inputs and block / variable references are resolved (see [the `prefect deploy` documentation](/guides/prefect-deploy/#templating-options) for more details)
8
+ - The step's inputs and block / variable references are resolved (see [the `prefect deploy` documentation](https://docs.prefect.io/v3/how-to-guides/deployments/prefect-yaml#templating-options) for more details)
9
9
  - The step's function is imported; if it cannot be found, the `requires` keyword is used to install the necessary packages
10
10
  - The step's function is called with the resolved inputs
11
11
  - The step's output is returned and used to resolve inputs for subsequent steps
12
12
  """
13
13
 
14
+ from __future__ import annotations
15
+
14
16
  import os
15
17
  import re
16
18
  import subprocess
17
- import sys
18
19
  import warnings
19
20
  from copy import deepcopy
20
21
  from importlib import import_module
@@ -22,6 +23,7 @@ from typing import Any, Dict, List, Optional, Tuple, Union
22
23
 
23
24
  from prefect._internal.compatibility.deprecated import PrefectDeprecationWarning
24
25
  from prefect._internal.concurrency.api import Call, from_async
26
+ from prefect._internal.installation import install_packages
25
27
  from prefect._internal.integrations import KNOWN_EXTRAS_FOR_PACKAGES
26
28
  from prefect.logging.loggers import get_logger
27
29
  from prefect.settings import PREFECT_DEBUG_MODE
@@ -90,7 +92,8 @@ def _get_function_for_step(
90
92
  for package in packages
91
93
  if package
92
94
  ]
93
- subprocess.check_call([sys.executable, "-m", "pip", "install", *packages])
95
+ install_packages(packages, stream_output=True)
96
+
94
97
  except subprocess.CalledProcessError:
95
98
  get_logger("deployments.steps.core").warning(
96
99
  "Unable to install required packages for %s", fully_qualified_name
@@ -157,7 +157,7 @@ def git_clone(
157
157
  repository: https://github.com/org/repo.git
158
158
  access_token: "{{ prefect.blocks.secret.github-access-token }}" # Requires creation of a Secret block
159
159
  ```
160
- Note that you will need to [create a Secret block](/concepts/blocks/#using-existing-block-types) to store the
160
+ Note that you will need to [create a Secret block](https://docs.prefect.io/v3/concepts/blocks/#pre-registered-blocks) to store the
161
161
  value of your git credentials. You can also store a username/password combo or token prefix (e.g. `x-token-auth`)
162
162
  in your secret block. Refer to your git providers documentation for the correct authentication schema.
163
163
 
@@ -6,7 +6,13 @@ import multiprocessing
6
6
  import multiprocessing.context
7
7
  import os
8
8
  import time
9
- from contextlib import ExitStack, asynccontextmanager, contextmanager, nullcontext
9
+ from contextlib import (
10
+ AsyncExitStack,
11
+ ExitStack,
12
+ asynccontextmanager,
13
+ contextmanager,
14
+ nullcontext,
15
+ )
10
16
  from dataclasses import dataclass, field
11
17
  from functools import wraps
12
18
  from typing import (
@@ -35,7 +41,11 @@ from prefect.client.orchestration import PrefectClient, SyncPrefectClient, get_c
35
41
  from prefect.client.schemas import FlowRun, TaskRun
36
42
  from prefect.client.schemas.filters import FlowRunFilter
37
43
  from prefect.client.schemas.sorting import FlowRunSort
44
+ from prefect.concurrency.asyncio import (
45
+ amaintain_concurrency_lease,
46
+ )
38
47
  from prefect.concurrency.context import ConcurrencyContext
48
+ from prefect.concurrency.sync import maintain_concurrency_lease
39
49
  from prefect.concurrency.v1.context import ConcurrencyContext as ConcurrencyContextV1
40
50
  from prefect.context import (
41
51
  AsyncClientContext,
@@ -618,6 +628,13 @@ class FlowRunEngine(BaseFlowRunEngine[P, R]):
618
628
  )
619
629
  stack.enter_context(ConcurrencyContextV1())
620
630
  stack.enter_context(ConcurrencyContext())
631
+ if lease_id := self.state.state_details.deployment_concurrency_lease_id:
632
+ stack.enter_context(
633
+ maintain_concurrency_lease(
634
+ lease_id,
635
+ 300,
636
+ )
637
+ )
621
638
 
622
639
  # set the logger to the flow run logger
623
640
 
@@ -1157,7 +1174,7 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1157
1174
  self.flow_run = await client.read_flow_run(self.flow_run.id)
1158
1175
  log_prints = should_log_prints(self.flow)
1159
1176
 
1160
- with ExitStack() as stack:
1177
+ async with AsyncExitStack() as stack:
1161
1178
  # TODO: Explore closing task runner before completing the flow to
1162
1179
  # wait for futures to complete
1163
1180
  stack.enter_context(capture_sigterm())
@@ -1182,6 +1199,13 @@ class AsyncFlowRunEngine(BaseFlowRunEngine[P, R]):
1182
1199
  )
1183
1200
  stack.enter_context(ConcurrencyContextV1())
1184
1201
  stack.enter_context(ConcurrencyContext())
1202
+ if lease_id := self.state.state_details.deployment_concurrency_lease_id:
1203
+ await stack.enter_async_context(
1204
+ amaintain_concurrency_lease(
1205
+ lease_id,
1206
+ 300,
1207
+ )
1208
+ )
1185
1209
 
1186
1210
  # set the logger to the flow run logger
1187
1211
  self.logger: "logging.Logger" = flow_run_logger(
@@ -1,6 +1,4 @@
1
1
  import importlib
2
- import shlex
3
- import sys
4
2
  from copy import deepcopy
5
3
  from types import ModuleType
6
4
  from typing import TYPE_CHECKING, Any, Dict, Optional
@@ -10,6 +8,7 @@ from rich.console import Console
10
8
  from rich.progress import Progress, SpinnerColumn, TextColumn
11
9
  from rich.prompt import Confirm
12
10
 
11
+ from prefect._internal.installation import ainstall_packages
13
12
  from prefect.client.schemas.actions import BlockDocumentCreate
14
13
  from prefect.client.schemas.objects import BlockDocument
15
14
  from prefect.client.utilities import inject_client
@@ -66,9 +65,7 @@ class CoiledPushProvisioner:
66
65
  task = progress.add_task("coiled install")
67
66
  progress.start()
68
67
  global coiled
69
- await run_process(
70
- [shlex.quote(sys.executable), "-m", "pip", "install", "coiled"]
71
- )
68
+ await ainstall_packages(["coiled"])
72
69
  coiled = importlib.import_module("coiled")
73
70
  progress.advance(task)
74
71
 
@@ -6,8 +6,6 @@ import contextvars
6
6
  import importlib
7
7
  import ipaddress
8
8
  import json
9
- import shlex
10
- import sys
11
9
  from copy import deepcopy
12
10
  from functools import partial
13
11
  from textwrap import dedent
@@ -23,6 +21,7 @@ from rich.progress import Progress, SpinnerColumn, TextColumn
23
21
  from rich.prompt import Confirm
24
22
  from rich.syntax import Syntax
25
23
 
24
+ from prefect._internal.installation import ainstall_packages
26
25
  from prefect.cli._prompts import prompt
27
26
  from prefect.client.schemas.actions import BlockDocumentCreate
28
27
  from prefect.client.utilities import inject_client
@@ -1121,9 +1120,7 @@ class ElasticContainerServicePushProvisioner:
1121
1120
 
1122
1121
  async def _prompt_boto3_installation(self):
1123
1122
  global boto3
1124
- await run_process(
1125
- [shlex.quote(sys.executable), "-m", "pip", "install", "boto3"]
1126
- )
1123
+ await ainstall_packages(["boto3"])
1127
1124
  boto3 = importlib.import_module("boto3")
1128
1125
 
1129
1126
  @staticmethod
@@ -10,6 +10,7 @@ from rich.console import Console
10
10
  from rich.progress import Progress, SpinnerColumn, TextColumn
11
11
  from rich.prompt import Confirm
12
12
 
13
+ from prefect._internal.installation import ainstall_packages
13
14
  from prefect.client.schemas.actions import BlockDocumentCreate
14
15
  from prefect.client.schemas.objects import BlockDocument
15
16
  from prefect.client.utilities import inject_client
@@ -66,9 +67,7 @@ class ModalPushProvisioner:
66
67
  task = progress.add_task("modal install")
67
68
  progress.start()
68
69
  global modal
69
- await run_process(
70
- [shlex.quote(sys.executable), "-m", "pip", "install", "modal"]
71
- )
70
+ await ainstall_packages(["modal"])
72
71
  modal = importlib.import_module("modal")
73
72
  progress.advance(task)
74
73
 
@@ -33,6 +33,7 @@ class MemoryLockManager(LockManager):
33
33
  """
34
34
 
35
35
  _instance = None
36
+ _initialized = False
36
37
 
37
38
  def __new__(cls, *args: Any, **kwargs: Any) -> Self:
38
39
  if cls._instance is None:
@@ -40,8 +41,11 @@ class MemoryLockManager(LockManager):
40
41
  return cls._instance
41
42
 
42
43
  def __init__(self):
44
+ if self.__class__._initialized:
45
+ return
43
46
  self._locks_dict_lock = threading.Lock()
44
47
  self._locks: dict[str, _LockInfo] = {}
48
+ self.__class__._initialized = True
45
49
 
46
50
  def _expire_lock(self, key: str):
47
51
  """