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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/PKG-INFO +1 -1
  2. prefect_client-3.4.1.dev5/src/prefect/_build_info.py +5 -0
  3. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/bundles/__init__.py +1 -1
  4. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/validators.py +0 -98
  5. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/actions.py +13 -35
  6. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/objects.py +14 -15
  7. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/clients.py +4 -4
  8. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/flows.py +79 -28
  9. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/runner.py +24 -16
  10. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/types/__init__.py +23 -35
  11. prefect_client-3.4.1.dev5/src/prefect/types/names.py +139 -0
  12. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/dockerutils.py +18 -8
  13. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/importtools.py +12 -4
  14. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/base.py +32 -10
  15. prefect_client-3.4.1.dev3/src/prefect/_build_info.py +0 -5
  16. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/.gitignore +0 -0
  17. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/LICENSE +0 -0
  18. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/README.md +0 -0
  19. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/pyproject.toml +0 -0
  20. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/.prefectignore +0 -0
  21. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/__init__.py +0 -0
  22. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/__main__.py +0 -0
  23. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/__init__.py +0 -0
  24. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/bundles/execute.py +0 -0
  25. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/lineage.py +0 -0
  26. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/sla/__init__.py +0 -0
  27. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/sla/client.py +0 -0
  28. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_experimental/sla/objects.py +0 -0
  29. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/__init__.py +0 -0
  30. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/_logging.py +0 -0
  31. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/compatibility/__init__.py +0 -0
  32. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  33. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  34. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/compatibility/migration.py +0 -0
  35. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/__init__.py +0 -0
  36. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/api.py +0 -0
  37. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/calls.py +0 -0
  38. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  39. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  40. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/inspection.py +0 -0
  41. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/primitives.py +0 -0
  42. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/services.py +0 -0
  43. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/threads.py +0 -0
  44. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/concurrency/waiters.py +0 -0
  45. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/integrations.py +0 -0
  46. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pydantic/__init__.py +0 -0
  47. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pydantic/schemas.py +0 -0
  48. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  49. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  50. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
  51. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/pytz.py +0 -0
  52. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/retries.py +0 -0
  53. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/__init__.py +0 -0
  54. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/bases.py +0 -0
  55. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/fields.py +0 -0
  56. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_internal/schemas/serializers.py +0 -0
  57. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_result_records.py +0 -0
  58. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_vendor/croniter/__init__.py +0 -0
  59. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_vendor/croniter/croniter.py +0 -0
  60. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_versioning.py +0 -0
  61. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/_waiters.py +0 -0
  62. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/agent.py +0 -0
  63. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/artifacts.py +0 -0
  64. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/automations.py +0 -0
  65. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/__init__.py +0 -0
  66. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/abstract.py +0 -0
  67. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/core.py +0 -0
  68. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/fields.py +0 -0
  69. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/notifications.py +0 -0
  70. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/redis.py +0 -0
  71. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/system.py +0 -0
  72. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/blocks/webhook.py +0 -0
  73. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/cache_policies.py +0 -0
  74. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/__init__.py +0 -0
  75. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/base.py +0 -0
  76. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/cloud.py +0 -0
  77. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/collections.py +0 -0
  78. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/constants.py +0 -0
  79. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/__init__.py +0 -0
  80. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  81. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  82. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  83. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_automations/client.py +0 -0
  84. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  85. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  86. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  87. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  88. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  89. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  90. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  91. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  92. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  93. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  94. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  95. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  96. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  97. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_flows/client.py +0 -0
  98. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  99. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_logs/client.py +0 -0
  100. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  101. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_variables/client.py +0 -0
  102. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  103. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  104. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/base.py +0 -0
  105. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/orchestration/routes.py +0 -0
  106. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/__init__.py +0 -0
  107. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/filters.py +0 -0
  108. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/responses.py +0 -0
  109. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/schedules.py +0 -0
  110. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/schemas/sorting.py +0 -0
  111. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/subscriptions.py +0 -0
  112. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/types/__init__.py +0 -0
  113. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  114. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/client/utilities.py +0 -0
  115. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/__init__.py +0 -0
  116. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/_asyncio.py +0 -0
  117. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/_events.py +0 -0
  118. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/asyncio.py +0 -0
  119. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/context.py +0 -0
  120. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/services.py +0 -0
  121. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/sync.py +0 -0
  122. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/__init__.py +0 -0
  123. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  124. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/_events.py +0 -0
  125. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/asyncio.py +0 -0
  126. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/context.py +0 -0
  127. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/services.py +0 -0
  128. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/concurrency/v1/sync.py +0 -0
  129. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/context.py +0 -0
  130. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/__init__.py +0 -0
  131. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/base.py +0 -0
  132. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/deployments.py +0 -0
  133. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/flow_runs.py +0 -0
  134. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/runner.py +0 -0
  135. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/schedules.py +0 -0
  136. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/steps/__init__.py +0 -0
  137. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/steps/core.py +0 -0
  138. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/steps/pull.py +0 -0
  139. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/deployments/steps/utility.py +0 -0
  140. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/docker/__init__.py +0 -0
  141. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/docker/docker_image.py +0 -0
  142. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/engine.py +0 -0
  143. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/__init__.py +0 -0
  144. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/actions.py +0 -0
  145. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/cli/__init__.py +0 -0
  146. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/cli/automations.py +0 -0
  147. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/filters.py +0 -0
  148. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/related.py +0 -0
  149. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/schemas/__init__.py +0 -0
  150. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/schemas/automations.py +0 -0
  151. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  152. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/schemas/events.py +0 -0
  153. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/schemas/labelling.py +0 -0
  154. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/utilities.py +0 -0
  155. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/events/worker.py +0 -0
  156. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/exceptions.py +0 -0
  157. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/filesystems.py +0 -0
  158. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/flow_engine.py +0 -0
  159. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/flow_runs.py +0 -0
  160. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/futures.py +0 -0
  161. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/__init__.py +0 -0
  162. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/base.py +0 -0
  163. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  164. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  165. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  166. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  167. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  168. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  169. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/input/__init__.py +0 -0
  170. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/input/actions.py +0 -0
  171. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/input/run_input.py +0 -0
  172. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/locking/__init__.py +0 -0
  173. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/locking/filesystem.py +0 -0
  174. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/locking/memory.py +0 -0
  175. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/locking/protocol.py +0 -0
  176. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/__init__.py +0 -0
  177. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/configuration.py +0 -0
  178. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/filters.py +0 -0
  179. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/formatters.py +0 -0
  180. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/handlers.py +0 -0
  181. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/highlighters.py +0 -0
  182. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/loggers.py +0 -0
  183. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/logging/logging.yml +0 -0
  184. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/main.py +0 -0
  185. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/plugins.py +0 -0
  186. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/py.typed +0 -0
  187. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/results.py +0 -0
  188. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/__init__.py +0 -0
  189. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/_observers.py +0 -0
  190. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/server.py +0 -0
  191. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/storage.py +0 -0
  192. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/submit.py +0 -0
  193. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runner/utils.py +0 -0
  194. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runtime/__init__.py +0 -0
  195. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runtime/deployment.py +0 -0
  196. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runtime/flow_run.py +0 -0
  197. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/runtime/task_run.py +0 -0
  198. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/schedules.py +0 -0
  199. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/serializers.py +0 -0
  200. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/__init__.py +0 -0
  201. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/admin.py +0 -0
  202. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/artifacts.py +0 -0
  203. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/automations.py +0 -0
  204. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/block_capabilities.py +0 -0
  205. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/block_documents.py +0 -0
  206. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/block_schemas.py +0 -0
  207. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/block_types.py +0 -0
  208. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/clients.py +0 -0
  209. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/collections.py +0 -0
  210. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  211. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/concurrency_limits.py +0 -0
  212. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  213. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/csrf_token.py +0 -0
  214. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/dependencies.py +0 -0
  215. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/deployments.py +0 -0
  216. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/events.py +0 -0
  217. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/flow_run_states.py +0 -0
  218. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/flow_runs.py +0 -0
  219. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/flows.py +0 -0
  220. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/logs.py +0 -0
  221. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/middleware.py +0 -0
  222. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/root.py +0 -0
  223. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/run_history.py +0 -0
  224. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/saved_searches.py +0 -0
  225. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/server.py +0 -0
  226. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  227. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/task_run_states.py +0 -0
  228. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/task_runs.py +0 -0
  229. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/task_workers.py +0 -0
  230. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/templates.py +0 -0
  231. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/ui/__init__.py +0 -0
  232. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/ui/flow_runs.py +0 -0
  233. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/ui/flows.py +0 -0
  234. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/ui/schemas.py +0 -0
  235. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/ui/task_runs.py +0 -0
  236. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/validation.py +0 -0
  237. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/variables.py +0 -0
  238. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/work_queues.py +0 -0
  239. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/server/api/workers.py +0 -0
  240. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/__init__.py +0 -0
  241. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/base.py +0 -0
  242. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/constants.py +0 -0
  243. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/context.py +0 -0
  244. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/legacy.py +0 -0
  245. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/__init__.py +0 -0
  246. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/api.py +0 -0
  247. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/cli.py +0 -0
  248. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/client.py +0 -0
  249. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/cloud.py +0 -0
  250. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/deployments.py +0 -0
  251. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/experiments.py +0 -0
  252. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/flows.py +0 -0
  253. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/internal.py +0 -0
  254. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/logging.py +0 -0
  255. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/results.py +0 -0
  256. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/root.py +0 -0
  257. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/runner.py +0 -0
  258. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/__init__.py +0 -0
  259. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/api.py +0 -0
  260. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/database.py +0 -0
  261. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/deployments.py +0 -0
  262. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/ephemeral.py +0 -0
  263. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/events.py +0 -0
  264. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  265. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/root.py +0 -0
  266. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/services.py +0 -0
  267. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/tasks.py +0 -0
  268. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/server/ui.py +0 -0
  269. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/tasks.py +0 -0
  270. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/testing.py +0 -0
  271. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/models/worker.py +0 -0
  272. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/profiles.py +0 -0
  273. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/profiles.toml +0 -0
  274. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/settings/sources.py +0 -0
  275. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/states.py +0 -0
  276. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/task_engine.py +0 -0
  277. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/task_runners.py +0 -0
  278. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/task_runs.py +0 -0
  279. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/task_worker.py +0 -0
  280. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/tasks.py +0 -0
  281. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/__init__.py +0 -0
  282. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/bootstrap.py +0 -0
  283. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/instrumentation.py +0 -0
  284. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/logging.py +0 -0
  285. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/processors.py +0 -0
  286. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/run_telemetry.py +0 -0
  287. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/telemetry/services.py +0 -0
  288. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/transactions.py +0 -0
  289. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/types/_datetime.py +0 -0
  290. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/types/entrypoint.py +0 -0
  291. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/__init__.py +0 -0
  292. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/_ast.py +0 -0
  293. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/_deprecated.py +0 -0
  294. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/_engine.py +0 -0
  295. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/_git.py +0 -0
  296. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/annotations.py +0 -0
  297. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/asyncutils.py +0 -0
  298. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/callables.py +0 -0
  299. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/collections.py +0 -0
  300. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/compat.py +0 -0
  301. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/context.py +0 -0
  302. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/dispatch.py +0 -0
  303. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/engine.py +0 -0
  304. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/filesystem.py +0 -0
  305. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/generics.py +0 -0
  306. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/hashing.py +0 -0
  307. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/math.py +0 -0
  308. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/names.py +0 -0
  309. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/processutils.py +0 -0
  310. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/pydantic.py +0 -0
  311. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/render_swagger.py +0 -0
  312. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  313. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  314. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/schema_tools/validation.py +0 -0
  315. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/services.py +0 -0
  316. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/slugify.py +0 -0
  317. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/templating.py +0 -0
  318. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/text.py +0 -0
  319. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/timeout.py +0 -0
  320. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/urls.py +0 -0
  321. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/utilities/visualization.py +0 -0
  322. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/variables.py +0 -0
  323. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/__init__.py +0 -0
  324. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/block.py +0 -0
  325. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/cloud.py +0 -0
  326. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/process.py +0 -0
  327. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/server.py +0 -0
  328. {prefect_client-3.4.1.dev3 → prefect_client-3.4.1.dev5}/src/prefect/workers/utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: prefect-client
