prefect-client 2.19.2__py3-none-any.whl → 3.0.0rc1__py3-none-any.whl

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 (239) hide show
  1. prefect/__init__.py +8 -56
  2. prefect/_internal/compatibility/deprecated.py +6 -115
  3. prefect/_internal/compatibility/experimental.py +4 -79
  4. prefect/_internal/concurrency/api.py +0 -34
  5. prefect/_internal/concurrency/calls.py +0 -6
  6. prefect/_internal/concurrency/cancellation.py +0 -3
  7. prefect/_internal/concurrency/event_loop.py +0 -20
  8. prefect/_internal/concurrency/inspection.py +3 -3
  9. prefect/_internal/concurrency/threads.py +35 -0
  10. prefect/_internal/concurrency/waiters.py +0 -28
  11. prefect/_internal/pydantic/__init__.py +0 -45
  12. prefect/_internal/pydantic/v1_schema.py +21 -22
  13. prefect/_internal/pydantic/v2_schema.py +0 -2
  14. prefect/_internal/pydantic/v2_validated_func.py +18 -23
  15. prefect/_internal/schemas/bases.py +44 -177
  16. prefect/_internal/schemas/fields.py +1 -43
  17. prefect/_internal/schemas/validators.py +60 -158
  18. prefect/artifacts.py +161 -14
  19. prefect/automations.py +39 -4
  20. prefect/blocks/abstract.py +1 -1
  21. prefect/blocks/core.py +268 -148
  22. prefect/blocks/fields.py +2 -57
  23. prefect/blocks/kubernetes.py +8 -12
  24. prefect/blocks/notifications.py +40 -20
  25. prefect/blocks/system.py +22 -11
  26. prefect/blocks/webhook.py +2 -9
  27. prefect/client/base.py +4 -4
  28. prefect/client/cloud.py +8 -13
  29. prefect/client/orchestration.py +347 -341
  30. prefect/client/schemas/actions.py +92 -86
  31. prefect/client/schemas/filters.py +20 -40
  32. prefect/client/schemas/objects.py +151 -145
  33. prefect/client/schemas/responses.py +16 -24
  34. prefect/client/schemas/schedules.py +47 -35
  35. prefect/client/subscriptions.py +2 -2
  36. prefect/client/utilities.py +5 -2
  37. prefect/concurrency/asyncio.py +3 -1
  38. prefect/concurrency/events.py +1 -1
  39. prefect/concurrency/services.py +6 -3
  40. prefect/context.py +195 -27
  41. prefect/deployments/__init__.py +5 -6
  42. prefect/deployments/base.py +7 -5
  43. prefect/deployments/flow_runs.py +185 -0
  44. prefect/deployments/runner.py +50 -45
  45. prefect/deployments/schedules.py +28 -23
  46. prefect/deployments/steps/__init__.py +0 -1
  47. prefect/deployments/steps/core.py +1 -0
  48. prefect/deployments/steps/pull.py +7 -21
  49. prefect/engine.py +12 -2422
  50. prefect/events/actions.py +17 -23
  51. prefect/events/cli/automations.py +19 -6
  52. prefect/events/clients.py +14 -37
  53. prefect/events/filters.py +14 -18
  54. prefect/events/related.py +2 -2
  55. prefect/events/schemas/__init__.py +0 -5
  56. prefect/events/schemas/automations.py +55 -46
  57. prefect/events/schemas/deployment_triggers.py +7 -197
  58. prefect/events/schemas/events.py +34 -65
  59. prefect/events/schemas/labelling.py +10 -14
  60. prefect/events/utilities.py +2 -3
  61. prefect/events/worker.py +2 -3
  62. prefect/filesystems.py +6 -517
  63. prefect/{new_flow_engine.py → flow_engine.py} +313 -72
  64. prefect/flow_runs.py +377 -5
  65. prefect/flows.py +307 -166
  66. prefect/futures.py +186 -345
  67. prefect/infrastructure/__init__.py +0 -27
  68. prefect/infrastructure/provisioners/__init__.py +5 -3
  69. prefect/infrastructure/provisioners/cloud_run.py +11 -6
  70. prefect/infrastructure/provisioners/container_instance.py +11 -7
  71. prefect/infrastructure/provisioners/ecs.py +6 -4
  72. prefect/infrastructure/provisioners/modal.py +8 -5
  73. prefect/input/actions.py +2 -4
  74. prefect/input/run_input.py +5 -7
  75. prefect/logging/formatters.py +0 -2
  76. prefect/logging/handlers.py +3 -11
  77. prefect/logging/loggers.py +2 -2
  78. prefect/manifests.py +2 -1
  79. prefect/records/__init__.py +1 -0
  80. prefect/records/result_store.py +42 -0
  81. prefect/records/store.py +9 -0
  82. prefect/results.py +43 -39
  83. prefect/runner/runner.py +19 -15
  84. prefect/runner/server.py +6 -10
  85. prefect/runner/storage.py +3 -8
  86. prefect/runner/submit.py +2 -2
  87. prefect/runner/utils.py +2 -2
  88. prefect/serializers.py +24 -35
  89. prefect/server/api/collections_data/views/aggregate-worker-metadata.json +5 -14
  90. prefect/settings.py +70 -133
  91. prefect/states.py +17 -47
  92. prefect/task_engine.py +697 -58
  93. prefect/task_runners.py +269 -301
  94. prefect/task_server.py +53 -34
  95. prefect/tasks.py +327 -337
  96. prefect/transactions.py +220 -0
  97. prefect/types/__init__.py +61 -82
  98. prefect/utilities/asyncutils.py +195 -136
  99. prefect/utilities/callables.py +311 -43
  100. prefect/utilities/collections.py +23 -38
  101. prefect/utilities/dispatch.py +11 -3
  102. prefect/utilities/dockerutils.py +4 -0
  103. prefect/utilities/engine.py +140 -20
  104. prefect/utilities/importtools.py +97 -27
  105. prefect/utilities/pydantic.py +128 -38
  106. prefect/utilities/schema_tools/hydration.py +5 -1
  107. prefect/utilities/templating.py +12 -2
  108. prefect/variables.py +78 -61
  109. prefect/workers/__init__.py +0 -1
  110. prefect/workers/base.py +15 -17
  111. prefect/workers/process.py +3 -8
  112. prefect/workers/server.py +2 -2
  113. {prefect_client-2.19.2.dist-info → prefect_client-3.0.0rc1.dist-info}/METADATA +22 -21
  114. prefect_client-3.0.0rc1.dist-info/RECORD +176 -0
  115. prefect/_internal/pydantic/_base_model.py +0 -51
  116. prefect/_internal/pydantic/_compat.py +0 -82
  117. prefect/_internal/pydantic/_flags.py +0 -20
  118. prefect/_internal/pydantic/_types.py +0 -8
  119. prefect/_internal/pydantic/utilities/__init__.py +0 -0
  120. prefect/_internal/pydantic/utilities/config_dict.py +0 -72
  121. prefect/_internal/pydantic/utilities/field_validator.py +0 -150
  122. prefect/_internal/pydantic/utilities/model_construct.py +0 -56
  123. prefect/_internal/pydantic/utilities/model_copy.py +0 -55
  124. prefect/_internal/pydantic/utilities/model_dump.py +0 -136
  125. prefect/_internal/pydantic/utilities/model_dump_json.py +0 -112
  126. prefect/_internal/pydantic/utilities/model_fields.py +0 -50
  127. prefect/_internal/pydantic/utilities/model_fields_set.py +0 -29
  128. prefect/_internal/pydantic/utilities/model_json_schema.py +0 -82
  129. prefect/_internal/pydantic/utilities/model_rebuild.py +0 -80
  130. prefect/_internal/pydantic/utilities/model_validate.py +0 -75
  131. prefect/_internal/pydantic/utilities/model_validate_json.py +0 -68
  132. prefect/_internal/pydantic/utilities/model_validator.py +0 -87
  133. prefect/_internal/pydantic/utilities/type_adapter.py +0 -71
  134. prefect/_vendor/__init__.py +0 -0
  135. prefect/_vendor/fastapi/__init__.py +0 -25
  136. prefect/_vendor/fastapi/applications.py +0 -946
  137. prefect/_vendor/fastapi/background.py +0 -3
  138. prefect/_vendor/fastapi/concurrency.py +0 -44
  139. prefect/_vendor/fastapi/datastructures.py +0 -58
  140. prefect/_vendor/fastapi/dependencies/__init__.py +0 -0
  141. prefect/_vendor/fastapi/dependencies/models.py +0 -64
  142. prefect/_vendor/fastapi/dependencies/utils.py +0 -877
  143. prefect/_vendor/fastapi/encoders.py +0 -177
  144. prefect/_vendor/fastapi/exception_handlers.py +0 -40
  145. prefect/_vendor/fastapi/exceptions.py +0 -46
  146. prefect/_vendor/fastapi/logger.py +0 -3
  147. prefect/_vendor/fastapi/middleware/__init__.py +0 -1
  148. prefect/_vendor/fastapi/middleware/asyncexitstack.py +0 -25
  149. prefect/_vendor/fastapi/middleware/cors.py +0 -3
  150. prefect/_vendor/fastapi/middleware/gzip.py +0 -3
  151. prefect/_vendor/fastapi/middleware/httpsredirect.py +0 -3
  152. prefect/_vendor/fastapi/middleware/trustedhost.py +0 -3
  153. prefect/_vendor/fastapi/middleware/wsgi.py +0 -3
  154. prefect/_vendor/fastapi/openapi/__init__.py +0 -0
  155. prefect/_vendor/fastapi/openapi/constants.py +0 -2
  156. prefect/_vendor/fastapi/openapi/docs.py +0 -203
  157. prefect/_vendor/fastapi/openapi/models.py +0 -480
  158. prefect/_vendor/fastapi/openapi/utils.py +0 -485
  159. prefect/_vendor/fastapi/param_functions.py +0 -340
  160. prefect/_vendor/fastapi/params.py +0 -453
  161. prefect/_vendor/fastapi/requests.py +0 -4
  162. prefect/_vendor/fastapi/responses.py +0 -40
  163. prefect/_vendor/fastapi/routing.py +0 -1331
  164. prefect/_vendor/fastapi/security/__init__.py +0 -15
  165. prefect/_vendor/fastapi/security/api_key.py +0 -98
  166. prefect/_vendor/fastapi/security/base.py +0 -6
  167. prefect/_vendor/fastapi/security/http.py +0 -172
  168. prefect/_vendor/fastapi/security/oauth2.py +0 -227
  169. prefect/_vendor/fastapi/security/open_id_connect_url.py +0 -34
  170. prefect/_vendor/fastapi/security/utils.py +0 -10
  171. prefect/_vendor/fastapi/staticfiles.py +0 -1
  172. prefect/_vendor/fastapi/templating.py +0 -3
  173. prefect/_vendor/fastapi/testclient.py +0 -1
  174. prefect/_vendor/fastapi/types.py +0 -3
  175. prefect/_vendor/fastapi/utils.py +0 -235
  176. prefect/_vendor/fastapi/websockets.py +0 -7
  177. prefect/_vendor/starlette/__init__.py +0 -1
  178. prefect/_vendor/starlette/_compat.py +0 -28
  179. prefect/_vendor/starlette/_exception_handler.py +0 -80
  180. prefect/_vendor/starlette/_utils.py +0 -88
  181. prefect/_vendor/starlette/applications.py +0 -261
  182. prefect/_vendor/starlette/authentication.py +0 -159
  183. prefect/_vendor/starlette/background.py +0 -43
  184. prefect/_vendor/starlette/concurrency.py +0 -59
  185. prefect/_vendor/starlette/config.py +0 -151
  186. prefect/_vendor/starlette/convertors.py +0 -87
  187. prefect/_vendor/starlette/datastructures.py +0 -707
  188. prefect/_vendor/starlette/endpoints.py +0 -130
  189. prefect/_vendor/starlette/exceptions.py +0 -60
  190. prefect/_vendor/starlette/formparsers.py +0 -276
  191. prefect/_vendor/starlette/middleware/__init__.py +0 -17
  192. prefect/_vendor/starlette/middleware/authentication.py +0 -52
  193. prefect/_vendor/starlette/middleware/base.py +0 -220
  194. prefect/_vendor/starlette/middleware/cors.py +0 -176
  195. prefect/_vendor/starlette/middleware/errors.py +0 -265
  196. prefect/_vendor/starlette/middleware/exceptions.py +0 -74
  197. prefect/_vendor/starlette/middleware/gzip.py +0 -113
  198. prefect/_vendor/starlette/middleware/httpsredirect.py +0 -19
  199. prefect/_vendor/starlette/middleware/sessions.py +0 -82
  200. prefect/_vendor/starlette/middleware/trustedhost.py +0 -64
  201. prefect/_vendor/starlette/middleware/wsgi.py +0 -147
  202. prefect/_vendor/starlette/requests.py +0 -328
  203. prefect/_vendor/starlette/responses.py +0 -347
  204. prefect/_vendor/starlette/routing.py +0 -933
  205. prefect/_vendor/starlette/schemas.py +0 -154
  206. prefect/_vendor/starlette/staticfiles.py +0 -248
  207. prefect/_vendor/starlette/status.py +0 -199
  208. prefect/_vendor/starlette/templating.py +0 -231
  209. prefect/_vendor/starlette/testclient.py +0 -804
  210. prefect/_vendor/starlette/types.py +0 -30
  211. prefect/_vendor/starlette/websockets.py +0 -193
  212. prefect/agent.py +0 -698
  213. prefect/deployments/deployments.py +0 -1042
  214. prefect/deprecated/__init__.py +0 -0
  215. prefect/deprecated/data_documents.py +0 -350
  216. prefect/deprecated/packaging/__init__.py +0 -12
  217. prefect/deprecated/packaging/base.py +0 -96
  218. prefect/deprecated/packaging/docker.py +0 -146
  219. prefect/deprecated/packaging/file.py +0 -92
  220. prefect/deprecated/packaging/orion.py +0 -80
  221. prefect/deprecated/packaging/serializers.py +0 -171
  222. prefect/events/instrument.py +0 -135
  223. prefect/infrastructure/base.py +0 -323
  224. prefect/infrastructure/container.py +0 -818
  225. prefect/infrastructure/kubernetes.py +0 -920
  226. prefect/infrastructure/process.py +0 -289
  227. prefect/new_task_engine.py +0 -423
  228. prefect/pydantic/__init__.py +0 -76
  229. prefect/pydantic/main.py +0 -39
  230. prefect/software/__init__.py +0 -2
  231. prefect/software/base.py +0 -50
  232. prefect/software/conda.py +0 -199
  233. prefect/software/pip.py +0 -122
  234. prefect/software/python.py +0 -52
  235. prefect/workers/block.py +0 -218
  236. prefect_client-2.19.2.dist-info/RECORD +0 -292
  237. {prefect_client-2.19.2.dist-info → prefect_client-3.0.0rc1.dist-info}/LICENSE +0 -0
  238. {prefect_client-2.19.2.dist-info → prefect_client-3.0.0rc1.dist-info}/WHEEL +0 -0
  239. {prefect_client-2.19.2.dist-info → prefect_client-3.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -1,80 +0,0 @@
1
- import typing
2
-
3
- from typing_extensions import Self
4
-
5
- from prefect._internal.pydantic._base_model import BaseModel
6
- from prefect._internal.pydantic._flags import USE_V2_MODELS
7
-
8
- T = typing.TypeVar("T", bound="BaseModel")
9
-
10
-
11
- def model_rebuild(
12
- model_instance: typing.Type[T],
13
- *,
14
- force: bool = False,
15
- raise_errors: bool = True,
16
- _parent_namespace_depth: int = 2,
17
- _types_namespace: typing.Optional[typing.Dict[str, typing.Any]] = None,
18
- ) -> typing.Optional[bool]:
19
- """Try to rebuild the pydantic-core schema for the model.
20
-
21
- This may be necessary when one of the annotations is a ForwardRef which could not be resolved during
22
- the initial attempt to build the schema, and automatic rebuilding fails.
23
-
24
- Args:
25
- force: Whether to force the rebuilding of the model schema, defaults to `False`.
26
- raise_errors: Whether to raise errors, defaults to `True`.
27
- _parent_namespace_depth: The depth level of the parent namespace, defaults to 2.
28
- _types_namespace: The types namespace, defaults to `None`.
29
-
30
- Returns:
31
- Returns `None` if the schema is already "complete" and rebuilding was not required.
32
- If rebuilding _was_ required, returns `True` if rebuilding was successful, otherwise `False`.
33
- """
34
-
35
- if USE_V2_MODELS:
36
- return model_instance.model_rebuild(
37
- force=force,
38
- raise_errors=raise_errors,
39
- _parent_namespace_depth=_parent_namespace_depth,
40
- _types_namespace=_types_namespace,
41
- )
42
- else:
43
- return getattr(model_instance, "update_forward_refs")()
44
-
45
-
46
- class ModelRebuildMixin(BaseModel):
47
- @classmethod
48
- def model_rebuild(
49
- cls: typing.Type["Self"],
50
- *,
51
- force: bool = False,
52
- raise_errors: bool = True,
53
- _parent_namespace_depth: int = 2,
54
- _types_namespace: typing.Optional[typing.Dict[str, typing.Any]] = None,
55
- ) -> typing.Optional[bool]:
56
- """Try to rebuild the pydantic-core schema for the model.
57
-
58
- This may be necessary when one of the annotations is a ForwardRef which could not be resolved during
59
- the initial attempt to build the schema, and automatic rebuilding fails.
60
-
61
- Args:
62
- force: Whether to force the rebuilding of the model schema, defaults to `False`.
63
- raise_errors: Whether to raise errors, defaults to `True`.
64
- _parent_namespace_depth: The depth level of the parent namespace, defaults to 2.
65
- _types_namespace: The types namespace, defaults to `None`.
66
-
67
- Returns:
68
- Returns `None` if the schema is already "complete" and rebuilding was not required.
69
- If rebuilding _was_ required, returns `True` if rebuilding was successful, otherwise `False`.
70
- """
71
- return model_rebuild(
72
- cls,
73
- force=force,
74
- raise_errors=raise_errors,
75
- _parent_namespace_depth=_parent_namespace_depth,
76
- _types_namespace=_types_namespace,
77
- )
78
-
79
-
80
- __all__ = ["model_rebuild", "ModelRebuildMixin"]
@@ -1,75 +0,0 @@
1
- import typing
2
-
3
- from typing_extensions import Self
4
-
5
- from prefect._internal.pydantic._base_model import BaseModel
6
- from prefect._internal.pydantic._flags import USE_V2_MODELS
7
-
8
- T = typing.TypeVar("T", bound="BaseModel")
9
-
10
-
11
- def model_validate(
12
- model_instance: typing.Type[T],
13
- obj: typing.Any,
14
- *,
15
- strict: typing.Optional[bool] = False,
16
- from_attributes: typing.Optional[bool] = False,
17
- context: typing.Optional[typing.Dict[str, typing.Any]] = None,
18
- ) -> T:
19
- """
20
- Validate a pydantic model instance.
21
-
22
- Args:
23
- obj: The object to validate.
24
- strict: Whether to enforce types strictly.
25
- from_attributes: Whether to extract data from object attributes.
26
- context: Additional context to pass to the validator.
27
-
28
- Raises:
29
- ValidationError: If the object could not be validated.
30
-
31
- Returns:
32
- The validated model instance.
33
- """
34
- if USE_V2_MODELS:
35
- return model_instance.model_validate(
36
- obj,
37
- strict=strict,
38
- from_attributes=from_attributes,
39
- context=context,
40
- )
41
- else:
42
- return getattr(model_instance, "parse_obj")(obj)
43
-
44
-
45
- class ModelValidateMixin(BaseModel):
46
- @classmethod
47
- def model_validate(
48
- cls: typing.Type["Self"],
49
- obj: typing.Any,
50
- *,
51
- strict: typing.Optional[bool] = False,
52
- from_attributes: typing.Optional[bool] = False,
53
- context: typing.Optional[typing.Dict[str, typing.Any]] = None,
54
- ) -> "Self":
55
- """
56
- Validate a pydantic model instance.
57
-
58
- Args:
59
- obj: The object to validate.
60
- strict: Whether to enforce types strictly.
61
- from_attributes: Whether to extract data from object attributes.
62
- context: Additional context to pass to the validator.
63
-
64
- Raises:
65
- ValidationError: If the object could not be validated.
66
-
67
- Returns:
68
- The validated model instance.
69
- """
70
- return model_validate(
71
- cls, obj, strict=strict, from_attributes=from_attributes, context=context
72
- )
73
-
74
-
75
- __all__ = ["model_validate"]
@@ -1,68 +0,0 @@
1
- import typing
2
-
3
- from typing_extensions import Self
4
-
5
- from prefect._internal.pydantic._base_model import BaseModel
6
- from prefect._internal.pydantic._flags import USE_V2_MODELS
7
-
8
- T = typing.TypeVar("T", bound="BaseModel")
9
-
10
-
11
- def model_validate_json(
12
- model: typing.Type[T],
13
- json_data: typing.Union[str, bytes, bytearray],
14
- *,
15
- strict: typing.Optional[bool] = False,
16
- context: typing.Optional[typing.Dict[str, typing.Any]] = None,
17
- ) -> T:
18
- """
19
- Validate the given JSON data against the Pydantic model.
20
-
21
- Args:
22
- json_data: The JSON data to validate.
23
- strict: Whether to enforce types strictly.
24
- context: Extra variables to pass to the validator.
25
-
26
- Returns:
27
- The validated Pydantic model.
28
-
29
- Raises:
30
- ValueError: If `json_data` is not a JSON string.
31
- """
32
- if USE_V2_MODELS:
33
- return model.model_validate_json(
34
- json_data,
35
- strict=strict,
36
- context=context,
37
- )
38
- else:
39
- return getattr(model, "parse_raw")(json_data)
40
-
41
-
42
- class ModelValidateJsonMixin(BaseModel):
43
- @classmethod
44
- def model_validate_json(
45
- cls: typing.Type["Self"],
46
- json_data: typing.Union[str, bytes, bytearray],
47
- *,
48
- strict: typing.Optional[bool] = False,
49
- context: typing.Optional[typing.Dict[str, typing.Any]] = None,
50
- ) -> "Self":
51
- """
52
- Validate the given JSON data against the Pydantic model.
53
-
54
- Args:
55
- json_data: The JSON data to validate.
56
- strict: Whether to enforce types strictly.
57
- context: Extra variables to pass to the validator.
58
-
59
- Returns:
60
- The validated Pydantic model.
61
-
62
- Raises:
63
- ValueError: If `json_data` is not a JSON string.
64
- """
65
- return model_validate_json(cls, json_data, strict=strict, context=context)
66
-
67
-
68
- __all__ = ["model_validate_json", "ModelValidateJsonMixin"]
@@ -1,87 +0,0 @@
1
- import functools
2
- from typing import TYPE_CHECKING, Any, Callable, Literal, Optional, TypeVar
3
-
4
- from prefect._internal.pydantic._flags import HAS_PYDANTIC_V2, USE_V2_MODELS
5
-
6
- T = TypeVar("T", bound=Callable[..., Any])
7
-
8
- if TYPE_CHECKING:
9
- from prefect._internal.pydantic._compat import BaseModel
10
-
11
-
12
- def model_validator(
13
- _func: Optional[Callable] = None,
14
- *,
15
- mode: Literal["wrap", "before", "after"] = "before", # v2 only
16
- ) -> Any:
17
- """Usage docs: https://docs.pydantic.dev/2.6/concepts/validators/#model-validators
18
-
19
- A decorator designed for Pydantic model methods to facilitate additional validations.
20
- It can be applied to instance methods, class methods, or static methods of a class,
21
- wrapping around the designated function to inject validation logic.
22
-
23
- The `model_validator` does not differentiate between the types of methods it decorates
24
- (instance, class, or static methods). It generically wraps the given function,
25
- allowing the class's mechanism to determine how the method is treated
26
- (e.g., passing `self` for instance methods or `cls` for class methods).
27
-
28
- The actual handling of method types (instance, class, or static) is governed by the class
29
- definition itself, using Python's standard `@classmethod` and `@staticmethod` decorators
30
- where appropriate. This decorator simply intercepts the method call, allowing for custom
31
- validation logic before, after, or wrapping the original method call, depending on the
32
- `mode` parameter.
33
-
34
- !!! note Replacing Pydantic V1 `pre=True` kwarg:
35
- To replace a @root_validator that uses Pydantic V1's `pre=True` parameter, e.g. `@root_validator('a', pre=True)`,
36
- you can use the @model_validator with the `mode='before'` parameter, (and also add a check that the field is not None, if necessary).
37
- This will map to the `pre` parameter of `root_validator` in Pydantic V1, if the value is `True`.
38
-
39
- !!! note Replacing Pydantic V1 `skip_on_failure=True` kwarg:
40
- To replace a @root_validator that uses Pydantic V1's `skip_on_failure=True` parameter, e.g. `@root_validator('a', skip_on_failure=True)`,
41
- we'll simply remove it. Pydantic V2 does not have an equivalent parameter, and we use it in only 3 places in Prefect, none of which are critical.
42
-
43
- Args:
44
- _func: The function to be decorated. If None, the decorator is applied with parameters.
45
- mode: Specifies when the validation should occur. 'before' or 'after' are for v1 compatibility,
46
- 'wrap' introduces v2 behavior where the validation wraps the original call.
47
- pre: (v1 only) If True, the validator is called before Pydantic's own validators.
48
- skip_on_failure: (v1 only) If True, skips validation if an earlier validation failed.
49
-
50
- Returns:
51
- The decorated function with added validation logic.
52
-
53
- Note:
54
- - The behavior of the decorator changes depending on the version of Pydantic being used.
55
- - The specific logic for validation should be defined within the decorated function.
56
- """
57
-
58
- def decorator(validate_func: T) -> T:
59
- if USE_V2_MODELS:
60
- from pydantic import model_validator
61
-
62
- return model_validator(
63
- mode=mode,
64
- )(validate_func) # type: ignore
65
-
66
- elif HAS_PYDANTIC_V2:
67
- from pydantic.v1 import root_validator
68
-
69
- else:
70
- from pydantic import root_validator
71
-
72
- @functools.wraps(validate_func)
73
- def wrapper(
74
- cls: "BaseModel",
75
- v: Any,
76
- ) -> Any:
77
- return validate_func(cls, v)
78
-
79
- pre: bool = mode == "before"
80
-
81
- return root_validator(
82
- pre=pre,
83
- )(wrapper) # type: ignore
84
-
85
- if _func is None:
86
- return decorator
87
- return decorator(_func)
@@ -1,71 +0,0 @@
1
- import typing
2
-
3
- from prefect._internal.pydantic._flags import USE_V2_MODELS
4
-
5
- T = typing.TypeVar("T")
6
-
7
- if USE_V2_MODELS:
8
- from pydantic import TypeAdapter # type: ignore
9
-
10
- else:
11
- from pydantic import parse_obj_as # type: ignore
12
-
13
- class TypeAdapter(typing.Generic[T]):
14
- """
15
- Type adapters provide a flexible way to perform validation and serialization based on a Python type.
16
-
17
- A `TypeAdapter` instance exposes some of the functionality from `BaseModel` instance methods
18
- for types that do not have such methods (such as dataclasses, primitive types, and more).
19
-
20
- **Note:** `TypeAdapter` instances are not types, and cannot be used as type annotations for fields.
21
-
22
- Attributes:
23
- core_schema: The core schema for the type.
24
- validator (SchemaValidator): The schema validator for the type.
25
- serializer: The schema serializer for the type.
26
- """
27
-
28
- def __init__(self, type_: typing.Union[T, typing.Type[T]]) -> None:
29
- self.type_ = type_
30
-
31
- def validate_python(
32
- self,
33
- __object: typing.Any,
34
- /,
35
- *,
36
- strict: typing.Optional[bool] = None,
37
- from_attributes: typing.Optional[bool] = None,
38
- context: typing.Optional[typing.Dict[str, typing.Any]] = None,
39
- ) -> T:
40
- return parse_obj_as(self.type_, __object) # type: ignore
41
-
42
-
43
- def validate_python(
44
- type_: typing.Union[T, typing.Type[T]],
45
- __object: typing.Any,
46
- /,
47
- *,
48
- strict: typing.Optional[bool] = None,
49
- from_attributes: typing.Optional[bool] = None,
50
- context: typing.Optional[typing.Dict[str, typing.Any]] = None,
51
- ) -> T:
52
- """Validate a Python object against the model.
53
-
54
- Args:
55
- type_: The type to validate against.
56
- __object: The Python object to validate against the model.
57
- strict: Whether to strictly check types.
58
- from_attributes: Whether to extract data from object attributes.
59
- context: Additional context to pass to the validator.
60
-
61
- !!! note
62
- When using `TypeAdapter` with a Pydantic `dataclass`, the use of the `from_attributes`
63
- argument is not supported.
64
-
65
- Returns:
66
- The validated object.
67
- """
68
- return TypeAdapter(type_).validate_python(__object)
69
-
70
-
71
- __all__ = ["TypeAdapter", "validate_python"]
File without changes
@@ -1,25 +0,0 @@
1
- """FastAPI framework, high performance, easy to learn, fast to code, ready for production"""
2
-
3
- __version__ = "0.99.1"
4
-
5
- from prefect._vendor.starlette import status as status
6
-
7
- from .applications import FastAPI as FastAPI
8
- from .background import BackgroundTasks as BackgroundTasks
9
- from .datastructures import UploadFile as UploadFile
10
- from .exceptions import HTTPException as HTTPException
11
- from .exceptions import WebSocketException as WebSocketException
12
- from .param_functions import Body as Body
13
- from .param_functions import Cookie as Cookie
14
- from .param_functions import Depends as Depends
15
- from .param_functions import File as File
16
- from .param_functions import Form as Form
17
- from .param_functions import Header as Header
18
- from .param_functions import Path as Path
19
- from .param_functions import Query as Query
20
- from .param_functions import Security as Security
21
- from .requests import Request as Request
22
- from .responses import Response as Response
23
- from .routing import APIRouter as APIRouter
24
- from .websockets import WebSocket as WebSocket
25
- from .websockets import WebSocketDisconnect as WebSocketDisconnect