prefect-client 3.4.1.dev2__tar.gz → 3.4.1.dev4__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 (327) hide show
  1. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/PKG-INFO +1 -1
  2. prefect_client-3.4.1.dev4/src/prefect/_build_info.py +5 -0
  3. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_experimental/bundles/__init__.py +1 -1
  4. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/schemas/validators.py +5 -1
  5. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/clients.py +4 -4
  6. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/flows.py +79 -28
  7. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runner/runner.py +24 -16
  8. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/dockerutils.py +18 -8
  9. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/importtools.py +12 -4
  10. prefect_client-3.4.1.dev2/src/prefect/_build_info.py +0 -5
  11. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/.gitignore +0 -0
  12. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/LICENSE +0 -0
  13. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/README.md +0 -0
  14. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/pyproject.toml +0 -0
  15. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/.prefectignore +0 -0
  16. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/__init__.py +0 -0
  17. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/__main__.py +0 -0
  18. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_experimental/__init__.py +0 -0
  19. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_experimental/bundles/execute.py +0 -0
  20. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_experimental/lineage.py +0 -0
  21. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_experimental/sla/__init__.py +0 -0
  22. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_experimental/sla/client.py +0 -0
  23. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_experimental/sla/objects.py +0 -0
  24. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/__init__.py +0 -0
  25. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/_logging.py +0 -0
  26. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/compatibility/__init__.py +0 -0
  27. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/compatibility/async_dispatch.py +0 -0
  28. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  29. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/compatibility/migration.py +0 -0
  30. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/concurrency/__init__.py +0 -0
  31. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/concurrency/api.py +0 -0
  32. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/concurrency/calls.py +0 -0
  33. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  34. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  35. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/concurrency/inspection.py +0 -0
  36. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/concurrency/primitives.py +0 -0
  37. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/concurrency/services.py +0 -0
  38. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/concurrency/threads.py +0 -0
  39. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/concurrency/waiters.py +0 -0
  40. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/integrations.py +0 -0
  41. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/pydantic/__init__.py +0 -0
  42. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/pydantic/schemas.py +0 -0
  43. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  44. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  45. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
  46. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/pytz.py +0 -0
  47. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/retries.py +0 -0
  48. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/schemas/__init__.py +0 -0
  49. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/schemas/bases.py +0 -0
  50. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/schemas/fields.py +0 -0
  51. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_internal/schemas/serializers.py +0 -0
  52. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_result_records.py +0 -0
  53. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_vendor/croniter/__init__.py +0 -0
  54. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_vendor/croniter/croniter.py +0 -0
  55. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_versioning.py +0 -0
  56. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/_waiters.py +0 -0
  57. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/agent.py +0 -0
  58. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/artifacts.py +0 -0
  59. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/automations.py +0 -0
  60. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/blocks/__init__.py +0 -0
  61. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/blocks/abstract.py +0 -0
  62. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/blocks/core.py +0 -0
  63. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/blocks/fields.py +0 -0
  64. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/blocks/notifications.py +0 -0
  65. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/blocks/redis.py +0 -0
  66. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/blocks/system.py +0 -0
  67. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/blocks/webhook.py +0 -0
  68. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/cache_policies.py +0 -0
  69. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/__init__.py +0 -0
  70. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/base.py +0 -0
  71. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/cloud.py +0 -0
  72. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/collections.py +0 -0
  73. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/constants.py +0 -0
  74. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/__init__.py +0 -0
  75. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_artifacts/__init__.py +0 -0
  76. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_artifacts/client.py +0 -0
  77. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_automations/__init__.py +0 -0
  78. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_automations/client.py +0 -0
  79. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_blocks_documents/__init__.py +0 -0
  80. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_blocks_documents/client.py +0 -0
  81. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_blocks_schemas/__init__.py +0 -0
  82. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_blocks_schemas/client.py +0 -0
  83. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_blocks_types/__init__.py +0 -0
  84. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_blocks_types/client.py +0 -0
  85. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_concurrency_limits/__init__.py +0 -0
  86. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_concurrency_limits/client.py +0 -0
  87. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_deployments/__init__.py +0 -0
  88. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_deployments/client.py +0 -0
  89. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_flow_runs/__init__.py +0 -0
  90. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_flow_runs/client.py +0 -0
  91. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_flows/__init__.py +0 -0
  92. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_flows/client.py +0 -0
  93. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_logs/__init__.py +0 -0
  94. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_logs/client.py +0 -0
  95. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_variables/__init__.py +0 -0
  96. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_variables/client.py +0 -0
  97. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_work_pools/__init__.py +0 -0
  98. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/_work_pools/client.py +0 -0
  99. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/base.py +0 -0
  100. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/orchestration/routes.py +0 -0
  101. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/schemas/__init__.py +0 -0
  102. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/schemas/actions.py +0 -0
  103. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/schemas/filters.py +0 -0
  104. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/schemas/objects.py +0 -0
  105. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/schemas/responses.py +0 -0
  106. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/schemas/schedules.py +0 -0
  107. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/schemas/sorting.py +0 -0
  108. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/subscriptions.py +0 -0
  109. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/types/__init__.py +0 -0
  110. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/types/flexible_schedule_list.py +0 -0
  111. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/client/utilities.py +0 -0
  112. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/__init__.py +0 -0
  113. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/_asyncio.py +0 -0
  114. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/_events.py +0 -0
  115. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/asyncio.py +0 -0
  116. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/context.py +0 -0
  117. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/services.py +0 -0
  118. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/sync.py +0 -0
  119. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/v1/__init__.py +0 -0
  120. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/v1/_asyncio.py +0 -0
  121. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/v1/_events.py +0 -0
  122. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/v1/asyncio.py +0 -0
  123. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/v1/context.py +0 -0
  124. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/v1/services.py +0 -0
  125. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/concurrency/v1/sync.py +0 -0
  126. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/context.py +0 -0
  127. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/deployments/__init__.py +0 -0
  128. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/deployments/base.py +0 -0
  129. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/deployments/deployments.py +0 -0
  130. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/deployments/flow_runs.py +0 -0
  131. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/deployments/runner.py +0 -0
  132. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/deployments/schedules.py +0 -0
  133. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/deployments/steps/__init__.py +0 -0
  134. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/deployments/steps/core.py +0 -0
  135. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/deployments/steps/pull.py +0 -0
  136. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/deployments/steps/utility.py +0 -0
  137. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/docker/__init__.py +0 -0
  138. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/docker/docker_image.py +0 -0
  139. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/engine.py +0 -0
  140. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/__init__.py +0 -0
  141. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/actions.py +0 -0
  142. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/cli/__init__.py +0 -0
  143. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/cli/automations.py +0 -0
  144. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/filters.py +0 -0
  145. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/related.py +0 -0
  146. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/schemas/__init__.py +0 -0
  147. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/schemas/automations.py +0 -0
  148. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  149. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/schemas/events.py +0 -0
  150. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/schemas/labelling.py +0 -0
  151. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/utilities.py +0 -0
  152. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/events/worker.py +0 -0
  153. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/exceptions.py +0 -0
  154. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/filesystems.py +0 -0
  155. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/flow_engine.py +0 -0
  156. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/flow_runs.py +0 -0
  157. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/futures.py +0 -0
  158. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/infrastructure/__init__.py +0 -0
  159. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/infrastructure/base.py +0 -0
  160. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  161. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  162. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/infrastructure/provisioners/coiled.py +0 -0
  163. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  164. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  165. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  166. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/input/__init__.py +0 -0
  167. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/input/actions.py +0 -0
  168. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/input/run_input.py +0 -0
  169. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/locking/__init__.py +0 -0
  170. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/locking/filesystem.py +0 -0
  171. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/locking/memory.py +0 -0
  172. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/locking/protocol.py +0 -0
  173. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/logging/__init__.py +0 -0
  174. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/logging/configuration.py +0 -0
  175. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/logging/filters.py +0 -0
  176. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/logging/formatters.py +0 -0
  177. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/logging/handlers.py +0 -0
  178. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/logging/highlighters.py +0 -0
  179. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/logging/loggers.py +0 -0
  180. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/logging/logging.yml +0 -0
  181. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/main.py +0 -0
  182. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/plugins.py +0 -0
  183. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/py.typed +0 -0
  184. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/results.py +0 -0
  185. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runner/__init__.py +0 -0
  186. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runner/_observers.py +0 -0
  187. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runner/server.py +0 -0
  188. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runner/storage.py +0 -0
  189. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runner/submit.py +0 -0
  190. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runner/utils.py +0 -0
  191. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runtime/__init__.py +0 -0
  192. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runtime/deployment.py +0 -0
  193. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runtime/flow_run.py +0 -0
  194. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/runtime/task_run.py +0 -0
  195. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/schedules.py +0 -0
  196. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/serializers.py +0 -0
  197. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/__init__.py +0 -0
  198. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/admin.py +0 -0
  199. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/artifacts.py +0 -0
  200. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/automations.py +0 -0
  201. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/block_capabilities.py +0 -0
  202. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/block_documents.py +0 -0
  203. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/block_schemas.py +0 -0
  204. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/block_types.py +0 -0
  205. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/clients.py +0 -0
  206. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/collections.py +0 -0
  207. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  208. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/concurrency_limits.py +0 -0
  209. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/concurrency_limits_v2.py +0 -0
  210. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/csrf_token.py +0 -0
  211. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/dependencies.py +0 -0
  212. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/deployments.py +0 -0
  213. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/events.py +0 -0
  214. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/flow_run_states.py +0 -0
  215. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/flow_runs.py +0 -0
  216. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/flows.py +0 -0
  217. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/logs.py +0 -0
  218. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/middleware.py +0 -0
  219. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/root.py +0 -0
  220. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/run_history.py +0 -0
  221. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/saved_searches.py +0 -0
  222. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/server.py +0 -0
  223. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  224. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/task_run_states.py +0 -0
  225. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/task_runs.py +0 -0
  226. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/task_workers.py +0 -0
  227. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/templates.py +0 -0
  228. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/ui/__init__.py +0 -0
  229. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/ui/flow_runs.py +0 -0
  230. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/ui/flows.py +0 -0
  231. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/ui/schemas.py +0 -0
  232. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/ui/task_runs.py +0 -0
  233. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/validation.py +0 -0
  234. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/variables.py +0 -0
  235. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/work_queues.py +0 -0
  236. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/server/api/workers.py +0 -0
  237. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/__init__.py +0 -0
  238. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/base.py +0 -0
  239. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/constants.py +0 -0
  240. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/context.py +0 -0
  241. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/legacy.py +0 -0
  242. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/__init__.py +0 -0
  243. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/api.py +0 -0
  244. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/cli.py +0 -0
  245. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/client.py +0 -0
  246. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/cloud.py +0 -0
  247. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/deployments.py +0 -0
  248. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/experiments.py +0 -0
  249. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/flows.py +0 -0
  250. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/internal.py +0 -0
  251. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/logging.py +0 -0
  252. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/results.py +0 -0
  253. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/root.py +0 -0
  254. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/runner.py +0 -0
  255. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/__init__.py +0 -0
  256. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/api.py +0 -0
  257. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/database.py +0 -0
  258. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/deployments.py +0 -0
  259. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/ephemeral.py +0 -0
  260. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/events.py +0 -0
  261. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/flow_run_graph.py +0 -0
  262. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/root.py +0 -0
  263. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/services.py +0 -0
  264. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/tasks.py +0 -0
  265. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/server/ui.py +0 -0
  266. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/tasks.py +0 -0
  267. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/testing.py +0 -0
  268. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/models/worker.py +0 -0
  269. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/profiles.py +0 -0
  270. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/profiles.toml +0 -0
  271. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/settings/sources.py +0 -0
  272. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/states.py +0 -0
  273. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/task_engine.py +0 -0
  274. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/task_runners.py +0 -0
  275. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/task_runs.py +0 -0
  276. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/task_worker.py +0 -0
  277. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/tasks.py +0 -0
  278. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/telemetry/__init__.py +0 -0
  279. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/telemetry/bootstrap.py +0 -0
  280. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/telemetry/instrumentation.py +0 -0
  281. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/telemetry/logging.py +0 -0
  282. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/telemetry/processors.py +0 -0
  283. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/telemetry/run_telemetry.py +0 -0
  284. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/telemetry/services.py +0 -0
  285. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/transactions.py +0 -0
  286. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/types/__init__.py +0 -0
  287. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/types/_datetime.py +0 -0
  288. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/types/entrypoint.py +0 -0
  289. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/__init__.py +0 -0
  290. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/_ast.py +0 -0
  291. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/_deprecated.py +0 -0
  292. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/_engine.py +0 -0
  293. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/_git.py +0 -0
  294. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/annotations.py +0 -0
  295. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/asyncutils.py +0 -0
  296. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/callables.py +0 -0
  297. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/collections.py +0 -0
  298. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/compat.py +0 -0
  299. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/context.py +0 -0
  300. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/dispatch.py +0 -0
  301. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/engine.py +0 -0
  302. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/filesystem.py +0 -0
  303. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/generics.py +0 -0
  304. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/hashing.py +0 -0
  305. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/math.py +0 -0
  306. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/names.py +0 -0
  307. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/processutils.py +0 -0
  308. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/pydantic.py +0 -0
  309. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/render_swagger.py +0 -0
  310. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  311. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  312. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/schema_tools/validation.py +0 -0
  313. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/services.py +0 -0
  314. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/slugify.py +0 -0
  315. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/templating.py +0 -0
  316. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/text.py +0 -0
  317. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/timeout.py +0 -0
  318. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/urls.py +0 -0
  319. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/utilities/visualization.py +0 -0
  320. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/variables.py +0 -0
  321. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/workers/__init__.py +0 -0
  322. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/workers/base.py +0 -0
  323. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/workers/block.py +0 -0
  324. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/workers/cloud.py +0 -0
  325. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/workers/process.py +0 -0
  326. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/src/prefect/workers/server.py +0 -0
  327. {prefect_client-3.4.1.dev2 → prefect_client-3.4.1.dev4}/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.dev2
