prefect-client 2.20.2__py3-none-any.whl → 3.0.0__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 (288) hide show
  1. prefect/__init__.py +74 -110
  2. prefect/_internal/compatibility/deprecated.py +6 -115
  3. prefect/_internal/compatibility/experimental.py +4 -79
  4. prefect/_internal/compatibility/migration.py +166 -0
  5. prefect/_internal/concurrency/__init__.py +2 -2
  6. prefect/_internal/concurrency/api.py +1 -35
  7. prefect/_internal/concurrency/calls.py +0 -6
  8. prefect/_internal/concurrency/cancellation.py +0 -3
  9. prefect/_internal/concurrency/event_loop.py +0 -20
  10. prefect/_internal/concurrency/inspection.py +3 -3
  11. prefect/_internal/concurrency/primitives.py +1 -0
  12. prefect/_internal/concurrency/services.py +23 -0
  13. prefect/_internal/concurrency/threads.py +35 -0
  14. prefect/_internal/concurrency/waiters.py +0 -28
  15. prefect/_internal/integrations.py +7 -0
  16. prefect/_internal/pydantic/__init__.py +0 -45
  17. prefect/_internal/pydantic/annotations/pendulum.py +2 -2
  18. prefect/_internal/pydantic/v1_schema.py +21 -22
  19. prefect/_internal/pydantic/v2_schema.py +0 -2
  20. prefect/_internal/pydantic/v2_validated_func.py +18 -23
  21. prefect/_internal/pytz.py +1 -1
  22. prefect/_internal/retries.py +61 -0
  23. prefect/_internal/schemas/bases.py +45 -177
  24. prefect/_internal/schemas/fields.py +1 -43
  25. prefect/_internal/schemas/validators.py +47 -233
  26. prefect/agent.py +3 -695
  27. prefect/artifacts.py +173 -14
  28. prefect/automations.py +39 -4
  29. prefect/blocks/abstract.py +1 -1
  30. prefect/blocks/core.py +423 -164
  31. prefect/blocks/fields.py +2 -57
  32. prefect/blocks/notifications.py +43 -28
  33. prefect/blocks/redis.py +168 -0
  34. prefect/blocks/system.py +67 -20
  35. prefect/blocks/webhook.py +2 -9
  36. prefect/cache_policies.py +239 -0
  37. prefect/client/__init__.py +4 -0
  38. prefect/client/base.py +33 -27
  39. prefect/client/cloud.py +65 -20
  40. prefect/client/collections.py +1 -1
  41. prefect/client/orchestration.py +667 -440
  42. prefect/client/schemas/actions.py +115 -100
  43. prefect/client/schemas/filters.py +46 -52
  44. prefect/client/schemas/objects.py +228 -178
  45. prefect/client/schemas/responses.py +18 -36
  46. prefect/client/schemas/schedules.py +55 -36
  47. prefect/client/schemas/sorting.py +2 -0
  48. prefect/client/subscriptions.py +8 -7
  49. prefect/client/types/flexible_schedule_list.py +11 -0
  50. prefect/client/utilities.py +9 -6
  51. prefect/concurrency/asyncio.py +60 -11
  52. prefect/concurrency/context.py +24 -0
  53. prefect/concurrency/events.py +2 -2
  54. prefect/concurrency/services.py +46 -16
  55. prefect/concurrency/sync.py +51 -7
  56. prefect/concurrency/v1/asyncio.py +143 -0
  57. prefect/concurrency/v1/context.py +27 -0
  58. prefect/concurrency/v1/events.py +61 -0
  59. prefect/concurrency/v1/services.py +116 -0
  60. prefect/concurrency/v1/sync.py +92 -0
  61. prefect/context.py +246 -149
  62. prefect/deployments/__init__.py +33 -18
  63. prefect/deployments/base.py +10 -15
  64. prefect/deployments/deployments.py +2 -1048
  65. prefect/deployments/flow_runs.py +178 -0
  66. prefect/deployments/runner.py +72 -173
  67. prefect/deployments/schedules.py +31 -25
  68. prefect/deployments/steps/__init__.py +0 -1
  69. prefect/deployments/steps/core.py +7 -0
  70. prefect/deployments/steps/pull.py +15 -21
  71. prefect/deployments/steps/utility.py +2 -1
  72. prefect/docker/__init__.py +20 -0
  73. prefect/docker/docker_image.py +82 -0
  74. prefect/engine.py +15 -2466
  75. prefect/events/actions.py +17 -23
  76. prefect/events/cli/automations.py +20 -7
  77. prefect/events/clients.py +142 -80
  78. prefect/events/filters.py +14 -18
  79. prefect/events/related.py +74 -75
  80. prefect/events/schemas/__init__.py +0 -5
  81. prefect/events/schemas/automations.py +55 -46
  82. prefect/events/schemas/deployment_triggers.py +7 -197
  83. prefect/events/schemas/events.py +46 -65
  84. prefect/events/schemas/labelling.py +10 -14
  85. prefect/events/utilities.py +4 -5
  86. prefect/events/worker.py +23 -8
  87. prefect/exceptions.py +15 -0
  88. prefect/filesystems.py +30 -529
  89. prefect/flow_engine.py +827 -0
  90. prefect/flow_runs.py +379 -7
  91. prefect/flows.py +470 -360
  92. prefect/futures.py +382 -331
  93. prefect/infrastructure/__init__.py +5 -26
  94. prefect/infrastructure/base.py +3 -320
  95. prefect/infrastructure/provisioners/__init__.py +5 -3
  96. prefect/infrastructure/provisioners/cloud_run.py +13 -8
  97. prefect/infrastructure/provisioners/container_instance.py +14 -9
  98. prefect/infrastructure/provisioners/ecs.py +10 -8
  99. prefect/infrastructure/provisioners/modal.py +8 -5
  100. prefect/input/__init__.py +4 -0
  101. prefect/input/actions.py +2 -4
  102. prefect/input/run_input.py +9 -9
  103. prefect/logging/formatters.py +2 -4
  104. prefect/logging/handlers.py +9 -14
  105. prefect/logging/loggers.py +5 -5
  106. prefect/main.py +72 -0
  107. prefect/plugins.py +2 -64
  108. prefect/profiles.toml +16 -2
  109. prefect/records/__init__.py +1 -0
  110. prefect/records/base.py +223 -0
  111. prefect/records/filesystem.py +207 -0
  112. prefect/records/memory.py +178 -0
  113. prefect/records/result_store.py +64 -0
  114. prefect/results.py +577 -504
  115. prefect/runner/runner.py +124 -51
  116. prefect/runner/server.py +32 -34
  117. prefect/runner/storage.py +3 -12
  118. prefect/runner/submit.py +2 -10
  119. prefect/runner/utils.py +2 -2
  120. prefect/runtime/__init__.py +1 -0
  121. prefect/runtime/deployment.py +1 -0
  122. prefect/runtime/flow_run.py +40 -5
  123. prefect/runtime/task_run.py +1 -0
  124. prefect/serializers.py +28 -39
  125. prefect/server/api/collections_data/views/aggregate-worker-metadata.json +5 -14
  126. prefect/settings.py +209 -332
  127. prefect/states.py +160 -63
  128. prefect/task_engine.py +1478 -57
  129. prefect/task_runners.py +383 -287
  130. prefect/task_runs.py +240 -0
  131. prefect/task_worker.py +463 -0
  132. prefect/tasks.py +684 -374
  133. prefect/transactions.py +410 -0
  134. prefect/types/__init__.py +72 -86
  135. prefect/types/entrypoint.py +13 -0
  136. prefect/utilities/annotations.py +4 -3
  137. prefect/utilities/asyncutils.py +227 -148
  138. prefect/utilities/callables.py +138 -48
  139. prefect/utilities/collections.py +134 -86
  140. prefect/utilities/dispatch.py +27 -14
  141. prefect/utilities/dockerutils.py +11 -4
  142. prefect/utilities/engine.py +186 -32
  143. prefect/utilities/filesystem.py +4 -5
  144. prefect/utilities/importtools.py +26 -27
  145. prefect/utilities/pydantic.py +128 -38
  146. prefect/utilities/schema_tools/hydration.py +18 -1
  147. prefect/utilities/schema_tools/validation.py +30 -0
  148. prefect/utilities/services.py +35 -9
  149. prefect/utilities/templating.py +12 -2
  150. prefect/utilities/timeout.py +20 -5
  151. prefect/utilities/urls.py +195 -0
  152. prefect/utilities/visualization.py +1 -0
  153. prefect/variables.py +78 -59
  154. prefect/workers/__init__.py +0 -1
  155. prefect/workers/base.py +237 -244
  156. prefect/workers/block.py +5 -226
  157. prefect/workers/cloud.py +6 -0
  158. prefect/workers/process.py +265 -12
  159. prefect/workers/server.py +29 -11
  160. {prefect_client-2.20.2.dist-info → prefect_client-3.0.0.dist-info}/METADATA +30 -26
  161. prefect_client-3.0.0.dist-info/RECORD +201 -0
  162. {prefect_client-2.20.2.dist-info → prefect_client-3.0.0.dist-info}/WHEEL +1 -1
  163. prefect/_internal/pydantic/_base_model.py +0 -51
  164. prefect/_internal/pydantic/_compat.py +0 -82
  165. prefect/_internal/pydantic/_flags.py +0 -20
  166. prefect/_internal/pydantic/_types.py +0 -8
  167. prefect/_internal/pydantic/utilities/config_dict.py +0 -72
  168. prefect/_internal/pydantic/utilities/field_validator.py +0 -150
  169. prefect/_internal/pydantic/utilities/model_construct.py +0 -56
  170. prefect/_internal/pydantic/utilities/model_copy.py +0 -55
  171. prefect/_internal/pydantic/utilities/model_dump.py +0 -136
  172. prefect/_internal/pydantic/utilities/model_dump_json.py +0 -112
  173. prefect/_internal/pydantic/utilities/model_fields.py +0 -50
  174. prefect/_internal/pydantic/utilities/model_fields_set.py +0 -29
  175. prefect/_internal/pydantic/utilities/model_json_schema.py +0 -82
  176. prefect/_internal/pydantic/utilities/model_rebuild.py +0 -80
  177. prefect/_internal/pydantic/utilities/model_validate.py +0 -75
  178. prefect/_internal/pydantic/utilities/model_validate_json.py +0 -68
  179. prefect/_internal/pydantic/utilities/model_validator.py +0 -87
  180. prefect/_internal/pydantic/utilities/type_adapter.py +0 -71
  181. prefect/_vendor/fastapi/__init__.py +0 -25
  182. prefect/_vendor/fastapi/applications.py +0 -946
  183. prefect/_vendor/fastapi/background.py +0 -3
  184. prefect/_vendor/fastapi/concurrency.py +0 -44
  185. prefect/_vendor/fastapi/datastructures.py +0 -58
  186. prefect/_vendor/fastapi/dependencies/__init__.py +0 -0
  187. prefect/_vendor/fastapi/dependencies/models.py +0 -64
  188. prefect/_vendor/fastapi/dependencies/utils.py +0 -877
  189. prefect/_vendor/fastapi/encoders.py +0 -177
  190. prefect/_vendor/fastapi/exception_handlers.py +0 -40
  191. prefect/_vendor/fastapi/exceptions.py +0 -46
  192. prefect/_vendor/fastapi/logger.py +0 -3
  193. prefect/_vendor/fastapi/middleware/__init__.py +0 -1
  194. prefect/_vendor/fastapi/middleware/asyncexitstack.py +0 -25
  195. prefect/_vendor/fastapi/middleware/cors.py +0 -3
  196. prefect/_vendor/fastapi/middleware/gzip.py +0 -3
  197. prefect/_vendor/fastapi/middleware/httpsredirect.py +0 -3
  198. prefect/_vendor/fastapi/middleware/trustedhost.py +0 -3
  199. prefect/_vendor/fastapi/middleware/wsgi.py +0 -3
  200. prefect/_vendor/fastapi/openapi/__init__.py +0 -0
  201. prefect/_vendor/fastapi/openapi/constants.py +0 -2
  202. prefect/_vendor/fastapi/openapi/docs.py +0 -203
  203. prefect/_vendor/fastapi/openapi/models.py +0 -480
  204. prefect/_vendor/fastapi/openapi/utils.py +0 -485
  205. prefect/_vendor/fastapi/param_functions.py +0 -340
  206. prefect/_vendor/fastapi/params.py +0 -453
  207. prefect/_vendor/fastapi/py.typed +0 -0
  208. prefect/_vendor/fastapi/requests.py +0 -4
  209. prefect/_vendor/fastapi/responses.py +0 -40
  210. prefect/_vendor/fastapi/routing.py +0 -1331
  211. prefect/_vendor/fastapi/security/__init__.py +0 -15
  212. prefect/_vendor/fastapi/security/api_key.py +0 -98
  213. prefect/_vendor/fastapi/security/base.py +0 -6
  214. prefect/_vendor/fastapi/security/http.py +0 -172
  215. prefect/_vendor/fastapi/security/oauth2.py +0 -227
  216. prefect/_vendor/fastapi/security/open_id_connect_url.py +0 -34
  217. prefect/_vendor/fastapi/security/utils.py +0 -10
  218. prefect/_vendor/fastapi/staticfiles.py +0 -1
  219. prefect/_vendor/fastapi/templating.py +0 -3
  220. prefect/_vendor/fastapi/testclient.py +0 -1
  221. prefect/_vendor/fastapi/types.py +0 -3
  222. prefect/_vendor/fastapi/utils.py +0 -235
  223. prefect/_vendor/fastapi/websockets.py +0 -7
  224. prefect/_vendor/starlette/__init__.py +0 -1
  225. prefect/_vendor/starlette/_compat.py +0 -28
  226. prefect/_vendor/starlette/_exception_handler.py +0 -80
  227. prefect/_vendor/starlette/_utils.py +0 -88
  228. prefect/_vendor/starlette/applications.py +0 -261
  229. prefect/_vendor/starlette/authentication.py +0 -159
  230. prefect/_vendor/starlette/background.py +0 -43
  231. prefect/_vendor/starlette/concurrency.py +0 -59
  232. prefect/_vendor/starlette/config.py +0 -151
  233. prefect/_vendor/starlette/convertors.py +0 -87
  234. prefect/_vendor/starlette/datastructures.py +0 -707
  235. prefect/_vendor/starlette/endpoints.py +0 -130
  236. prefect/_vendor/starlette/exceptions.py +0 -60
  237. prefect/_vendor/starlette/formparsers.py +0 -276
  238. prefect/_vendor/starlette/middleware/__init__.py +0 -17
  239. prefect/_vendor/starlette/middleware/authentication.py +0 -52
  240. prefect/_vendor/starlette/middleware/base.py +0 -220
  241. prefect/_vendor/starlette/middleware/cors.py +0 -176
  242. prefect/_vendor/starlette/middleware/errors.py +0 -265
  243. prefect/_vendor/starlette/middleware/exceptions.py +0 -74
  244. prefect/_vendor/starlette/middleware/gzip.py +0 -113
  245. prefect/_vendor/starlette/middleware/httpsredirect.py +0 -19
  246. prefect/_vendor/starlette/middleware/sessions.py +0 -82
  247. prefect/_vendor/starlette/middleware/trustedhost.py +0 -64
  248. prefect/_vendor/starlette/middleware/wsgi.py +0 -147
  249. prefect/_vendor/starlette/py.typed +0 -0
  250. prefect/_vendor/starlette/requests.py +0 -328
  251. prefect/_vendor/starlette/responses.py +0 -347
  252. prefect/_vendor/starlette/routing.py +0 -933
  253. prefect/_vendor/starlette/schemas.py +0 -154
  254. prefect/_vendor/starlette/staticfiles.py +0 -248
  255. prefect/_vendor/starlette/status.py +0 -199
  256. prefect/_vendor/starlette/templating.py +0 -231
  257. prefect/_vendor/starlette/testclient.py +0 -804
  258. prefect/_vendor/starlette/types.py +0 -30
  259. prefect/_vendor/starlette/websockets.py +0 -193
  260. prefect/blocks/kubernetes.py +0 -119
  261. prefect/deprecated/__init__.py +0 -0
  262. prefect/deprecated/data_documents.py +0 -350
  263. prefect/deprecated/packaging/__init__.py +0 -12
  264. prefect/deprecated/packaging/base.py +0 -96
  265. prefect/deprecated/packaging/docker.py +0 -146
  266. prefect/deprecated/packaging/file.py +0 -92
  267. prefect/deprecated/packaging/orion.py +0 -80
  268. prefect/deprecated/packaging/serializers.py +0 -171
  269. prefect/events/instrument.py +0 -135
  270. prefect/infrastructure/container.py +0 -824
  271. prefect/infrastructure/kubernetes.py +0 -920
  272. prefect/infrastructure/process.py +0 -289
  273. prefect/manifests.py +0 -20
  274. prefect/new_flow_engine.py +0 -449
  275. prefect/new_task_engine.py +0 -423
  276. prefect/pydantic/__init__.py +0 -76
  277. prefect/pydantic/main.py +0 -39
  278. prefect/software/__init__.py +0 -2
  279. prefect/software/base.py +0 -50
  280. prefect/software/conda.py +0 -199
  281. prefect/software/pip.py +0 -122
  282. prefect/software/python.py +0 -52
  283. prefect/task_server.py +0 -322
  284. prefect_client-2.20.2.dist-info/RECORD +0 -294
  285. /prefect/{_internal/pydantic/utilities → client/types}/__init__.py +0 -0
  286. /prefect/{_vendor → concurrency/v1}/__init__.py +0 -0
  287. {prefect_client-2.20.2.dist-info → prefect_client-3.0.0.dist-info}/LICENSE +0 -0
  288. {prefect_client-2.20.2.dist-info → prefect_client-3.0.0.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"]
@@ -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