3
- Version: 3.4.1.dev3
3
+ Version: 3.4.1.dev5
4
4
  Summary: Workflow orchestration and management.
5
5
  Project-URL: Changelog, https://github.com/PrefectHQ/prefect/releases
6
6
  Project-URL: Documentation, https://docs.prefect.io
@@ -0,0 +1,5 @@
1
+ # Generated by versioningit
2
+ __version__ = "3.4.1.dev5"
3
+ __build_date__ = "2025-05-08 08:08:59.726919+00:00"
4
+ __git_commit__ = "7e7a18743f5fd0bd4e513ca22c5408e7176390b8"
5
+ __dirty__ = False
@@ -30,7 +30,7 @@ def _get_uv_path() -> str:
30
30
  import uv
31
31
 
32
32
  uv_path = uv.find_uv_bin()
33
- except (ImportError, ModuleNotFoundError):
33
+ except (ImportError, ModuleNotFoundError, FileNotFoundError):
34
34
  uv_path = "uv"
35
35
 
36
36
  return uv_path
@@ -10,7 +10,6 @@ from __future__ import annotations
10
10
 
11
11
  import datetime
12
12
  import os
13
- import re
14
13
  import urllib.parse
15
14
  import warnings
16
15
  from collections.abc import Iterable, Mapping, MutableMapping