3
+ Version: 3.4.1.dev4
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.dev4"
3
+ __build_date__ = "2025-05-07 08:09:04.443127+00:00"
4
+ __git_commit__ = "15e90f75877628d769414cb3382d3aa5b30b50a5"
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
@@ -38,6 +38,7 @@ MM = TypeVar("MM", bound=MutableMapping[str, Any])
38
38
 
39
39
  LOWERCASE_LETTERS_NUMBERS_AND_DASHES_ONLY_REGEX = "^[a-z0-9-]*$"
40
40
  LOWERCASE_LETTERS_NUMBERS_AND_UNDERSCORES_REGEX = "^[a-z0-9_]*$"
41
+ SLUG_REGEX = "^[a-z0-9]+([_-]+[a-z0-9]+)*$"
41
42
 
42
43
 
43
44
  @overload
@@ -647,7 +648,10 @@ def validate_variable_name(value: None) -> None: ...
647
648
 
648
649
  def validate_variable_name(value: Optional[str]) -> Optional[str]:
649
650
  if value is not None:
650
- raise_on_name_alphanumeric_underscores_only(value, field_name="Variable name")
651
+ if not bool(re.match(SLUG_REGEX, value)):
652
+ raise ValueError(
653
+ "Variable name must only contain lowercase letters, numbers, dashes, and underscores"
654
+ )
651
655
  return value
