prefect-client 2.14.12__tar.gz → 2.14.13__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 (224) hide show
  1. {prefect-client-2.14.12 → prefect-client-2.14.13}/MANIFEST.in +1 -0
  2. {prefect-client-2.14.12/src/prefect_client.egg-info → prefect-client-2.14.13}/PKG-INFO +1 -1
  3. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/orchestration.py +27 -0
  4. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/schemas/objects.py +12 -1
  5. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/engine.py +66 -0
  6. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/events/actions.py +13 -2
  7. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/events/schemas.py +1 -1
  8. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/flows.py +2 -0
  9. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/runner/runner.py +2 -2
  10. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/runner/storage.py +39 -24
  11. prefect-client-2.14.13/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +1535 -0
  12. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/tasks.py +28 -0
  13. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/processutils.py +7 -1
  14. {prefect-client-2.14.12 → prefect-client-2.14.13/src/prefect_client.egg-info}/PKG-INFO +1 -1
  15. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect_client.egg-info/SOURCES.txt +1 -0
  16. {prefect-client-2.14.12 → prefect-client-2.14.13}/LICENSE +0 -0
  17. {prefect-client-2.14.12 → prefect-client-2.14.13}/README.md +0 -0
  18. {prefect-client-2.14.12 → prefect-client-2.14.13}/requirements-client.txt +0 -0
  19. {prefect-client-2.14.12 → prefect-client-2.14.13}/requirements-dev.txt +0 -0
  20. {prefect-client-2.14.12 → prefect-client-2.14.13}/requirements.txt +0 -0
  21. {prefect-client-2.14.12 → prefect-client-2.14.13}/setup.cfg +0 -0
  22. {prefect-client-2.14.12 → prefect-client-2.14.13}/setup.py +0 -0
  23. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/.prefectignore +0 -0
  24. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/__init__.py +0 -0
  25. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/__init__.py +0 -0
  26. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/_logging.py +0 -0
  27. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/compatibility/__init__.py +0 -0
  28. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  29. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/compatibility/experimental.py +0 -0
  30. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/concurrency/__init__.py +0 -0
  31. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/concurrency/api.py +0 -0
  32. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/concurrency/calls.py +0 -0
  33. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  34. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  35. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/concurrency/inspection.py +0 -0
  36. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/concurrency/primitives.py +0 -0
  37. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/concurrency/services.py +0 -0
  38. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/concurrency/threads.py +0 -0
  39. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/concurrency/waiters.py +0 -0
  40. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/pydantic/__init__.py +0 -0
  41. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/pydantic/annotations/__init__.py +0 -0
  42. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/pydantic/annotations/pendulum.py +0 -0
  43. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/pydantic/schemas.py +0 -0
  44. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/pydantic/v2_schema.py +0 -0
  45. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
  46. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/pytz.py +0 -0
  47. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/schemas/__init__.py +0 -0
  48. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/schemas/bases.py +0 -0
  49. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/schemas/fields.py +0 -0
  50. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/schemas/serializers.py +0 -0
  51. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/schemas/transformations.py +0 -0
  52. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_internal/schemas/validators.py +0 -0
  53. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/__init__.py +0 -0
  54. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/__init__.py +0 -0
  55. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/applications.py +0 -0
  56. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/background.py +0 -0
  57. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/concurrency.py +0 -0
  58. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/datastructures.py +0 -0
  59. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/dependencies/__init__.py +0 -0
  60. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/dependencies/models.py +0 -0
  61. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/dependencies/utils.py +0 -0
  62. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/encoders.py +0 -0
  63. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/exception_handlers.py +0 -0
  64. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/exceptions.py +0 -0
  65. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/logger.py +0 -0
  66. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/middleware/__init__.py +0 -0
  67. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/middleware/asyncexitstack.py +0 -0
  68. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/middleware/cors.py +0 -0
  69. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/middleware/gzip.py +0 -0
  70. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/middleware/httpsredirect.py +0 -0
  71. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/middleware/trustedhost.py +0 -0
  72. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/middleware/wsgi.py +0 -0
  73. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/openapi/__init__.py +0 -0
  74. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/openapi/constants.py +0 -0
  75. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/openapi/docs.py +0 -0
  76. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/openapi/models.py +0 -0
  77. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/openapi/utils.py +0 -0
  78. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/param_functions.py +0 -0
  79. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/params.py +0 -0
  80. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/requests.py +0 -0
  81. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/responses.py +0 -0
  82. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/routing.py +0 -0
  83. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/security/__init__.py +0 -0
  84. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/security/api_key.py +0 -0
  85. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/security/base.py +0 -0
  86. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/security/http.py +0 -0
  87. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/security/oauth2.py +0 -0
  88. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/security/open_id_connect_url.py +0 -0
  89. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/security/utils.py +0 -0
  90. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/staticfiles.py +0 -0
  91. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/templating.py +0 -0
  92. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/testclient.py +0 -0
  93. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/types.py +0 -0
  94. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/utils.py +0 -0
  95. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_vendor/fastapi/websockets.py +0 -0
  96. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/_version.py +0 -0
  97. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/agent.py +0 -0
  98. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/blocks/__init__.py +0 -0
  99. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/blocks/abstract.py +0 -0
  100. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/blocks/core.py +0 -0
  101. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/blocks/fields.py +0 -0
  102. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/blocks/kubernetes.py +0 -0
  103. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/blocks/notifications.py +0 -0
  104. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/blocks/system.py +0 -0
  105. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/blocks/webhook.py +0 -0
  106. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/__init__.py +0 -0
  107. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/base.py +0 -0
  108. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/cloud.py +0 -0
  109. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/collections.py +0 -0
  110. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/constants.py +0 -0
  111. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/schemas/__init__.py +0 -0
  112. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/schemas/actions.py +0 -0
  113. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/schemas/filters.py +0 -0
  114. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/schemas/responses.py +0 -0
  115. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/schemas/schedules.py +0 -0
  116. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/schemas/sorting.py +0 -0
  117. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/client/utilities.py +0 -0
  118. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/concurrency/__init__.py +0 -0
  119. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/concurrency/asyncio.py +0 -0
  120. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/concurrency/common.py +0 -0
  121. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/concurrency/events.py +0 -0
  122. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/concurrency/services.py +0 -0
  123. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/concurrency/sync.py +0 -0
  124. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/context.py +0 -0
  125. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/deployments/__init__.py +0 -0
  126. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/deployments/base.py +0 -0
  127. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/deployments/deployments.py +0 -0
  128. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/deployments/runner.py +0 -0
  129. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/deployments/steps/__init__.py +0 -0
  130. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/deployments/steps/core.py +0 -0
  131. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/deployments/steps/pull.py +0 -0
  132. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/deployments/steps/utility.py +0 -0
  133. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/deprecated/__init__.py +0 -0
  134. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/deprecated/data_documents.py +0 -0
  135. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/events/__init__.py +0 -0
  136. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/events/clients.py +0 -0
  137. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/events/filters.py +0 -0
  138. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/events/instrument.py +0 -0
  139. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/events/related.py +0 -0
  140. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/events/utilities.py +0 -0
  141. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/events/worker.py +0 -0
  142. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/exceptions.py +0 -0
  143. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/filesystems.py +0 -0
  144. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/futures.py +0 -0
  145. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/infrastructure/__init__.py +0 -0
  146. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/infrastructure/base.py +0 -0
  147. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/infrastructure/container.py +0 -0
  148. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/infrastructure/kubernetes.py +0 -0
  149. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/infrastructure/process.py +0 -0
  150. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  151. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  152. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  153. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  154. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/input/__init__.py +0 -0
  155. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/input/actions.py +0 -0
  156. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/input/run_input.py +0 -0
  157. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/logging/__init__.py +0 -0
  158. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/logging/configuration.py +0 -0
  159. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/logging/formatters.py +0 -0
  160. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/logging/handlers.py +0 -0
  161. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/logging/highlighters.py +0 -0
  162. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/logging/loggers.py +0 -0
  163. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/logging/logging.yml +0 -0
  164. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/manifests.py +0 -0
  165. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/packaging/__init__.py +0 -0
  166. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/packaging/base.py +0 -0
  167. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/packaging/docker.py +0 -0
  168. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/packaging/file.py +0 -0
  169. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/packaging/orion.py +0 -0
  170. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/packaging/serializers.py +0 -0
  171. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/plugins.py +0 -0
  172. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/profiles.toml +0 -0
  173. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/py.typed +0 -0
  174. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/results.py +0 -0
  175. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/runner/__init__.py +0 -0
  176. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/runner/server.py +0 -0
  177. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/runner/utils.py +0 -0
  178. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/runtime/__init__.py +0 -0
  179. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/runtime/deployment.py +0 -0
  180. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/runtime/flow_run.py +0 -0
  181. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/runtime/task_run.py +0 -0
  182. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/serializers.py +0 -0
  183. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  184. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/settings.py +0 -0
  185. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/software/__init__.py +0 -0
  186. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/software/base.py +0 -0
  187. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/software/conda.py +0 -0
  188. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/software/pip.py +0 -0
  189. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/software/python.py +0 -0
  190. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/states.py +0 -0
  191. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/task_runners.py +0 -0
  192. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/__init__.py +0 -0
  193. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/annotations.py +0 -0
  194. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/asyncutils.py +0 -0
  195. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/callables.py +0 -0
  196. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/collections.py +0 -0
  197. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/compat.py +0 -0
  198. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/context.py +0 -0
  199. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/dispatch.py +0 -0
  200. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/dockerutils.py +0 -0
  201. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/filesystem.py +0 -0
  202. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/hashing.py +0 -0
  203. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/importtools.py +0 -0
  204. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/math.py +0 -0
  205. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/names.py +0 -0
  206. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/pydantic.py +0 -0
  207. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/render_swagger.py +0 -0
  208. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/services.py +0 -0
  209. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/slugify.py +0 -0
  210. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/templating.py +0 -0
  211. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/text.py +0 -0
  212. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/validation.py +0 -0
  213. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/utilities/visualization.py +0 -0
  214. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/variables.py +0 -0
  215. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/workers/__init__.py +0 -0
  216. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/workers/base.py +0 -0
  217. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/workers/block.py +0 -0
  218. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/workers/process.py +0 -0
  219. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/workers/server.py +0 -0
  220. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect/workers/utilities.py +0 -0
  221. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect_client.egg-info/dependency_links.txt +0 -0
  222. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect_client.egg-info/requires.txt +0 -0
  223. {prefect-client-2.14.12 → prefect-client-2.14.13}/src/prefect_client.egg-info/top_level.txt +0 -0
  224. {prefect-client-2.14.12 → prefect-client-2.14.13}/versioneer.py +0 -0
