prefect-client 2.20.9__tar.gz → 2.20.11__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 (332) hide show
  1. {prefect-client-2.20.9/src/prefect_client.egg-info → prefect_client-2.20.11}/PKG-INFO +40 -2
  2. {prefect-client-2.20.9 → prefect_client-2.20.11}/requirements-client.txt +2 -2
  3. {prefect-client-2.20.9 → prefect_client-2.20.11}/requirements.txt +3 -3
  4. {prefect-client-2.20.9 → prefect_client-2.20.11}/setup.cfg +1 -0
  5. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/v2_schema.py +26 -0
  6. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/notifications.py +42 -0
  7. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/webhook.py +8 -1
  8. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/orchestration.py +16 -0
  9. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/flows.py +35 -8
  10. prefect_client-2.20.11/src/prefect/py.typed +0 -0
  11. prefect_client-2.20.11/src/prefect/utilities/__init__.py +0 -0
  12. prefect_client-2.20.11/src/prefect/utilities/urls.py +49 -0
  13. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/base.py +6 -0
  14. {prefect-client-2.20.9 → prefect_client-2.20.11/src/prefect_client.egg-info}/PKG-INFO +40 -2
  15. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect_client.egg-info/SOURCES.txt +30 -1
  16. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect_client.egg-info/requires.txt +2 -2
  17. prefect_client-2.20.11/tests/test_artifacts.py +484 -0
  18. prefect_client-2.20.11/tests/test_automations.py +186 -0
  19. prefect_client-2.20.11/tests/test_background_tasks.py +401 -0
  20. prefect_client-2.20.11/tests/test_context.py +396 -0
  21. prefect_client-2.20.11/tests/test_deployments.py +1632 -0
  22. prefect_client-2.20.11/tests/test_engine.py +3417 -0
  23. prefect_client-2.20.11/tests/test_exceptions.py +139 -0
  24. prefect_client-2.20.11/tests/test_filesystems.py +782 -0
  25. prefect_client-2.20.11/tests/test_flow_runs.py +40 -0
  26. prefect_client-2.20.11/tests/test_flows.py +4497 -0
  27. prefect_client-2.20.11/tests/test_flows_compat.py +30 -0
  28. prefect_client-2.20.11/tests/test_futures.py +215 -0
  29. prefect_client-2.20.11/tests/test_highlighters.py +69 -0
  30. prefect_client-2.20.11/tests/test_import_interceptor.py +7 -0
  31. prefect_client-2.20.11/tests/test_log_prints.py +240 -0
  32. prefect_client-2.20.11/tests/test_logging.py +1586 -0
  33. prefect_client-2.20.11/tests/test_new_flow_engine.py +866 -0
  34. prefect_client-2.20.11/tests/test_new_task_engine.py +868 -0
  35. prefect_client-2.20.11/tests/test_plugins.py +259 -0
  36. prefect_client-2.20.11/tests/test_serializers.py +368 -0
  37. prefect_client-2.20.11/tests/test_settings.py +1062 -0
  38. prefect_client-2.20.11/tests/test_states.py +374 -0
  39. prefect_client-2.20.11/tests/test_task_runners.py +34 -0
  40. prefect_client-2.20.11/tests/test_task_server.py +551 -0
  41. prefect_client-2.20.11/tests/test_tasks.py +4404 -0
  42. prefect_client-2.20.11/tests/test_variables.py +94 -0
  43. {prefect-client-2.20.9 → prefect_client-2.20.11}/LICENSE +0 -0
  44. {prefect-client-2.20.9 → prefect_client-2.20.11}/MANIFEST.in +0 -0
  45. {prefect-client-2.20.9 → prefect_client-2.20.11}/README.md +0 -0
  46. {prefect-client-2.20.9 → prefect_client-2.20.11}/requirements-dev.txt +0 -0
  47. {prefect-client-2.20.9 → prefect_client-2.20.11}/setup.py +0 -0
  48. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/.prefectignore +0 -0
  49. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/__init__.py +0 -0
  50. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/__init__.py +0 -0
  51. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/_logging.py +0 -0
  52. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/compatibility/__init__.py +0 -0
  53. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/compatibility/deprecated.py +0 -0
  54. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/compatibility/experimental.py +0 -0
  55. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/__init__.py +0 -0
  56. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/api.py +0 -0
  57. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/calls.py +0 -0
  58. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/cancellation.py +0 -0
  59. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/event_loop.py +0 -0
  60. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/inspection.py +0 -0
  61. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/primitives.py +0 -0
  62. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/services.py +0 -0
  63. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/threads.py +0 -0
  64. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/waiters.py +0 -0
  65. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/integrations.py +0 -0
  66. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/__init__.py +0 -0
  67. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/_base_model.py +0 -0
  68. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/_compat.py +0 -0
  69. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/_flags.py +0 -0
  70. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/_types.py +0 -0
  71. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/annotations/__init__.py +0 -0
  72. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/annotations/pendulum.py +0 -0
  73. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/schemas.py +0 -0
  74. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/__init__.py +0 -0
  75. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/config_dict.py +0 -0
  76. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/field_validator.py +0 -0
  77. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_construct.py +0 -0
  78. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_copy.py +0 -0
  79. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_dump.py +0 -0
  80. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_dump_json.py +0 -0
  81. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_fields.py +0 -0
  82. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_fields_set.py +0 -0
  83. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_json_schema.py +0 -0
  84. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_rebuild.py +0 -0
  85. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_validate.py +0 -0
  86. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_validate_json.py +0 -0
  87. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_validator.py +0 -0
  88. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/type_adapter.py +0 -0
  89. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
  90. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
  91. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pytz.py +0 -0
  92. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/schemas/__init__.py +0 -0
  93. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/schemas/bases.py +0 -0
  94. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/schemas/fields.py +0 -0
  95. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/schemas/serializers.py +0 -0
  96. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/schemas/validators.py +0 -0
  97. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/__init__.py +0 -0
  98. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/__init__.py +0 -0
  99. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/applications.py +0 -0
  100. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/background.py +0 -0
  101. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/concurrency.py +0 -0
  102. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/datastructures.py +0 -0
  103. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/dependencies/__init__.py +0 -0
  104. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/dependencies/models.py +0 -0
  105. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/dependencies/utils.py +0 -0
  106. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/encoders.py +0 -0
  107. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/exception_handlers.py +0 -0
  108. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/exceptions.py +0 -0
  109. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/logger.py +0 -0
  110. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/__init__.py +0 -0
  111. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/asyncexitstack.py +0 -0
  112. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/cors.py +0 -0
  113. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/gzip.py +0 -0
  114. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/httpsredirect.py +0 -0
  115. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/trustedhost.py +0 -0
  116. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/wsgi.py +0 -0
  117. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/openapi/__init__.py +0 -0
  118. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/openapi/constants.py +0 -0
  119. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/openapi/docs.py +0 -0
  120. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/openapi/models.py +0 -0
  121. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/openapi/utils.py +0 -0
  122. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/param_functions.py +0 -0
  123. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/params.py +0 -0
  124. {prefect-client-2.20.9/src/prefect → prefect_client-2.20.11/src/prefect/_vendor/fastapi}/py.typed +0 -0
  125. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/requests.py +0 -0
  126. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/responses.py +0 -0
  127. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/routing.py +0 -0
  128. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/__init__.py +0 -0
  129. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/api_key.py +0 -0
  130. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/base.py +0 -0
  131. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/http.py +0 -0
  132. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/oauth2.py +0 -0
  133. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/open_id_connect_url.py +0 -0
  134. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/utils.py +0 -0
  135. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/staticfiles.py +0 -0
  136. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/templating.py +0 -0
  137. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/testclient.py +0 -0
  138. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/types.py +0 -0
  139. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/utils.py +0 -0
  140. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/websockets.py +0 -0
  141. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/__init__.py +0 -0
  142. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/_compat.py +0 -0
  143. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/_exception_handler.py +0 -0
  144. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/_utils.py +0 -0
  145. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/applications.py +0 -0
  146. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/authentication.py +0 -0
  147. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/background.py +0 -0
  148. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/concurrency.py +0 -0
  149. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/config.py +0 -0
  150. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/convertors.py +0 -0
  151. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/datastructures.py +0 -0
  152. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/endpoints.py +0 -0
  153. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/exceptions.py +0 -0
  154. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/formparsers.py +0 -0
  155. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/__init__.py +0 -0
  156. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/authentication.py +0 -0
  157. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/base.py +0 -0
  158. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/cors.py +0 -0
  159. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/errors.py +0 -0
  160. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/exceptions.py +0 -0
  161. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/gzip.py +0 -0
  162. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/httpsredirect.py +0 -0
  163. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/sessions.py +0 -0
  164. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/trustedhost.py +0 -0
  165. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/wsgi.py +0 -0
  166. /prefect-client-2.20.9/src/prefect/concurrency/__init__.py → /prefect_client-2.20.11/src/prefect/_vendor/starlette/py.typed +0 -0
  167. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/requests.py +0 -0
  168. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/responses.py +0 -0
  169. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/routing.py +0 -0
  170. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/schemas.py +0 -0
  171. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/staticfiles.py +0 -0
  172. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/status.py +0 -0
  173. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/templating.py +0 -0
  174. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/testclient.py +0 -0
  175. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/types.py +0 -0
  176. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/websockets.py +0 -0
  177. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_version.py +0 -0
  178. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/agent.py +0 -0
  179. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/artifacts.py +0 -0
  180. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/automations.py +0 -0
  181. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/__init__.py +0 -0
  182. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/abstract.py +0 -0
  183. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/core.py +0 -0
  184. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/fields.py +0 -0
  185. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/kubernetes.py +0 -0
  186. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/system.py +0 -0
  187. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/__init__.py +0 -0
  188. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/base.py +0 -0
  189. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/cloud.py +0 -0
  190. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/collections.py +0 -0
  191. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/constants.py +0 -0
  192. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/__init__.py +0 -0
  193. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/actions.py +0 -0
  194. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/filters.py +0 -0
  195. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/objects.py +0 -0
  196. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/responses.py +0 -0
  197. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/schedules.py +0 -0
  198. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/sorting.py +0 -0
  199. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/subscriptions.py +0 -0
  200. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/utilities.py +0 -0
  201. {prefect-client-2.20.9/src/prefect/deprecated → prefect_client-2.20.11/src/prefect/concurrency}/__init__.py +0 -0
  202. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/concurrency/asyncio.py +0 -0
  203. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/concurrency/events.py +0 -0
  204. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/concurrency/services.py +0 -0
  205. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/concurrency/sync.py +0 -0
  206. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/context.py +0 -0
  207. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/__init__.py +0 -0
  208. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/base.py +0 -0
  209. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/deployments.py +0 -0
  210. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/runner.py +0 -0
  211. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/schedules.py +0 -0
  212. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/steps/__init__.py +0 -0
  213. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/steps/core.py +0 -0
  214. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/steps/pull.py +0 -0
  215. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/steps/utility.py +0 -0
  216. {prefect-client-2.20.9/src/prefect/events/cli → prefect_client-2.20.11/src/prefect/deprecated}/__init__.py +0 -0
  217. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/data_documents.py +0 -0
  218. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/__init__.py +0 -0
  219. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/base.py +0 -0
  220. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/docker.py +0 -0
  221. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/file.py +0 -0
  222. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/orion.py +0 -0
  223. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/serializers.py +0 -0
  224. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/engine.py +0 -0
  225. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/__init__.py +0 -0
  226. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/actions.py +0 -0
  227. {prefect-client-2.20.9/src/prefect/utilities → prefect_client-2.20.11/src/prefect/events/cli}/__init__.py +0 -0
  228. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/cli/automations.py +0 -0
  229. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/clients.py +0 -0
  230. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/filters.py +0 -0
  231. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/instrument.py +0 -0
  232. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/related.py +0 -0
  233. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/schemas/__init__.py +0 -0
  234. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/schemas/automations.py +0 -0
  235. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/schemas/deployment_triggers.py +0 -0
  236. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/schemas/events.py +0 -0
  237. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/schemas/labelling.py +0 -0
  238. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/utilities.py +0 -0
  239. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/worker.py +0 -0
  240. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/exceptions.py +0 -0
  241. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/filesystems.py +0 -0
  242. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/flow_runs.py +0 -0
  243. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/futures.py +0 -0
  244. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/__init__.py +0 -0
  245. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/base.py +0 -0
  246. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/container.py +0 -0
  247. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/kubernetes.py +0 -0
  248. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/process.py +0 -0
  249. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
  250. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
  251. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
  252. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
  253. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/provisioners/modal.py +0 -0
  254. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/input/__init__.py +0 -0
  255. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/input/actions.py +0 -0
  256. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/input/run_input.py +0 -0
  257. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/__init__.py +0 -0
  258. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/configuration.py +0 -0
  259. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/filters.py +0 -0
  260. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/formatters.py +0 -0
  261. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/handlers.py +0 -0
  262. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/highlighters.py +0 -0
  263. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/loggers.py +0 -0
  264. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/logging.yml +0 -0
  265. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/manifests.py +0 -0
  266. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/new_flow_engine.py +0 -0
  267. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/new_task_engine.py +0 -0
  268. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/plugins.py +0 -0
  269. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/profiles.toml +0 -0
  270. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/pydantic/__init__.py +0 -0
  271. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/pydantic/main.py +0 -0
  272. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/results.py +0 -0
  273. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/__init__.py +0 -0
  274. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/runner.py +0 -0
  275. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/server.py +0 -0
  276. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/storage.py +0 -0
  277. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/submit.py +0 -0
  278. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/utils.py +0 -0
  279. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runtime/__init__.py +0 -0
  280. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runtime/deployment.py +0 -0
  281. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runtime/flow_run.py +0 -0
  282. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runtime/task_run.py +0 -0
  283. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/serializers.py +0 -0
  284. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
  285. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
  286. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/settings.py +0 -0
  287. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/software/__init__.py +0 -0
  288. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/software/base.py +0 -0
  289. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/software/conda.py +0 -0
  290. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/software/pip.py +0 -0
  291. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/software/python.py +0 -0
  292. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/states.py +0 -0
  293. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/task_engine.py +0 -0
  294. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/task_runners.py +0 -0
  295. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/task_server.py +0 -0
  296. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/tasks.py +0 -0
  297. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/types/__init__.py +0 -0
  298. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/annotations.py +0 -0
  299. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/asyncutils.py +0 -0
  300. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/callables.py +0 -0
  301. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/collections.py +0 -0
  302. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/compat.py +0 -0
  303. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/context.py +0 -0
  304. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/dispatch.py +0 -0
  305. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/dockerutils.py +0 -0
  306. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/engine.py +0 -0
  307. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/filesystem.py +0 -0
  308. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/hashing.py +0 -0
  309. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/importtools.py +0 -0
  310. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/math.py +0 -0
  311. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/names.py +0 -0
  312. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/processutils.py +0 -0
  313. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/pydantic.py +0 -0
  314. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/render_swagger.py +0 -0
  315. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/schema_tools/__init__.py +0 -0
  316. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/schema_tools/hydration.py +0 -0
  317. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/schema_tools/validation.py +0 -0
  318. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/services.py +0 -0
  319. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/slugify.py +0 -0
  320. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/templating.py +0 -0
  321. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/text.py +0 -0
  322. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/timeout.py +0 -0
  323. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/visualization.py +0 -0
  324. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/variables.py +0 -0
  325. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/__init__.py +0 -0
  326. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/block.py +0 -0
  327. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/process.py +0 -0
  328. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/server.py +0 -0
  329. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/utilities.py +0 -0
  330. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect_client.egg-info/dependency_links.txt +0 -0
  331. {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect_client.egg-info/top_level.txt +0 -0
  332. {prefect-client-2.20.9 → prefect_client-2.20.11}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prefect-client
3
- Version: 2.20.9
3
+ Version: 2.20.11
4
4
  Summary: Workflow orchestration and management.
5
5
  Home-page: https://www.prefect.io
6
6
  Author: Prefect Technologies, Inc.
@@ -21,8 +21,46 @@ Classifier: Programming Language :: Python :: 3.11
21
21
  Classifier: Topic :: Software Development :: Libraries
22
22
  Requires-Python: >=3.8
23
23
  Description-Content-Type: text/markdown
24
- Provides-Extra: notifications
25
24
  License-File: LICENSE
25
+ Requires-Dist: anyio<4.6.1,>=4.4.0
26
+ Requires-Dist: asgi-lifespan<3.0,>=1.0
27
+ Requires-Dist: cachetools<6.0,>=5.3
28
+ Requires-Dist: cloudpickle<4.0,>=2.0
29
+ Requires-Dist: coolname<3.0.0,>=1.0.4
30
+ Requires-Dist: croniter<3.0.0,>=1.0.12
31
+ Requires-Dist: fsspec>=2022.5.0
32
+ Requires-Dist: exceptiongroup>=1.2.1
33
+ Requires-Dist: graphviz>=0.20.1
34
+ Requires-Dist: griffe<2.0.0,>=0.49.0
35
+ Requires-Dist: httpcore<2.0.0,>=1.0.5
36
+ Requires-Dist: httpx[http2]!=0.23.2,>=0.23
37
+ Requires-Dist: importlib_metadata>=4.4; python_version < "3.10"
38
+ Requires-Dist: importlib-resources<6.5.0,>=6.1.3
39
+ Requires-Dist: jsonpatch<2.0,>=1.32
40
+ Requires-Dist: jsonschema<5.0.0,>=4.0.0
41
+ Requires-Dist: orjson<4.0,>=3.7
42
+ Requires-Dist: packaging<24.3,>=21.3
43
+ Requires-Dist: pathspec>=0.8.0
44
+ Requires-Dist: pendulum<3.0; python_version < "3.12"
45
+ Requires-Dist: pendulum<4,>=3.0.0; python_version >= "3.12"
46
+ Requires-Dist: pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0
47
+ Requires-Dist: pydantic_core<3.0.0,>=2.12.0
48
+ Requires-Dist: python_dateutil<3.0.0,>=2.8.2
49
+ Requires-Dist: python-slugify<9.0,>=5.0
50
+ Requires-Dist: pyyaml<7.0.0,>=5.4.1
51
+ Requires-Dist: rfc3339-validator<0.2.0,>=0.1.4
52
+ Requires-Dist: rich<14.0,>=11.0
53
+ Requires-Dist: ruamel.yaml>=0.17.0
54
+ Requires-Dist: sniffio<2.0.0,>=1.3.0
55
+ Requires-Dist: toml>=0.10.0
56
+ Requires-Dist: typing_extensions<5.0.0,>=4.5.0
57
+ Requires-Dist: ujson<6.0.0,>=5.8.0
58
+ Requires-Dist: uvicorn!=0.29.0,>=0.14.0
59
+ Requires-Dist: websockets<14.0,>=10.4
60
+ Requires-Dist: itsdangerous
61
+ Requires-Dist: python-multipart>=0.0.7
62
+ Provides-Extra: notifications
63
+ Requires-Dist: apprise<2.0.0,>=1.1.0; extra == "notifications"
26
64
 
27
65
  <p align="center"><img src="https://github.com/PrefectHQ/prefect/assets/3407835/c654cbc6-63e8-4ada-a92a-efd2f8f24b85" width=1000></p>
28
66
 
@@ -1,4 +1,4 @@
1
- anyio >= 4.4.0, < 5.0.0
1
+ anyio >= 4.4.0, < 4.6.1
2
2
  asgi-lifespan >= 1.0, < 3.0
3
3
  cachetools >= 5.3, < 6.0
4
4
  cloudpickle >= 2.0, < 4.0
@@ -21,7 +21,7 @@ pathspec >= 0.8.0
21
21
  pendulum < 3.0; python_version < '3.12'
22
22
  pendulum >= 3.0.0, <4; python_version >= '3.12'
23
23
  # the version constraints for pydantic are merged with those from fastapi 0.103.2
24
- pydantic[email]>=1.10.0,!=2.0.0,!=2.0.1,!=2.1.0,<2.9.0
24
+ pydantic[email]>=1.10.0,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0
25
25
  pydantic_core >= 2.12.0, < 3.0.0
26
26
  python_dateutil >= 2.8.2, < 3.0.0
27
27
  python-slugify >= 5.0, < 9.0
@@ -3,7 +3,7 @@
3
3
  aiosqlite >= 0.17.0, < 1.0.0
4
4
  alembic >= 1.7.5, < 2.0.0
5
5
  apprise >= 1.8.0, < 2.0.0
6
- asyncpg >= 0.23, < 1.0.0
6
+ asyncpg >= 0.23, < 0.30.0
7
7
  click >= 8.0, < 8.2
8
8
  cryptography >= 36.0.1
9
9
  dateparser >= 1.1.1, < 2.0.0
@@ -12,8 +12,8 @@ graphviz >= 0.20.1
12
12
  jinja2 >= 3.0.0, < 4.0.0
13
13
  jinja2-humanize-extension >= 0.4.0
14
14
  humanize >= 4.9.0, < 5.0.0
15
- kubernetes >= 24.2.0, < 30.0.0
15
+ kubernetes >= 24.2.0, < 32.0.0
16
16
  pytz >= 2021.1, < 2025
17
17
  readchar >= 4.0.0, < 5.0.0
18
- sqlalchemy[asyncio] >= 1.4.22, != 1.4.33, < 3.0.0
18
+ sqlalchemy[asyncio] >= 1.4.22, != 1.4.33, < 2.0.36
19
19
  typer >= 0.12.0, != 0.12.2, < 0.13.0
@@ -37,6 +37,7 @@ filterwarnings =
37
37
  ignore:The `RayTaskRunner` has moved:DeprecationWarning
38
38
  ignore:The `DaskTaskRunner` has moved:DeprecationWarning
39
39
  ignore:`DeploymentSpec` has been replaced by `Deployment`:DeprecationWarning
40
+ ignore:Please use `import python_multipart` instead:PendingDeprecationWarning
40
41
  ignore:the imp module is deprecated:DeprecationWarning
41
42
  ignore:distutils Version classes are deprecated:DeprecationWarning
42
43
  ignore:The distutils package is deprecated:DeprecationWarning
@@ -9,6 +9,8 @@ import pydantic
9
9
  from pydantic import BaseModel as V2BaseModel
10
10
  from pydantic import ConfigDict, PydanticUndefinedAnnotation, create_model
11
11
  from pydantic.type_adapter import TypeAdapter
12
+ from pydantic.v1 import BaseModel as V1BaseModel
13
+ from pydantic.v1 import SecretStr as V1SecretStr
12
14
 
13
15
  from prefect._internal.pydantic.annotations.pendulum import (
14
16
  PydanticPendulumDateTimeType,
@@ -30,6 +32,18 @@ def is_v2_model(v) -> bool:
30
32
  return False
31
33
 
32
34
 
35
+ def is_v1_model(v) -> bool:
36
+ if isinstance(v, V1BaseModel):
37
+ return True
38
+ try:
39
+ if inspect.isclass(v) and issubclass(v, V1BaseModel):
40
+ return True
41
+ except TypeError:
42
+ pass
43
+
44
+ return False
45
+
46
+
33
47
  def is_v2_type(v) -> bool:
34
48
  if is_v2_model(v):
35
49
  return True
@@ -40,6 +54,18 @@ def is_v2_type(v) -> bool:
40
54
  return False
41
55
 
42
56
 
57
+ def is_v1_type(v) -> bool:
58
+ if is_v1_model(v):
59
+ return True
60
+
61
+ try:
62
+ return v.__module__.startswith("pydantic.v1.types") or isinstance(
63
+ v, V1SecretStr
64
+ )
65
+ except AttributeError:
66
+ return False
67
+
68
+
43
69
  def has_v2_type_as_param(signature: inspect.Signature) -> bool:
44
70
  parameters = signature.parameters.values()
45
71
  for p in parameters:
@@ -4,6 +4,7 @@ from typing import Dict, List, Optional
4
4
 
5
5
  from prefect._internal.pydantic import HAS_PYDANTIC_V2
6
6
  from prefect.logging import LogEavesdropper
7
+ from prefect.utilities.urls import validate_restricted_url
7
8
 
8
9
  if HAS_PYDANTIC_V2:
9
10
  from pydantic.v1 import AnyHttpUrl, Field, SecretStr
@@ -88,6 +89,26 @@ class AppriseNotificationBlock(AbstractAppriseNotificationBlock, ABC):
88
89
  description="Incoming webhook URL used to send notifications.",
89
90
  examples=["https://hooks.example.com/XXX"],
90
91
  )
92
+ allow_private_urls: bool = Field(
93
+ default=True,
94
+ description="Whether to allow notifications to private URLs. Defaults to True.",
95
+ )
96
+
97
+ @sync_compatible
98
+ async def notify(
99
+ self,
100
+ body: str,
101
+ subject: Optional[str] = None,
102
+ ):
103
+ if not self.allow_private_urls:
104
+ try:
105
+ validate_restricted_url(self.url.get_secret_value())
106
+ except ValueError as exc:
107
+ if self._raise_on_failure:
108
+ raise NotificationError(str(exc))
109
+ raise
110
+
111
+ await super().notify(body, subject)
91
112
 
92
113
 
93
114
  # TODO: Move to prefect-slack once collection block auto-registration is
@@ -281,6 +302,27 @@ class PagerDutyWebHook(AbstractAppriseNotificationBlock):
281
302
  )