652
656
 
653
657
 
@@ -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()
@@ -495,10 +495,11 @@ def parse_image_tag(name: str) -> tuple[str, Optional[str]]:
495
495
  """
496
496
  Parse Docker Image String
497
497
 
498
- - If a tag exists, this function parses and returns the image registry and tag,
498
+ - If a tag or digest exists, this function parses and returns the image registry and tag/digest,
499
499
  separately as a tuple.
500
500
  - Example 1: 'prefecthq/prefect:latest' -> ('prefecthq/prefect', 'latest')
501
501
  - Example 2: 'hostname.io:5050/folder/subfolder:latest' -> ('hostname.io:5050/folder/subfolder', 'latest')
502
+ - Example 3: 'prefecthq/prefect@sha256:abc123' -> ('prefecthq/prefect', 'sha256:abc123')
502
503
  - Supports parsing Docker Image strings that follow Docker Image Specification v1.1.0
503
504
  - Image building tools typically enforce this standard
504
505
 
@@ -506,26 +507,35 @@ def parse_image_tag(name: str) -> tuple[str, Optional[str]]:
506
507
  name (str): Name of Docker Image
507
508
 
508
509
  Return:
509
- tuple: image registry, image tag
510
+ tuple: image registry, image tag/digest
510
511
  """