@@ -21,6 +21,7 @@ include src/prefect/.prefectignore
21
21
  include src/prefect/logging/logging.yml
22
22
  include src/prefect/cli/templates/*.yaml
23
23
  include src/prefect/server/collection_blocks_data.json
24
+ include src/prefect/server/api/collections_data/views/*.json
24
25
 
25
26
  # Migrations
26
27
  include src/prefect/server/database/alembic.ini
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prefect-client
3
- Version: 2.14.12
3
+ Version: 2.14.13
4
4
  Summary: Workflow orchestration and management.
5
5
  Home-page: https://www.prefect.io
6
6
  Author: Prefect Technologies, Inc.
@@ -92,6 +92,7 @@ from prefect.client.schemas.objects import (
92
92
  Worker,
93
93
  WorkPool,
94
94
  WorkQueue,
95
+ WorkQueueStatusDetail,
95
96
  )
96
97
  from prefect.client.schemas.responses import (
97
98
  DeploymentResponse,
@@ -1036,6 +1037,32 @@ class PrefectClient:
1036
1037
  raise
1037
1038
  return WorkQueue.parse_obj(response.json())
1038
1039
 
1040
+ async def read_work_queue_status(
1041
+ self,
1042
+ id: UUID,
1043
+ ) -> WorkQueueStatusDetail:
1044
+ """
1045
+ Read a work queue status.
1046
+
1047
+ Args:
1048
+ id: the id of the work queue to load
1049
+
1050
+ Raises:
1051
+ prefect.exceptions.ObjectNotFound: If request returns 404
1052
+ httpx.RequestError: If request fails
1053
+
1054
+ Returns:
1055
+ WorkQueueStatus: an instantiated WorkQueueStatus object
1056
+ """
1057
+ try:
1058
+ response = await self._client.get(f"/work_queues/{id}/status")
1059
+ except httpx.HTTPStatusError as e:
1060
+ if e.response.status_code == status.HTTP_404_NOT_FOUND:
1061
+ raise prefect.exceptions.ObjectNotFound(http_exc=e) from e
1062
+ else:
1063
+ raise
1064
+ return WorkQueueStatusDetail.parse_obj(response.json())
1065
+
1039
1066
  async def match_work_queues(
1040
1067
  self,
1041
1068
  prefixes: List[str],
@@ -30,7 +30,7 @@ from prefect._internal.schemas.validators import (
30
30
  raise_on_name_with_banned_characters,
31
31
  )
32
32
  from prefect.client.schemas.schedules import SCHEDULE_TYPES
33
- from prefect.settings import PREFECT_CLOUD_API_URL
33
+ from prefect.settings import PREFECT_CLOUD_API_URL, PREFECT_CLOUD_UI_URL
34
34
  from prefect.utilities.collections import AutoEnum, listrepr
35
35
  from prefect.utilities.names import generate_slug
36
36
 
@@ -110,6 +110,7 @@ class StateDetails(PrefectBaseModel):
110
110
  pause_key: str = None
111
111
  run_input_keyset: Optional[Dict[str, str]] = None
112
112
  refresh_cache: bool = None
113
+ retriable: bool = None
113
114
 
114
115
 
115
116
  class State(ObjectBaseModel, Generic[R]):
@@ -777,6 +778,16 @@ class Workspace(PrefectBaseModel):
777
778
  f"/workspaces/{self.workspace_id}"
778
779
  )
779
780
 
781
+ def ui_url(self) -> str:
782
+ """
783
+ Generate the UI URL for accessing this workspace
784
+ """
785
+ return (
786
+ f"{PREFECT_CLOUD_UI_URL.value()}"
787
+ f"/account/{self.account_id}"
788
+ f"/workspace/{self.workspace_id}"
789
+ )
790
+
780
791
  def __hash__(self):
781
792
  return hash(self.handle)
782
793
 
@@ -1028,6 +1028,24 @@ async def pause_flow_run(
1028
1028
  resumed without providing the input, the flow will fail. If the flow is
1029
1029
  resumed with the input, the flow will resume and the input will be loaded
1030
1030
  and returned from this function.
1031
+
1032
+ Example:
1033
+ ```python
1034
+ @task
1035
+ def task_one():
1036
+ for i in range(3):
1037
+ sleep(1)
1038
+
1039
+ @flow
1040
+ def my_flow():
1041
+ terminal_state = task_one.submit(return_state=True)
1042
+ if terminal_state.type == StateType.COMPLETED:
1043
+ print("Task one succeeded! Pausing flow run..")
1044
+ pause_flow_run(timeout=2)
1045
+ else:
1046
+ print("Task one failed. Skipping pause flow run..")
1047
+ ```
1048
+
1031
1049
  """
1032
1050
  if flow_run_id:
1033
1051
  if wait_for_input is not None:
@@ -2075,7 +2093,13 @@ async def orchestrate_task_run(
2075
2093
  )
2076
2094
  terminal_state.state_details.cache_key = cache_key
2077
2095
 
2096
+ if terminal_state.is_failed():
2097
+ # Defer to user to decide whether failure is retriable
2098
+ terminal_state.state_details.retriable = (
2099
+ await _check_task_failure_retriable(task, task_run, terminal_state)
2100
+ )
2078
2101
  state = await propose_state(client, terminal_state, task_run_id=task_run.id)
2102
+
2079
2103
  last_event = _emit_task_run_state_change_event(
2080
2104
  task_run=task_run,
2081
2105
  initial_state=last_state,
@@ -2672,6 +2696,48 @@ async def _run_task_hooks(task: Task, task_run: TaskRun, state: State) -> None:
2672
2696
  logger.info(f"Hook {hook_name!r} finished running successfully")
2673
2697
 
2674
2698
 
2699
+ async def _check_task_failure_retriable(
2700
+ task: Task, task_run: TaskRun, state: State
2701
+ ) -> bool:
2702
+ """Run the `retry_condition_fn` callable for a task, making sure to catch and log any errors
2703
+ that occur. If None, return True. If not callable, logs an error and returns False.
2704
+ """
2705
+ if task.retry_condition_fn is None:
2706
+ return True
2707
+
2708
+ logger = task_run_logger(task_run)
2709
+
2710
+ try:
2711
+ logger.debug(
2712
+ f"Running `retry_condition_fn` check {task.retry_condition_fn!r} for task"
2713
+ f" {task.name!r}"
2714
+ )
2715
+ if is_async_fn(task.retry_condition_fn):
2716
+ return bool(
2717
+ await task.retry_condition_fn(task=task, task_run=task_run, state=state)
2718
+ )
2719
+ else:
2720
+ return bool(
2721
+ await from_async.call_in_new_thread(
2722
+ create_call(
2723
+ task.retry_condition_fn,
2724
+ task=task,
2725
+ task_run=task_run,
2726
+ state=state,
2727
+ )
2728
+ )
2729
+ )
2730
+ except Exception:
2731
+ logger.error(
2732
+ (
2733
+ "An error was encountered while running `retry_condition_fn` check"
2734
+ f" '{task.retry_condition_fn!r}' for task {task.name!r}"
2735
+ ),
2736
+ exc_info=True,
2737
+ )
2738
+ return False
2739
+
2740
+
2675
2741
  async def _run_flow_hooks(flow: Flow, flow_run: FlowRun, state: State) -> None:
2676
2742
  """Run the on_failure, on_completion, on_cancellation, and on_crashed hooks for a flow, making sure to
2677
2743
  catch and log any errors that occur.
@@ -1,4 +1,4 @@
1
- from typing import Any, Dict, Optional
1
+ from typing import Any, Dict, Optional, Union
2
2
  from uuid import UUID
3
3
 
4
4
  from prefect._internal.pydantic import HAS_PYDANTIC_V2
@@ -34,4 +34,15 @@ class RunDeployment(Action):
34
34
  deployment_id: UUID = Field(..., description="The identifier of the deployment")
35
35
 
36
36
 
37
- ActionTypes = RunDeployment
37
+ class SendNotification(Action):
38
+ """Send a notification with the given parameters"""
39
+
40
+ type: Literal["send-notification"] = "send-notification"
41
+ block_document_id: UUID = Field(
42
+ ..., description="The identifier of the notification block"
43
+ )
44
+ body: str = Field(..., description="Notification body")
45
+ subject: Optional[str] = Field(None, description="Notification subject")
46
+
47
+
48
+ ActionTypes = Union[RunDeployment, SendNotification]
@@ -341,7 +341,7 @@ class DeploymentTrigger(ResourceTrigger):
341
341
  def owner_resource(self) -> Optional[str]:
342
342
  return f"prefect.deployment.{self._deployment_id}"
343
343
 
344
- def actions(self) -> List[ActionTypes]:
344
+ def actions(self) -> List[RunDeployment]:
345
345
  assert self._deployment_id
346
346
  return [
347
347
  RunDeployment(
@@ -623,6 +623,8 @@ class Flow(Generic[P, R]):
623
623
  """
624
624
  from prefect.deployments.runner import RunnerDeployment
625
625
 
626
+ if not name.endswith(".py"):
627
+ raise_on_name_with_banned_characters(name)
626
628
  if self._storage and self._entrypoint:
627
629
  return await RunnerDeployment.from_storage(
628
630
  storage=self._storage,
@@ -86,7 +86,7 @@ from prefect.settings import (
86
86
  )
87
87
  from prefect.states import Crashed, Pending, exception_to_failed_state
88
88
  from prefect.utilities.asyncutils import is_async_fn, sync_compatible
89
- from prefect.utilities.processutils import run_process
89
+ from prefect.utilities.processutils import _register_signal, run_process
90
90
  from prefect.utilities.services import critical_service_loop
91
91
 
92
92
  __all__ = ["Runner", "serve"]
@@ -337,7 +337,7 @@ class Runner:
337
337
  runner.start()
338
338
  ```
339
339
  """
340
- signal.signal(signal.SIGTERM, self.handle_sigterm)
340
+ _register_signal(signal.SIGTERM, self.handle_sigterm)
341
341
 
342
342
  webserver = webserver if webserver is not None else self.webserver
343
343
 
@@ -1,3 +1,4 @@
1
+ import shutil
1
2
  import subprocess
2
3
  from copy import deepcopy
3
4
  from pathlib import Path
@@ -218,35 +219,49 @@ class GitRepository:
218
219
  if self._include_submodules:
219
220
  cmd += ["--recurse-submodules"]
220
221
  cmd += ["--depth", "1"]
221
- await run_process(cmd, cwd=self.destination)
222
+ try:
223
+ await run_process(cmd, cwd=self.destination)
224
+ self._logger.debug("Successfully pulled latest changes")
225
+ except subprocess.CalledProcessError as exc:
226
+ self._logger.error(
227
+ f"Failed to pull latest changes with exit code {exc}"
228
+ )
229
+ shutil.rmtree(self.destination)
230
+ await self._clone_repo()
231
+
222
232
  else:
223
- self._logger.debug("Cloning repository %s", self._url)
224
- # Clone the repository if it doesn't exist at the destination
233
+ await self._clone_repo()
225
234
 
226
- repository_url = self._repository_url_with_credentials
235
+ async def _clone_repo(self):
236
+ """
237
+ Clones the repository into the local destination.
238
+ """
239
+ self._logger.debug("Cloning repository %s", self._url)
227
240
 
228
- cmd = [
229
- "git",
230
- "clone",
231
- repository_url,
232
- ]
233
- if self._branch:
234
- cmd += ["--branch", self._branch]
235
- if self._include_submodules:
236
- cmd += ["--recurse-submodules"]
241
+ repository_url = self._repository_url_with_credentials
237
242
 
238
- # Limit git history and set path to clone to
239
- cmd += ["--depth", "1", str(self.destination)]
243
+ cmd = [
244
+ "git",
245
+ "clone",
246
+ repository_url,
247
+ ]
248
+ if self._branch:
249
+ cmd += ["--branch", self._branch]
250
+ if self._include_submodules:
251
+ cmd += ["--recurse-submodules"]
240
252
 
241
- try:
242
- await run_process(cmd)
243
- except subprocess.CalledProcessError as exc:
244
- # Hide the command used to avoid leaking the access token
245
- exc_chain = None if self._credentials else exc
246
- raise RuntimeError(
247
- f"Failed to clone repository {self._url!r} with exit code"
248
- f" {exc.returncode}."
249
- ) from exc_chain
253
+ # Limit git history and set path to clone to
254
+ cmd += ["--depth", "1", str(self.destination)]
255
+
256
+ try:
257
+ await run_process(cmd)
258
+ except subprocess.CalledProcessError as exc:
259
+ # Hide the command used to avoid leaking the access token
260
+ exc_chain = None if self._credentials else exc
261
+ raise RuntimeError(
262
+ f"Failed to clone repository {self._url!r} with exit code"
263
+ f" {exc.returncode}."
264
+ ) from exc_chain
250
265
 
251
266
  def __eq__(self, __value) -> bool:
252
267
  if isinstance(__value, GitRepository):