282
303
  self._start_apprise_client(url)
283
304
 
305
+ @sync_compatible
306
+ async def notify(
307
+ self,
308
+ body: str,
309
+ subject: Optional[str] = None,
310
+ ):
311
+ """
312
+ Apprise will combine subject and body by default, so we need to move
313
+ the body into the custom_details field. custom_details is part of the
314
+ webhook url, so we need to update the url and restart the client.
315
+ """
316
+ if subject:
317
+ self.custom_details = self.custom_details or {}
318
+ self.custom_details.update(
319
+ {"Prefect Notification Body": body.replace(" ", "%20")}
320
+ )
321
+ body = " "
322
+ self.block_initialization()
323
+
324
+ await super().notify(body, subject)
325
+
284
326
 
285
327
  class TwilioSMS(AbstractAppriseNotificationBlock):
286
328
  """Enables sending notifications via Twilio SMS.
@@ -3,6 +3,7 @@ from typing import Optional
3
3
  from httpx import AsyncClient, AsyncHTTPTransport, Response
4
4
 
5
5
  from prefect._internal.pydantic import HAS_PYDANTIC_V2
6
+ from prefect.utilities.urls import validate_restricted_url
6
7
 
7
8
  if HAS_PYDANTIC_V2:
8
9
  from pydantic.v1 import Field, SecretStr
@@ -38,7 +39,10 @@ class Webhook(Block):
38
39
  description="The webhook URL.",
39
40
  examples=["https://hooks.slack.com/XXX"],
40
41
  )
41
-
42
+ allow_private_urls: bool = Field(
43
+ default=True,
44
+ description="Whether to allow notifications to private URLs. Defaults to True.",
45
+ )
42
46
  headers: SecretDict = Field(
43
47
  default_factory=lambda: SecretDict(dict()),
44
48
  title="Webhook Headers",
@@ -55,6 +59,9 @@ class Webhook(Block):
55
59
  Args:
56
60
  payload: an optional payload to send when calling the webhook.
57
61
  """