511
512
  tag = None
512
513
  name_parts = name.split("/")
513
- # First handles the simplest image names (DockerHub-based, index-free, potentionally with a tag)
514
- # - Example: simplename:latest
514
+
515
+ # First handles the simplest image names (DockerHub-based, index-free, potentially with a tag or digest)
516
+ # - Example: simplename:latest or simplename@sha256:abc123
515
517
  if len(name_parts) == 1:
516
- if ":" in name_parts[0]:
518
+ if "@" in name_parts[0]:
519
+ image_name, tag = name_parts[0].split("@")
520
+ elif ":" in name_parts[0]:
517
521
  image_name, tag = name_parts[0].split(":")
522
+
518
523
  else:
519
524
  image_name = name_parts[0]
520
525
  else:
521
526
  # 1. Separates index (hostname.io or prefecthq) from path:tag (folder/subfolder:latest or prefect:latest)
522
- # 2. Separates path and tag (if tag exists)
523
- # 3. Reunites index and path (without tag) as image name
527
+ # 2. Separates path and tag/digest (if exists)
528
+ # 3. Reunites index and path (without tag/digest) as image name
524
529
  index_name = name_parts[0]
525
530
  image_path = "/".join(name_parts[1:])
526
- if ":" in image_path:
531
+
532
+ if "@" in image_path:
533
+ image_path, tag = image_path.split("@")
534
+ elif ":" in image_path:
527
535
  image_path, tag = image_path.split(":")