@@ -36,59 +35,6 @@ M = TypeVar("M", bound=Mapping[str, Any])
36
35
  MM = TypeVar("MM", bound=MutableMapping[str, Any])
37
36
 
38
37
 
39
- LOWERCASE_LETTERS_NUMBERS_AND_DASHES_ONLY_REGEX = "^[a-z0-9-]*$"
40
- LOWERCASE_LETTERS_NUMBERS_AND_UNDERSCORES_REGEX = "^[a-z0-9_]*$"
41
-
42
-
43
- @overload
44
- def raise_on_name_alphanumeric_dashes_only(
45
- value: str, field_name: str = ...
46
- ) -> str: ...
47
-
48
-
49
- @overload
50
- def raise_on_name_alphanumeric_dashes_only(
51
- value: None, field_name: str = ...
52
- ) -> None: ...
53
-
54
-
55
- def raise_on_name_alphanumeric_dashes_only(
56
- value: Optional[str], field_name: str = "value"
57
- ) -> Optional[str]:
58
- if value is not None and not bool(
59
- re.match(LOWERCASE_LETTERS_NUMBERS_AND_DASHES_ONLY_REGEX, value)
60
- ):
61
- raise ValueError(
62
- f"{field_name} must only contain lowercase letters, numbers, and dashes."
63
- )
64
- return value
65
-
66
-
67
- @overload
68
- def raise_on_name_alphanumeric_underscores_only(
69
- value: str, field_name: str = ...
70
- ) -> str: ...
71
-
72
-
73
- @overload
74
- def raise_on_name_alphanumeric_underscores_only(
75
- value: None, field_name: str = ...
76
- ) -> None: ...
77
-
78
-
79
- def raise_on_name_alphanumeric_underscores_only(
80
- value: Optional[str], field_name: str = "value"
81
- ) -> Optional[str]:
82
- if value is not None and not re.match(
83
- LOWERCASE_LETTERS_NUMBERS_AND_UNDERSCORES_REGEX, value
84
- ):
85
- raise ValueError(
86
- f"{field_name} must only contain lowercase letters, numbers, and"
87
- " underscores."
88
- )
89
- return value
90
-
91
-
92
38
  def validate_values_conform_to_schema(
93
39
  values: Optional[Mapping[str, Any]],
94
40
  schema: Optional[Mapping[str, Any]],
@@ -610,47 +556,3 @@ def validate_working_dir(v: Optional[Path | str]) -> Optional[Path]:
610
556
  if isinstance(v, str):
611
557
  return relative_path_to_current_platform(v)
612
558
  return v
613
-
614
-
615
- ### UNCATEGORIZED VALIDATORS ###
616
-
617
- # the above categories seem to be getting a bit unwieldy, so this is a temporary
618
- # catch-all for validators until we organize these into files
619
-
620
-
621
- @overload
622
- def validate_block_document_name(value: str) -> str: ...
623
-
624
-
625
- @overload
626
- def validate_block_document_name(value: None) -> None: ...
627
-
628
-
629
- def validate_block_document_name(value: Optional[str]) -> Optional[str]:
630
- if value is not None:
631
- raise_on_name_alphanumeric_dashes_only(value, field_name="Block document name")
632
- return value
633
-
634
-
635
- def validate_artifact_key(value: str) -> str:
636
- raise_on_name_alphanumeric_dashes_only(value, field_name="Artifact key")
637
- return value
638
-
639
-
640
- @overload
641
- def validate_variable_name(value: str) -> str: ...
642
-
643
-
644
- @overload
645
- def validate_variable_name(value: None) -> None: ...
646
-
647
-
648
- def validate_variable_name(value: Optional[str]) -> Optional[str]:
649
- if value is not None:
650
- raise_on_name_alphanumeric_underscores_only(value, field_name="Variable name")
651
- return value
652
-
653
-
654
- def validate_block_type_slug(value: str):
655
- raise_on_name_alphanumeric_dashes_only(value, field_name="Block type slug")
656
- return value
@@ -12,12 +12,8 @@ from prefect._internal.schemas.bases import ActionBaseModel
12
12
  from prefect._internal.schemas.validators import (
13
13
  convert_to_strings,
14
14
  remove_old_deployment_fields,
15
- validate_artifact_key,
16
- validate_block_document_name,
17
- validate_block_type_slug,
18
15
  validate_name_present_on_nonanonymous_blocks,
19
16
  validate_schedule_max_scheduled_runs,
20
- validate_variable_name,
21
17
  )
22
18
  from prefect.client.schemas.objects import (
23
19
  StateDetails,
@@ -34,7 +30,6 @@ from prefect.client.schemas.schedules import (
34
30
  from prefect.schedules import Schedule
35
31
  from prefect.settings import PREFECT_DEPLOYMENT_SCHEDULE_MAX_SCHEDULED_RUNS
36
32
  from prefect.types import (
37
- MAX_VARIABLE_NAME_LENGTH,
38
33
  DateTime,
39
34
  KeyValueLabelsField,
40
35
  Name,
@@ -45,6 +40,12 @@ from prefect.types import (
45
40
  PositiveInteger,
46
41
  StrictVariableValue,
47
42
  )
43
+ from prefect.types.names import (
44
+ ArtifactKey,
45
+ BlockDocumentName,
46
+ BlockTypeSlug,
47
+ VariableName,
48
+ )
48
49
  from prefect.utilities.collections import visit_collection
49
50
  from prefect.utilities.pydantic import get_class_fields_only
50
51
 
@@ -216,7 +217,7 @@ class DeploymentCreate(ActionBaseModel):
216
217
  flow_id: UUID = Field(..., description="The ID of the flow to deploy.")
217
218
  paused: Optional[bool] = Field(default=None)
218
219
  schedules: list[DeploymentScheduleCreate] = Field(
219
- default_factory=list,
220
+ default_factory=lambda: [],
220
221
  description="A list of schedules for the deployment.",
221
222
  )
222
223
  concurrency_limit: Optional[int] = Field(
@@ -537,7 +538,7 @@ class SavedSearchCreate(ActionBaseModel):
537
538
 
538
539
  name: str = Field(default=..., description="The name of the saved search.")
539
540
  filters: list[objects.SavedSearchFilter] = Field(
540
- default_factory=list, description="The filter set for the saved search."
541
+ default_factory=lambda: [], description="The filter set for the saved search."
541
542
  )
542
543
 
543
544
 
@@ -585,7 +586,7 @@ class BlockTypeCreate(ActionBaseModel):
585
586
  """Data used by the Prefect REST API to create a block type."""
586
587
 
587
588
  name: str = Field(default=..., description="A block type's name")
588
- slug: str = Field(default=..., description="A block type's slug")
589
+ slug: BlockTypeSlug = Field(default=..., description="A block type's slug")
589
590
  logo_url: Optional[objects.HttpUrl] = Field(
590
591
  default=None, description="Web URL for the block type's logo"
591
592
  )
@@ -601,9 +602,6 @@ class BlockTypeCreate(ActionBaseModel):
601
602
  description="A code snippet demonstrating use of the corresponding block",
602
603
  )
603
604
 
604
- # validators
605
- _validate_slug_format = field_validator("slug")(validate_block_type_slug)
606
-
607
605
 
608
606
  class BlockTypeUpdate(ActionBaseModel):
609
607
  """Data used by the Prefect REST API to update a block type."""
@@ -638,7 +636,7 @@ class BlockSchemaCreate(ActionBaseModel):
638
636
  class BlockDocumentCreate(ActionBaseModel):
639
637
  """Data used by the Prefect REST API to create a block document."""
640
638
 
641
- name: Optional[Name] = Field(
639
+ name: Optional[BlockDocumentName] = Field(
642
640
  default=None, description="The name of the block document"
643
641
  )
644
642
  data: dict[str, Any] = Field(
@@ -658,8 +656,6 @@ class BlockDocumentCreate(ActionBaseModel):
658
656
  ),
659
657
  )
660
658
 
661
- _validate_name_format = field_validator("name")(validate_block_document_name)
662
-
663
659
  @model_validator(mode="before")
664
660
  def validate_name_is_present_if_not_anonymous(
665
661
  cls, values: dict[str, Any]
@@ -814,7 +810,7 @@ class WorkQueueUpdate(ActionBaseModel):
814
810
  class ArtifactCreate(ActionBaseModel):
815
811
  """Data used by the Prefect REST API to create an artifact."""
816
812
 
817
- key: Optional[str] = Field(default=None)
813
+ key: Optional[ArtifactKey] = Field(default=None)
818
814
  type: Optional[str] = Field(default=None)
819
815
  description: Optional[str] = Field(default=None)
820
816
  data: Optional[Union[dict[str, Any], Any]] = Field(default=None)
@@ -822,8 +818,6 @@ class ArtifactCreate(ActionBaseModel):
822
818
  flow_run_id: Optional[UUID] = Field(default=None)
823
819
  task_run_id: Optional[UUID] = Field(default=None)
824
820
 
825
- _validate_artifact_format = field_validator("key")(validate_artifact_key)
826
-
827
821
 
828
822
  class ArtifactUpdate(ActionBaseModel):
829
823
  """Data used by the Prefect REST API to update an artifact."""
@@ -836,12 +830,7 @@ class ArtifactUpdate(ActionBaseModel):
836
830
  class VariableCreate(ActionBaseModel):
837
831
  """Data used by the Prefect REST API to create a Variable."""
838
832
 
839
- name: str = Field(
840
- default=...,
841
- description="The name of the variable",
842
- examples=["my_variable"],
843
- max_length=MAX_VARIABLE_NAME_LENGTH,
844
- )
833
+ name: VariableName = Field(default=...)
845
834
  value: StrictVariableValue = Field(
846
835
  default=...,
847
836
  description="The value of the variable",
@@ -849,19 +838,11 @@ class VariableCreate(ActionBaseModel):
849
838
  )
850
839
  tags: Optional[list[str]] = Field(default=None)
851
840
 
852
- # validators
853
- _validate_name_format = field_validator("name")(validate_variable_name)
854
-
855
841
 
856
842
  class VariableUpdate(ActionBaseModel):
857
843
  """Data used by the Prefect REST API to update a Variable."""
858
844
 
859
- name: Optional[str] = Field(
860
- default=None,
861
- description="The name of the variable",
862
- examples=["my_variable"],
863
- max_length=MAX_VARIABLE_NAME_LENGTH,
864
- )
845
+ name: Optional[VariableName] = Field(default=None)
865
846
  value: StrictVariableValue = Field(
866
847
  default=None,
867
848
  description="The value of the variable",
@@ -869,9 +850,6 @@ class VariableUpdate(ActionBaseModel):
869
850
  )
870
851
  tags: Optional[list[str]] = Field(default=None)
871
852
 
872
- # validators
873
- _validate_name_format = field_validator("name")(validate_variable_name)
874
-
875
853
 
876
854
  class GlobalConcurrencyLimitCreate(ActionBaseModel):
877
855
  """Data used by the Prefect REST API to create a global concurrency limit."""
@@ -19,6 +19,7 @@ from uuid import UUID, uuid4
19
19
 
20
20
  import orjson
21
21
  from pydantic import (
22
+ AfterValidator,
22
23
  ConfigDict,
23
24
  Discriminator,
24
25
  Field,
@@ -40,9 +41,7 @@ from prefect._internal.schemas.fields import CreatedBy, UpdatedBy
40
41
  from prefect._internal.schemas.validators import (
41
42
  get_or_create_run_name,
42
43
  list_length_50_or_less,
43
- raise_on_name_alphanumeric_dashes_only,
44
44
  set_run_policy_deprecated_fields,
45
- validate_block_document_name,
46
45
  validate_default_queue_id_not_none,
47
46
  validate_max_metadata_length,
48
47
  validate_name_present_on_nonanonymous_blocks,
@@ -61,6 +60,10 @@ from prefect.types import (
61
60
  StrictVariableValue,
62
61
  )
63
62
  from prefect.types._datetime import DateTime, now
63
+ from prefect.types.names import (
64
+ BlockDocumentName,
65
+ raise_on_name_alphanumeric_dashes_only,
66
+ )
64
67
  from prefect.utilities.asyncutils import run_coro_as_sync
65
68
  from prefect.utilities.collections import AutoEnum, visit_collection
66
69
  from prefect.utilities.names import generate_slug
@@ -1000,7 +1003,7 @@ class BlockSchema(ObjectBaseModel):
1000
1003
  class BlockDocument(ObjectBaseModel):
1001
1004
  """An ORM representation of a block document."""
1002
1005
 
1003
- name: Optional[Name] = Field(
1006
+ name: Optional[BlockDocumentName] = Field(
1004
1007
  default=None,
1005
1008
  description=(
1006
1009
  "The block document's name. Not required for anonymous block documents."
@@ -1029,8 +1032,6 @@ class BlockDocument(ObjectBaseModel):
1029
1032
  ),
1030
1033
  )
1031
1034
 
1032
- _validate_name_format = field_validator("name")(validate_block_document_name)
1033
-
1034
1035
  @model_validator(mode="before")
1035
1036
  @classmethod
1036
1037
  def validate_name_is_present_if_not_anonymous(
@@ -1133,7 +1134,8 @@ class Deployment(ObjectBaseModel):
1133
1134
  default=None, description="The concurrency limit for the deployment."
1134
1135
  )
1135
1136
  schedules: list[DeploymentSchedule] = Field(
1136
- default_factory=list, description="A list of schedules for the deployment."
1137
+ default_factory=lambda: [],
1138
+ description="A list of schedules for the deployment.",
1137
1139
  )
1138
1140
  job_variables: dict[str, Any] = Field(
1139
1141
  default_factory=dict,
@@ -1219,7 +1221,7 @@ class ConcurrencyLimit(ObjectBaseModel):
1219
1221
  )
1220
1222
  concurrency_limit: int = Field(default=..., description="The concurrency limit.")
1221
1223
  active_slots: list[UUID] = Field(
1222
- default_factory=list,
1224
+ default_factory=lambda: [],
1223
1225
  description="A list of active run ids using a concurrency slot",
1224
1226
  )
1225
1227
 
@@ -1300,7 +1302,8 @@ class SavedSearch(ObjectBaseModel):
1300
1302
 
1301
1303
  name: str = Field(default=..., description="The name of the saved search.")
1302
1304
  filters: list[SavedSearchFilter] = Field(
1303
- default_factory=list, description="The filter set for the saved search."
1305
+ default_factory=lambda: [],
1306
+ description="The filter set for the saved search.",
1304
1307
  )
1305
1308
 
1306
1309
 
@@ -1644,7 +1647,9 @@ class Variable(ObjectBaseModel):
1644
1647
 
1645
1648
  class FlowRunInput(ObjectBaseModel):
1646
1649
  flow_run_id: UUID = Field(description="The flow run ID associated with the input.")
1647
- key: str = Field(description="The key of the input.")
1650
+ key: Annotated[str, AfterValidator(raise_on_name_alphanumeric_dashes_only)] = Field(
1651
+ description="The key of the input."
1652
+ )
1648
1653
  value: str = Field(description="The value of the input.")
1649
1654
  sender: Optional[str] = Field(default=None, description="The sender of the input.")
1650
1655
 
@@ -1658,12 +1663,6 @@ class FlowRunInput(ObjectBaseModel):
1658
1663
  """
1659
1664
  return orjson.loads(self.value)
1660
1665
 
1661
- @field_validator("key", check_fields=False)
1662
- @classmethod
1663
- def validate_name_characters(cls, v: str) -> str:
1664
- raise_on_name_alphanumeric_dashes_only(v)
1665
- return v
1666
-
1667
1666
 
1668
1667
  class GlobalConcurrencyLimit(ObjectBaseModel):
1669
1668
  """An ORM representation of a global concurrency limit"""
@@ -251,8 +251,8 @@ class EventsClient(abc.ABC):
251
251
 
252
252
  async def __aexit__(
253
253
  self,
254
- exc_type: Optional[Type[Exception]],
255
- exc_val: Optional[Exception],
254
+ exc_type: Optional[Type[BaseException]],
255
+ exc_val: Optional[BaseException],
256
256
  exc_tb: Optional[TracebackType],
257
257
  ) -> None:
258
258
  del self._in_context
@@ -360,8 +360,8 @@ class PrefectEventsClient(EventsClient):
360
360
 
361
361
  async def __aexit__(
362
362
  self,
363
- exc_type: Optional[Type[Exception]],
364
- exc_val: Optional[Exception],
363
+ exc_type: Optional[Type[BaseException]],
364
+ exc_val: Optional[BaseException],
365
365
  exc_tb: Optional[TracebackType],
366
366
  ) -> None:
367
367
  self._websocket = None
@@ -27,6 +27,7 @@ from typing import (
27
27
  Coroutine,
28
28
  Generic,
29
29
  Iterable,
30
+ List,
30
31
  NoReturn,
31
32
  Optional,
32
33
  Protocol,
@@ -2309,8 +2310,9 @@ def load_flow_from_entrypoint(
2309
2310
  Extract a flow object from a script at an entrypoint by running all of the code in the file.
2310
2311
 
2311
2312
  Args:
2312
- entrypoint: a string in the format `<path_to_script>:<flow_func_name>` or a module path
2313
- to a flow function
2313
+ entrypoint: a string in the format `<path_to_script>:<flow_func_name>`
2314
+ or a string in the format `<path_to_script>:<class_name>.<flow_method_name>`
2315
+ or a module path to a flow function
2314
2316
  use_placeholder_flow: if True, use a placeholder Flow object if the actual flow object
2315
2317
  cannot be loaded from the entrypoint (e.g. dependencies are missing)
2316
2318
 
@@ -2700,26 +2702,55 @@ def load_placeholder_flow(entrypoint: str, raises: Exception) -> Flow[P, Any]:
2700
2702
 
2701
2703
  def safe_load_flow_from_entrypoint(entrypoint: str) -> Optional[Flow[P, Any]]:
2702
2704
  """
2703
- Load a flow from an entrypoint and return None if an exception is raised.
2705
+ Safely load a Prefect flow from an entrypoint string. Returns None if loading fails.
2704
2706
 
2705
2707
  Args:
2706
- entrypoint: a string in the format `<path_to_script>:<flow_func_name>`
2707
- or a module path to a flow function
2708
+ entrypoint (str): A string identifying the flow to load. Can be in one of the following formats:
2709
+ - `<path_to_script>:<flow_func_name>`
2710
+ - `<path_to_script>:<class_name>.<flow_method_name>`
2711
+ - `<module_path>.<flow_func_name>`
2712
+
2713
+ Returns:
2714
+ Optional[Flow]: The loaded Prefect flow object, or None if loading fails due to errors
2715
+ (e.g. unresolved dependencies, syntax errors, or missing objects).
2708
2716
  """
2709
- func_def, source_code = _entrypoint_definition_and_source(entrypoint)
2710
- path = None
2711
- if ":" in entrypoint:
2712
- path = entrypoint.rsplit(":")[0]
2717
+ func_or_cls_def, source_code, parts = _entrypoint_definition_and_source(entrypoint)
2718
+
2719
+ path = entrypoint.rsplit(":", maxsplit=1)[0] if ":" in entrypoint else None
2713
2720
  namespace = safe_load_namespace(source_code, filepath=path)
2714
- if func_def.name in namespace:
2715
- return namespace[func_def.name]
2716
- else:
2717
- # If the function is not in the namespace, if may be due to missing dependencies
2718
- # for the function. We will attempt to compile each annotation and default value
2719
- # and remove them from the function definition to see if the function can be
2720
- # compiled without them.
2721
2721
 
2722
- return _sanitize_and_load_flow(func_def, namespace)
2722
+ if parts[0] not in namespace:
2723
+ # If the object is not in the namespace, it may be due to missing dependencies
2724
+ # in annotations or default values. We will attempt to sanitize them by removing
2725
+ # anything that cannot be compiled, and then recompile the function or class.
2726
+ if isinstance(func_or_cls_def, (ast.FunctionDef, ast.AsyncFunctionDef)):
2727
+ return _sanitize_and_load_flow(func_or_cls_def, namespace)
2728
+ elif (
2729
+ isinstance(func_or_cls_def, ast.ClassDef)
2730
+ and len(parts) >= 2
2731
+ and func_or_cls_def.name == parts[0]
2732
+ ):
2733
+ method_name = parts[1]
2734
+ method_def = next(
2735
+ (
2736
+ stmt
2737
+ for stmt in func_or_cls_def.body
2738
+ if isinstance(stmt, (ast.FunctionDef, ast.AsyncFunctionDef))
2739
+ and stmt.name == method_name
2740
+ ),
2741
+ None,
2742
+ )
2743
+ if method_def is not None:
2744
+ return _sanitize_and_load_flow(method_def, namespace)
2745
+ else:
2746
+ return None
2747
+
2748
+ obj = namespace.get(parts[0])
2749
+ for part in parts[1:]:
2750
+ obj = getattr(obj, part, None)
2751
+ if obj is None:
2752
+ return None
2753
+ return obj
2723
2754
 
2724
2755
 
2725
2756
  def _sanitize_and_load_flow(
@@ -2853,7 +2884,7 @@ def load_flow_arguments_from_entrypoint(
2853
2884
  or a module path to a flow function
2854
2885
  """
2855
2886
 
2856
- func_def, source_code = _entrypoint_definition_and_source(entrypoint)
2887
+ func_def, source_code, _ = _entrypoint_definition_and_source(entrypoint)
2857
2888
  path = None
2858
2889
  if ":" in entrypoint:
2859
2890
  path = entrypoint.rsplit(":")[0]
@@ -2930,26 +2961,45 @@ def is_entrypoint_async(entrypoint: str) -> bool:
2930
2961
  Returns:
2931
2962
  True if the function is asynchronous, False otherwise.
2932
2963
  """
2933
- func_def, _ = _entrypoint_definition_and_source(entrypoint)
2964
+ func_def, _, _ = _entrypoint_definition_and_source(entrypoint)
2934
2965
  return isinstance(func_def, ast.AsyncFunctionDef)
2935
2966
 
2936
2967
 
2937
2968
  def _entrypoint_definition_and_source(
2938
2969
  entrypoint: str,
2939
- ) -> Tuple[Union[ast.FunctionDef, ast.AsyncFunctionDef], str]:
2970
+ ) -> Tuple[Union[ast.FunctionDef, ast.AsyncFunctionDef, ast.ClassDef], str, List[str]]:
2971
+ """
2972
+ Resolves and parses the source definition of a given entrypoint.
2973
+
2974
+ The entrypoint can be provided in one of the following formats:
2975
+ - '<path_to_script>:<flow_func_name>'
2976
+ - '<path_to_script>:<class_name>.<flow_method_name>'
2977
+ - '<module_path.to.flow_function>'
2978
+
2979
+ Returns:
2980
+ A tuple containing:
2981
+ - The AST node (FunctionDef, AsyncFunctionDef, or ClassDef) of the base object.
2982
+ - The full source code of the file or module as a string.
2983
+ - A list of attribute access parts from the object path (e.g., ['MyFlowClass', 'run']).
2984
+
2985
+ Raises:
2986
+ ValueError: If the module or target object cannot be found.
2987
+ """
2940
2988
  if ":" in entrypoint:
2941
- # Split by the last colon once to handle Windows paths with drive letters i.e C:\path\to\file.py:do_stuff
2942
- path, func_name = entrypoint.rsplit(":", maxsplit=1)
2989
+ path, object_path = entrypoint.rsplit(":", maxsplit=1)
2943
2990
  source_code = Path(path).read_text()
2944
2991
  else:
2945
- path, func_name = entrypoint.rsplit(".", maxsplit=1)
2992
+ path, object_path = entrypoint.rsplit(".", maxsplit=1)
2946
2993
  spec = importlib.util.find_spec(path)
2947
2994
  if not spec or not spec.origin:
2948
2995
  raise ValueError(f"Could not find module {path!r}")
2949
2996
  source_code = Path(spec.origin).read_text()
2950
2997
 
2951
2998
  parsed_code = ast.parse(source_code)
2952
- func_def = next(
2999
+ parts = object_path.split(".")
3000
+ base_name = parts[0]
3001
+
3002
+ base_def = next(
2953
3003
  (
2954
3004
  node
2955
3005
  for node in ast.walk(parsed_code)
@@ -2958,14 +3008,15 @@ def _entrypoint_definition_and_source(
2958
3008
  (
2959
3009
  ast.FunctionDef,
2960
3010
  ast.AsyncFunctionDef,
3011
+ ast.ClassDef, # flow can be staticmethod/classmethod
2961
3012
  ),
2962
3013
  )
2963
- and node.name == func_name
3014
+ and node.name == base_name
2964
3015
  ),
2965
3016
  None,
2966
3017
  )
2967
3018
 
2968
- if not func_def:
2969
- raise ValueError(f"Could not find flow {func_name!r} in {path!r}")
3019
+ if not base_def:
3020
+ raise ValueError(f"Could not find object {base_name!r} in {path!r}")
2970
3021
 
2971
- return func_def, source_code
3022
+ return base_def, source_code, parts
@@ -89,9 +89,9 @@ from prefect.client.schemas.objects import (
89
89
  )
90
90
  from prefect.client.schemas.objects import Flow as APIFlow
91
91
  from prefect.events import DeploymentTriggerTypes, TriggerTypes
92
+ from prefect.events.clients import EventsClient, get_events_client
92
93
  from prefect.events.related import tags_as_related_resources
93
- from prefect.events.schemas.events import RelatedResource
94
- from prefect.events.utilities import emit_event
94
+ from prefect.events.schemas.events import Event, RelatedResource, Resource
95
95
  from prefect.exceptions import Abort, ObjectNotFound
96
96
  from prefect.flows import Flow, FlowStateHook, load_flow_from_flow_run
97
97
  from prefect.logging.loggers import PrefectLogAdapter, flow_run_logger, get_logger
@@ -224,6 +224,7 @@ class Runner:
224
224
  if self.heartbeat_seconds is not None and self.heartbeat_seconds < 30:
225
225
  raise ValueError("Heartbeat must be 30 seconds or greater.")
226
226
  self._heartbeat_task: asyncio.Task[None] | None = None
227
+ self._events_client: EventsClient = get_events_client(checkpoint_every=1)
227
228
 
228
229
  self._exit_stack = AsyncExitStack()
229
230
  self._limiter: anyio.CapacityLimiter | None = None
@@ -1005,7 +1006,7 @@ class Runner:
1005
1006
  )
1006
1007
 
1007
1008
  flow, deployment = await self._get_flow_and_deployment(flow_run)
1008
- self._emit_flow_run_cancelled_event(
1009
+ await self._emit_flow_run_cancelled_event(
1009
1010
  flow_run=flow_run, flow=flow, deployment=deployment
1010
1011
  )
1011
1012
  run_logger.info(f"Cancelled flow run '{flow_run.name}'!")
@@ -1064,14 +1065,18 @@ class Runner:
1064
1065
  related = [RelatedResource.model_validate(r) for r in related]
1065
1066
  related += tags_as_related_resources(set(tags))
1066
1067
 
1067
- emit_event(
1068
- event="prefect.flow-run.heartbeat",
1069
- resource={
1070
- "prefect.resource.id": f"prefect.flow-run.{flow_run.id}",
1071
- "prefect.resource.name": flow_run.name,
1072
- "prefect.version": __version__,
1073
- },
1074
- related=related,
1068
+ await self._events_client.emit(
1069
+ Event(
1070
+ event="prefect.flow-run.heartbeat",
1071
+ resource=Resource(
1072
+ {
1073
+ "prefect.resource.id": f"prefect.flow-run.{flow_run.id}",
1074
+ "prefect.resource.name": flow_run.name,
1075
+ "prefect.version": __version__,
1076
+ }
1077
+ ),
1078
+ related=related,
1079
+ )
1075
1080
  )
1076
1081
 
1077
1082
  def _event_resource(self):
@@ -1083,7 +1088,7 @@ class Runner:
1083
1088
  "prefect.version": __version__,
1084
1089
  }
1085
1090
 
1086
- def _emit_flow_run_cancelled_event(
1091
+ async def _emit_flow_run_cancelled_event(
1087
1092
  self,
1088
1093
  flow_run: "FlowRun",
1089
1094
  flow: "Optional[APIFlow]",
@@ -1118,10 +1123,12 @@ class Runner:
1118
1123
  related = [RelatedResource.model_validate(r) for r in related]
1119
1124
  related += tags_as_related_resources(set(tags))
1120
1125
 
1121
- emit_event(
1122
- event="prefect.runner.cancelled-flow-run",
1123
- resource=self._event_resource(),
1124
- related=related,
1126
+ await self._events_client.emit(
1127
+ Event(
1128
+ event="prefect.runner.cancelled-flow-run",
1129
+ resource=Resource(self._event_resource()),
1130
+ related=related,
1131
+ )
1125
1132
  )
1126
1133
  self._logger.debug(f"Emitted flow run heartbeat event for {flow_run.id}")
1127
1134
 
@@ -1502,6 +1509,7 @@ class Runner:
1502
1509
  )
1503
1510
  )
1504
1511
  await self._exit_stack.enter_async_context(self._client)
1512
+ await self._exit_stack.enter_async_context(self._events_client)
1505
1513
 
1506
1514
  if not hasattr(self, "_runs_task_group") or not self._runs_task_group:
1507
1515
  self._runs_task_group: anyio.abc.TaskGroup = anyio.create_task_group()