62
+ if not self.allow_private_urls:
63
+ validate_restricted_url(self.url.get_secret_value())
64
+
58
65
  async with self._client:
59
66
  return await self._client.request(
60
67
  method=self.method,
@@ -8,12 +8,14 @@ from typing import (
8
8
  Dict,
9
9
  Iterable,
10
10
  List,
11
+ Literal,
11
12
  NoReturn,
12
13
  Optional,
13
14
  Set,
14
15
  Tuple,
15
16
  TypeVar,
16
17
  Union,
18
+ overload,
17
19
  )
18
20
  from uuid import UUID, uuid4
19
21
 
@@ -178,6 +180,20 @@ class ServerType(AutoEnum):
178
180
  return PREFECT_EXPERIMENTAL_EVENTS and PREFECT_API_SERVICES_TRIGGERS_ENABLED
179
181
 
180
182
 
183
+ @overload
184
+ def get_client(
185
+ httpx_settings: Optional[Dict[str, Any]] = None, sync_client: Literal[False] = False
186
+ ) -> "PrefectClient":
187
+ ...
188
+
189
+
190
+ @overload
191
+ def get_client(
192
+ httpx_settings: Optional[Dict[str, Any]] = None, sync_client: Literal[True] = True
193
+ ) -> "SyncPrefectClient":
194
+ ...
195
+
196
+
181
197
  def get_client(
182
198
  httpx_settings: Optional[Dict[str, Any]] = None, sync_client: bool = False
183
199
  ) -> Union["PrefectClient", "SyncPrefectClient"]:
@@ -45,11 +45,15 @@ from prefect._internal.pydantic import HAS_PYDANTIC_V2
45
45
 
46
46
  if HAS_PYDANTIC_V2:
47
47
  import pydantic.v1 as pydantic
48
+ from pydantic import BaseModel as V2BaseModel
48
49
  from pydantic import ValidationError as V2ValidationError
49
50
  from pydantic.v1 import BaseModel as V1BaseModel
50
51
  from pydantic.v1.decorator import ValidatedFunction as V1ValidatedFunction
51
52
 
52
- from ._internal.pydantic.v2_schema import is_v2_type
53
+ from ._internal.pydantic.v2_schema import (
54
+ is_v1_type,
55
+ is_v2_type,
56
+ )
53
57
  from ._internal.pydantic.v2_validated_func import V2ValidatedFunction
54
58
  from ._internal.pydantic.v2_validated_func import (
55
59
  V2ValidatedFunction as ValidatedFunction,
@@ -339,6 +343,16 @@ class Flow(Generic[P, R]):
339
343
  # is not picklable in some environments
340
344
  try:
341
345
  ValidatedFunction(self.fn, config={"arbitrary_types_allowed": True})
346
+ except TypeError as exc:
347
+ if (
348
+ HAS_PYDANTIC_V2
349
+ and "`__modify_schema__` method is not supported" in str(exc)
350
+ ):
351
+ V1ValidatedFunction(
352
+ self.fn, config={"arbitrary_types_allowed": True}
353
+ )
354
+ else:
355
+ raise
342
356
  except pydantic.ConfigError as exc:
343
357
  raise ValueError(
344
358
  "Flow function is not compatible with `validate_parameters`. "
@@ -510,19 +524,33 @@ class Flow(Generic[P, R]):
510
524
  args, kwargs = parameters_to_args_kwargs(self.fn, parameters)
511
525
 
512
526
  if HAS_PYDANTIC_V2:
513
- has_v1_models = any(isinstance(o, V1BaseModel) for o in args) or any(
514
- isinstance(o, V1BaseModel) for o in kwargs.values()
527
+ sig = inspect.signature(self.fn)
528
+
529
+ has_v1_types = any(
530
+ is_v1_type(param.annotation) for param in sig.parameters.values()
531
+ )
532
+ has_v1_models = any(
533
+ issubclass(param.annotation, V1BaseModel)
534
+ if isinstance(param.annotation, type)
535
+ else False
536
+ for param in sig.parameters.values()
515
537
  )
516
- has_v2_types = any(is_v2_type(o) for o in args) or any(
517
- is_v2_type(o) for o in kwargs.values()
538
+ has_v2_types = any(
539
+ is_v2_type(param.annotation) for param in sig.parameters.values()
540
+ )
541
+ has_v2_models = any(
542
+ issubclass(param.annotation, V2BaseModel)
543
+ if isinstance(param.annotation, type)
544
+ else False
545
+ for param in sig.parameters.values()
518
546
  )
519
547
 
520
- if has_v1_models and has_v2_types:
548
+ if (has_v1_types and has_v2_types) or (has_v1_models and has_v2_models):
521
549
  raise ParameterTypeError(
522
550
  "Cannot mix Pydantic v1 and v2 types as arguments to a flow."
523
551
  )
524
552
 
525
- if has_v1_models:
553
+ if has_v1_models or has_v1_types:
526
554
  validated_fn = V1ValidatedFunction(
527
555
  self.fn, config={"arbitrary_types_allowed": True}
528
556
  )
@@ -530,7 +558,6 @@ class Flow(Generic[P, R]):
530
558
  validated_fn = V2ValidatedFunction(
531
559
  self.fn, config={"arbitrary_types_allowed": True}
532
560
  )
533
-
534
561
  else:
535
562
  validated_fn = ValidatedFunction(
536
563
  self.fn, config={"arbitrary_types_allowed": True}
File without changes
@@ -0,0 +1,49 @@
1
+ import ipaddress
2
+ import socket
3
+ from urllib.parse import urlparse
4
+
5
+
6
+ def validate_restricted_url(url: str):
7
+ """
8
+ Validate that the provided URL is safe for outbound requests. This prevents
9
+ attacks like SSRF (Server Side Request Forgery), where an attacker can make
10
+ requests to internal services (like the GCP metadata service, localhost addresses,
11
+ or in-cluster Kubernetes services)
12
+ Args:
13
+ url: The URL to validate.
14
+ Raises:
15
+ ValueError: If the URL is a restricted URL.
16
+ """
17
+
18
+ try:
19
+ parsed_url = urlparse(url)
20
+ except ValueError:
21
+ raise ValueError(f"{url!r} is not a valid URL.")
22
+
23
+ if parsed_url.scheme not in ("http", "https"):
24
+ raise ValueError(
25
+ f"{url!r} is not a valid URL. Only HTTP and HTTPS URLs are allowed."
26
+ )
27
+
28
+ hostname = parsed_url.hostname or ""
29
+
30
+ # Remove IPv6 brackets if present
31
+ if hostname.startswith("[") and hostname.endswith("]"):
32
+ hostname = hostname[1:-1]
33
+
34
+ if not hostname:
35
+ raise ValueError(f"{url!r} is not a valid URL.")
36
+
37
+ try:
38
+ ip_address = socket.gethostbyname(hostname)
39
+ ip = ipaddress.ip_address(ip_address)
40
+ except socket.gaierror:
41
+ try:
42
+ ip = ipaddress.ip_address(hostname)
43
+ except ValueError:
44
+ raise ValueError(f"{url!r} is not a valid URL. It could not be resolved.")
45
+
46
+ if ip.is_private:
47
+ raise ValueError(
48
+ f"{url!r} is not a valid URL. It resolves to the private address {ip}."
49
+ )
@@ -137,6 +137,12 @@ class BaseJobConfiguration(BaseModel):
137
137
  variables = cls._get_base_config_defaults(
138
138
  variables_schema.get("properties", {})
139
139
  )
140
+
141
+ # copy variable defaults for `env` to job config before they're replaced by
142
+ # deployment overrides
143
+ if variables.get("env"):
144
+ job_config["env"] = variables.get("env")
145
+
140
146
  variables.update(values)
141
147
 
142
148
  # deep merge `env`
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: prefect-client
3
- Version: 2.20.9
3
+ Version: 2.20.11
4
4
  Summary: Workflow orchestration and management.
5
5
  Home-page: https://www.prefect.io
6
6
  Author: Prefect Technologies, Inc.
@@ -21,8 +21,46 @@ Classifier: Programming Language :: Python :: 3.11
21
21
  Classifier: Topic :: Software Development :: Libraries
22
22
  Requires-Python: >=3.8
23
23
  Description-Content-Type: text/markdown
24
- Provides-Extra: notifications
25
24
  License-File: LICENSE
25
+ Requires-Dist: anyio<4.6.1,>=4.4.0
26
+ Requires-Dist: asgi-lifespan<3.0,>=1.0
27
+ Requires-Dist: cachetools<6.0,>=5.3
28
+ Requires-Dist: cloudpickle<4.0,>=2.0
29
+ Requires-Dist: coolname<3.0.0,>=1.0.4
30
+ Requires-Dist: croniter<3.0.0,>=1.0.12
31
+ Requires-Dist: fsspec>=2022.5.0
32
+ Requires-Dist: exceptiongroup>=1.2.1
33
+ Requires-Dist: graphviz>=0.20.1
34
+ Requires-Dist: griffe<2.0.0,>=0.49.0
35
+ Requires-Dist: httpcore<2.0.0,>=1.0.5
36
+ Requires-Dist: httpx[http2]!=0.23.2,>=0.23
37
+ Requires-Dist: importlib_metadata>=4.4; python_version < "3.10"
38
+ Requires-Dist: importlib-resources<6.5.0,>=6.1.3
39
+ Requires-Dist: jsonpatch<2.0,>=1.32
40
+ Requires-Dist: jsonschema<5.0.0,>=4.0.0
41
+ Requires-Dist: orjson<4.0,>=3.7
42
+ Requires-Dist: packaging<24.3,>=21.3
43
+ Requires-Dist: pathspec>=0.8.0
44
+ Requires-Dist: pendulum<3.0; python_version < "3.12"
45
+ Requires-Dist: pendulum<4,>=3.0.0; python_version >= "3.12"
46
+ Requires-Dist: pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0
47
+ Requires-Dist: pydantic_core<3.0.0,>=2.12.0
48
+ Requires-Dist: python_dateutil<3.0.0,>=2.8.2
49
+ Requires-Dist: python-slugify<9.0,>=5.0
50
+ Requires-Dist: pyyaml<7.0.0,>=5.4.1
51
+ Requires-Dist: rfc3339-validator<0.2.0,>=0.1.4
52
+ Requires-Dist: rich<14.0,>=11.0
53
+ Requires-Dist: ruamel.yaml>=0.17.0
54
+ Requires-Dist: sniffio<2.0.0,>=1.3.0
55
+ Requires-Dist: toml>=0.10.0
56
+ Requires-Dist: typing_extensions<5.0.0,>=4.5.0
57
+ Requires-Dist: ujson<6.0.0,>=5.8.0
58
+ Requires-Dist: uvicorn!=0.29.0,>=0.14.0
59
+ Requires-Dist: websockets<14.0,>=10.4
60
+ Requires-Dist: itsdangerous
61
+ Requires-Dist: python-multipart>=0.0.7
62
+ Provides-Extra: notifications
63
+ Requires-Dist: apprise<2.0.0,>=1.1.0; extra == "notifications"
26
64
 
27
65
  <p align="center"><img src="https://github.com/PrefectHQ/prefect/assets/3407835/c654cbc6-63e8-4ada-a92a-efd2f8f24b85" width=1000></p>
28
66
 
@@ -95,6 +95,7 @@ src/prefect/_vendor/fastapi/exceptions.py
95
95
  src/prefect/_vendor/fastapi/logger.py
96
96
  src/prefect/_vendor/fastapi/param_functions.py
97
97
  src/prefect/_vendor/fastapi/params.py
98
+ src/prefect/_vendor/fastapi/py.typed
98
99
  src/prefect/_vendor/fastapi/requests.py
99
100
  src/prefect/_vendor/fastapi/responses.py
100
101
  src/prefect/_vendor/fastapi/routing.py
@@ -140,6 +141,7 @@ src/prefect/_vendor/starlette/datastructures.py
140
141
  src/prefect/_vendor/starlette/endpoints.py
141
142
  src/prefect/_vendor/starlette/exceptions.py
142
143
  src/prefect/_vendor/starlette/formparsers.py
144
+ src/prefect/_vendor/starlette/py.typed
143
145
  src/prefect/_vendor/starlette/requests.py
144
146
  src/prefect/_vendor/starlette/responses.py
145
147
  src/prefect/_vendor/starlette/routing.py
@@ -285,6 +287,7 @@ src/prefect/utilities/slugify.py
285
287
  src/prefect/utilities/templating.py
286
288
  src/prefect/utilities/text.py
287
289
  src/prefect/utilities/timeout.py
290
+ src/prefect/utilities/urls.py
288
291
  src/prefect/utilities/visualization.py
289
292
  src/prefect/utilities/schema_tools/__init__.py
290
293
  src/prefect/utilities/schema_tools/hydration.py
@@ -299,4 +302,30 @@ src/prefect_client.egg-info/PKG-INFO
299
302
  src/prefect_client.egg-info/SOURCES.txt
300
303
  src/prefect_client.egg-info/dependency_links.txt
301
304
  src/prefect_client.egg-info/requires.txt
302
- src/prefect_client.egg-info/top_level.txt
305
+ src/prefect_client.egg-info/top_level.txt
306
+ tests/test_artifacts.py
307
+ tests/test_automations.py
308
+ tests/test_background_tasks.py
309
+ tests/test_context.py
310
+ tests/test_deployments.py
311
+ tests/test_engine.py
312
+ tests/test_exceptions.py
313
+ tests/test_filesystems.py
314
+ tests/test_flow_runs.py
315
+ tests/test_flows.py
316
+ tests/test_flows_compat.py
317
+ tests/test_futures.py
318
+ tests/test_highlighters.py
319
+ tests/test_import_interceptor.py
320
+ tests/test_log_prints.py
321
+ tests/test_logging.py
322
+ tests/test_new_flow_engine.py
323
+ tests/test_new_task_engine.py
324
+ tests/test_plugins.py
325
+ tests/test_serializers.py
326
+ tests/test_settings.py
327
+ tests/test_states.py
328
+ tests/test_task_runners.py
329
+ tests/test_task_server.py
330
+ tests/test_tasks.py
331
+ tests/test_variables.py
@@ -1,4 +1,4 @@
1
- anyio<5.0.0,>=4.4.0
1
+ anyio<4.6.1,>=4.4.0
2
2
  asgi-lifespan<3.0,>=1.0
3
3
  cachetools<6.0,>=5.3
4
4
  cloudpickle<4.0,>=2.0
@@ -16,7 +16,7 @@ jsonschema<5.0.0,>=4.0.0
16
16
  orjson<4.0,>=3.7
17
17
  packaging<24.3,>=21.3
18
18
  pathspec>=0.8.0
19
- pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<2.9.0,>=1.10.0
19
+ pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0
20
20
  pydantic_core<3.0.0,>=2.12.0
21
21
  python_dateutil<3.0.0,>=2.8.2
22
22
  python-slugify<9.0,>=5.0