536
+
528
537
  image_name = f"{index_name}/{image_path}"
538
+
529
539
  return image_name, tag
530
540
 
531
541
 
@@ -145,17 +145,19 @@ def import_object(import_path: str) -> Any:
145
145
  - module.object
146
146
  - module:object
147
147
  - /path/to/script.py:object
148
+ - module:object.method
149
+ - /path/to/script.py:object.method
148
150
 
149
151
  This function is not thread safe as it modifies the 'sys' module during execution.
150
152
  """
151
153
  if ".py:" in import_path:
152
- script_path, object_name = import_path.rsplit(":", 1)
154
+ script_path, object_path = import_path.rsplit(":", 1)
153
155
  module = load_script_as_module(script_path)
154
156
  else:
155
157
  if ":" in import_path:
156
- module_name, object_name = import_path.rsplit(":", 1)
158
+ module_name, object_path = import_path.rsplit(":", 1)
157
159
  elif "." in import_path:
158
- module_name, object_name = import_path.rsplit(".", 1)
160
+ module_name, object_path = import_path.rsplit(".", 1)
159
161
  else:
160
162
  raise ValueError(
161
163
  f"Invalid format for object import. Received {import_path!r}."
@@ -163,7 +165,13 @@ def import_object(import_path: str) -> Any:
163
165
 
164
166
  module = load_module(module_name)
165
167
 
166
- return getattr(module, object_name)
168
+ # Handle nested object/method access
169
+ parts = object_path.split(".")
170
+ obj = module
171
+ for part in parts:
172
+ obj = getattr(obj, part)
173
+
174
+ return obj
167
175
 
168
176
 
169
177
  class DelayedImportErrorModule(ModuleType):
@@ -1,5 +0,0 @@
1
- # Generated by versioningit
2
- __version__ = "3.4.1.dev2"
3
- __build_date__ = "2025-05-05 08:08:58.760597+00:00"
4
- __git_commit__ = "c158d3eb6aae366fd814ba55c9151ca73ca1666a"
5
- __dirty__ = False