prefect-client 2.20.4__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.
- prefect/__init__.py +74 -110
- prefect/_internal/compatibility/deprecated.py +6 -115
- prefect/_internal/compatibility/experimental.py +4 -79
- prefect/_internal/compatibility/migration.py +166 -0
- prefect/_internal/concurrency/__init__.py +2 -2
- prefect/_internal/concurrency/api.py +1 -35
- prefect/_internal/concurrency/calls.py +0 -6
- prefect/_internal/concurrency/cancellation.py +0 -3
- prefect/_internal/concurrency/event_loop.py +0 -20
- prefect/_internal/concurrency/inspection.py +3 -3
- prefect/_internal/concurrency/primitives.py +1 -0
- prefect/_internal/concurrency/services.py +23 -0
- prefect/_internal/concurrency/threads.py +35 -0
- prefect/_internal/concurrency/waiters.py +0 -28
- prefect/_internal/integrations.py +7 -0
- prefect/_internal/pydantic/__init__.py +0 -45
- prefect/_internal/pydantic/annotations/pendulum.py +2 -2
- prefect/_internal/pydantic/v1_schema.py +21 -22
- prefect/_internal/pydantic/v2_schema.py +0 -2
- prefect/_internal/pydantic/v2_validated_func.py +18 -23
- prefect/_internal/pytz.py +1 -1
- prefect/_internal/retries.py +61 -0
- prefect/_internal/schemas/bases.py +45 -177
- prefect/_internal/schemas/fields.py +1 -43
- prefect/_internal/schemas/validators.py +47 -233
- prefect/agent.py +3 -695
- prefect/artifacts.py +173 -14
- prefect/automations.py +39 -4
- prefect/blocks/abstract.py +1 -1
- prefect/blocks/core.py +405 -153
- prefect/blocks/fields.py +2 -57
- prefect/blocks/notifications.py +43 -28
- prefect/blocks/redis.py +168 -0
- prefect/blocks/system.py +67 -20
- prefect/blocks/webhook.py +2 -9
- prefect/cache_policies.py +239 -0
- prefect/client/__init__.py +4 -0
- prefect/client/base.py +33 -27
- prefect/client/cloud.py +65 -20
- prefect/client/collections.py +1 -1
- prefect/client/orchestration.py +650 -442
- prefect/client/schemas/actions.py +115 -100
- prefect/client/schemas/filters.py +46 -52
- prefect/client/schemas/objects.py +228 -178
- prefect/client/schemas/responses.py +18 -36
- prefect/client/schemas/schedules.py +55 -36
- prefect/client/schemas/sorting.py +2 -0
- prefect/client/subscriptions.py +8 -7
- prefect/client/types/flexible_schedule_list.py +11 -0
- prefect/client/utilities.py +9 -6
- prefect/concurrency/asyncio.py +60 -11
- prefect/concurrency/context.py +24 -0
- prefect/concurrency/events.py +2 -2
- prefect/concurrency/services.py +46 -16
- prefect/concurrency/sync.py +51 -7
- prefect/concurrency/v1/asyncio.py +143 -0
- prefect/concurrency/v1/context.py +27 -0
- prefect/concurrency/v1/events.py +61 -0
- prefect/concurrency/v1/services.py +116 -0
- prefect/concurrency/v1/sync.py +92 -0
- prefect/context.py +246 -149
- prefect/deployments/__init__.py +33 -18
- prefect/deployments/base.py +10 -15
- prefect/deployments/deployments.py +2 -1048
- prefect/deployments/flow_runs.py +178 -0
- prefect/deployments/runner.py +72 -173
- prefect/deployments/schedules.py +31 -25
- prefect/deployments/steps/__init__.py +0 -1
- prefect/deployments/steps/core.py +7 -0
- prefect/deployments/steps/pull.py +15 -21
- prefect/deployments/steps/utility.py +2 -1
- prefect/docker/__init__.py +20 -0
- prefect/docker/docker_image.py +82 -0
- prefect/engine.py +15 -2475
- prefect/events/actions.py +17 -23
- prefect/events/cli/automations.py +20 -7
- prefect/events/clients.py +142 -80
- prefect/events/filters.py +14 -18
- prefect/events/related.py +74 -75
- prefect/events/schemas/__init__.py +0 -5
- prefect/events/schemas/automations.py +55 -46
- prefect/events/schemas/deployment_triggers.py +7 -197
- prefect/events/schemas/events.py +46 -65
- prefect/events/schemas/labelling.py +10 -14
- prefect/events/utilities.py +4 -5
- prefect/events/worker.py +23 -8
- prefect/exceptions.py +15 -0
- prefect/filesystems.py +30 -529
- prefect/flow_engine.py +827 -0
- prefect/flow_runs.py +379 -7
- prefect/flows.py +470 -360
- prefect/futures.py +382 -331
- prefect/infrastructure/__init__.py +5 -26
- prefect/infrastructure/base.py +3 -320
- prefect/infrastructure/provisioners/__init__.py +5 -3
- prefect/infrastructure/provisioners/cloud_run.py +13 -8
- prefect/infrastructure/provisioners/container_instance.py +14 -9
- prefect/infrastructure/provisioners/ecs.py +10 -8
- prefect/infrastructure/provisioners/modal.py +8 -5
- prefect/input/__init__.py +4 -0
- prefect/input/actions.py +2 -4
- prefect/input/run_input.py +9 -9
- prefect/logging/formatters.py +2 -4
- prefect/logging/handlers.py +9 -14
- prefect/logging/loggers.py +5 -5
- prefect/main.py +72 -0
- prefect/plugins.py +2 -64
- prefect/profiles.toml +16 -2
- prefect/records/__init__.py +1 -0
- prefect/records/base.py +223 -0
- prefect/records/filesystem.py +207 -0
- prefect/records/memory.py +178 -0
- prefect/records/result_store.py +64 -0
- prefect/results.py +577 -504
- prefect/runner/runner.py +117 -47
- prefect/runner/server.py +32 -34
- prefect/runner/storage.py +3 -12
- prefect/runner/submit.py +2 -10
- prefect/runner/utils.py +2 -2
- prefect/runtime/__init__.py +1 -0
- prefect/runtime/deployment.py +1 -0
- prefect/runtime/flow_run.py +40 -5
- prefect/runtime/task_run.py +1 -0
- prefect/serializers.py +28 -39
- prefect/server/api/collections_data/views/aggregate-worker-metadata.json +5 -14
- prefect/settings.py +209 -332
- prefect/states.py +160 -63
- prefect/task_engine.py +1478 -57
- prefect/task_runners.py +383 -287
- prefect/task_runs.py +240 -0
- prefect/task_worker.py +463 -0
- prefect/tasks.py +684 -374
- prefect/transactions.py +410 -0
- prefect/types/__init__.py +72 -86
- prefect/types/entrypoint.py +13 -0
- prefect/utilities/annotations.py +4 -3
- prefect/utilities/asyncutils.py +227 -148
- prefect/utilities/callables.py +137 -45
- prefect/utilities/collections.py +134 -86
- prefect/utilities/dispatch.py +27 -14
- prefect/utilities/dockerutils.py +11 -4
- prefect/utilities/engine.py +186 -32
- prefect/utilities/filesystem.py +4 -5
- prefect/utilities/importtools.py +26 -27
- prefect/utilities/pydantic.py +128 -38
- prefect/utilities/schema_tools/hydration.py +18 -1
- prefect/utilities/schema_tools/validation.py +30 -0
- prefect/utilities/services.py +35 -9
- prefect/utilities/templating.py +12 -2
- prefect/utilities/timeout.py +20 -5
- prefect/utilities/urls.py +195 -0
- prefect/utilities/visualization.py +1 -0
- prefect/variables.py +78 -59
- prefect/workers/__init__.py +0 -1
- prefect/workers/base.py +237 -244
- prefect/workers/block.py +5 -226
- prefect/workers/cloud.py +6 -0
- prefect/workers/process.py +265 -12
- prefect/workers/server.py +29 -11
- {prefect_client-2.20.4.dist-info → prefect_client-3.0.0.dist-info}/METADATA +28 -24
- prefect_client-3.0.0.dist-info/RECORD +201 -0
- {prefect_client-2.20.4.dist-info → prefect_client-3.0.0.dist-info}/WHEEL +1 -1
- prefect/_internal/pydantic/_base_model.py +0 -51
- prefect/_internal/pydantic/_compat.py +0 -82
- prefect/_internal/pydantic/_flags.py +0 -20
- prefect/_internal/pydantic/_types.py +0 -8
- prefect/_internal/pydantic/utilities/config_dict.py +0 -72
- prefect/_internal/pydantic/utilities/field_validator.py +0 -150
- prefect/_internal/pydantic/utilities/model_construct.py +0 -56
- prefect/_internal/pydantic/utilities/model_copy.py +0 -55
- prefect/_internal/pydantic/utilities/model_dump.py +0 -136
- prefect/_internal/pydantic/utilities/model_dump_json.py +0 -112
- prefect/_internal/pydantic/utilities/model_fields.py +0 -50
- prefect/_internal/pydantic/utilities/model_fields_set.py +0 -29
- prefect/_internal/pydantic/utilities/model_json_schema.py +0 -82
- prefect/_internal/pydantic/utilities/model_rebuild.py +0 -80
- prefect/_internal/pydantic/utilities/model_validate.py +0 -75
- prefect/_internal/pydantic/utilities/model_validate_json.py +0 -68
- prefect/_internal/pydantic/utilities/model_validator.py +0 -87
- prefect/_internal/pydantic/utilities/type_adapter.py +0 -71
- prefect/_vendor/fastapi/__init__.py +0 -25
- prefect/_vendor/fastapi/applications.py +0 -946
- prefect/_vendor/fastapi/background.py +0 -3
- prefect/_vendor/fastapi/concurrency.py +0 -44
- prefect/_vendor/fastapi/datastructures.py +0 -58
- prefect/_vendor/fastapi/dependencies/__init__.py +0 -0
- prefect/_vendor/fastapi/dependencies/models.py +0 -64
- prefect/_vendor/fastapi/dependencies/utils.py +0 -877
- prefect/_vendor/fastapi/encoders.py +0 -177
- prefect/_vendor/fastapi/exception_handlers.py +0 -40
- prefect/_vendor/fastapi/exceptions.py +0 -46
- prefect/_vendor/fastapi/logger.py +0 -3
- prefect/_vendor/fastapi/middleware/__init__.py +0 -1
- prefect/_vendor/fastapi/middleware/asyncexitstack.py +0 -25
- prefect/_vendor/fastapi/middleware/cors.py +0 -3
- prefect/_vendor/fastapi/middleware/gzip.py +0 -3
- prefect/_vendor/fastapi/middleware/httpsredirect.py +0 -3
- prefect/_vendor/fastapi/middleware/trustedhost.py +0 -3
- prefect/_vendor/fastapi/middleware/wsgi.py +0 -3
- prefect/_vendor/fastapi/openapi/__init__.py +0 -0
- prefect/_vendor/fastapi/openapi/constants.py +0 -2
- prefect/_vendor/fastapi/openapi/docs.py +0 -203
- prefect/_vendor/fastapi/openapi/models.py +0 -480
- prefect/_vendor/fastapi/openapi/utils.py +0 -485
- prefect/_vendor/fastapi/param_functions.py +0 -340
- prefect/_vendor/fastapi/params.py +0 -453
- prefect/_vendor/fastapi/py.typed +0 -0
- prefect/_vendor/fastapi/requests.py +0 -4
- prefect/_vendor/fastapi/responses.py +0 -40
- prefect/_vendor/fastapi/routing.py +0 -1331
- prefect/_vendor/fastapi/security/__init__.py +0 -15
- prefect/_vendor/fastapi/security/api_key.py +0 -98
- prefect/_vendor/fastapi/security/base.py +0 -6
- prefect/_vendor/fastapi/security/http.py +0 -172
- prefect/_vendor/fastapi/security/oauth2.py +0 -227
- prefect/_vendor/fastapi/security/open_id_connect_url.py +0 -34
- prefect/_vendor/fastapi/security/utils.py +0 -10
- prefect/_vendor/fastapi/staticfiles.py +0 -1
- prefect/_vendor/fastapi/templating.py +0 -3
- prefect/_vendor/fastapi/testclient.py +0 -1
- prefect/_vendor/fastapi/types.py +0 -3
- prefect/_vendor/fastapi/utils.py +0 -235
- prefect/_vendor/fastapi/websockets.py +0 -7
- prefect/_vendor/starlette/__init__.py +0 -1
- prefect/_vendor/starlette/_compat.py +0 -28
- prefect/_vendor/starlette/_exception_handler.py +0 -80
- prefect/_vendor/starlette/_utils.py +0 -88
- prefect/_vendor/starlette/applications.py +0 -261
- prefect/_vendor/starlette/authentication.py +0 -159
- prefect/_vendor/starlette/background.py +0 -43
- prefect/_vendor/starlette/concurrency.py +0 -59
- prefect/_vendor/starlette/config.py +0 -151
- prefect/_vendor/starlette/convertors.py +0 -87
- prefect/_vendor/starlette/datastructures.py +0 -707
- prefect/_vendor/starlette/endpoints.py +0 -130
- prefect/_vendor/starlette/exceptions.py +0 -60
- prefect/_vendor/starlette/formparsers.py +0 -276
- prefect/_vendor/starlette/middleware/__init__.py +0 -17
- prefect/_vendor/starlette/middleware/authentication.py +0 -52
- prefect/_vendor/starlette/middleware/base.py +0 -220
- prefect/_vendor/starlette/middleware/cors.py +0 -176
- prefect/_vendor/starlette/middleware/errors.py +0 -265
- prefect/_vendor/starlette/middleware/exceptions.py +0 -74
- prefect/_vendor/starlette/middleware/gzip.py +0 -113
- prefect/_vendor/starlette/middleware/httpsredirect.py +0 -19
- prefect/_vendor/starlette/middleware/sessions.py +0 -82
- prefect/_vendor/starlette/middleware/trustedhost.py +0 -64
- prefect/_vendor/starlette/middleware/wsgi.py +0 -147
- prefect/_vendor/starlette/py.typed +0 -0
- prefect/_vendor/starlette/requests.py +0 -328
- prefect/_vendor/starlette/responses.py +0 -347
- prefect/_vendor/starlette/routing.py +0 -933
- prefect/_vendor/starlette/schemas.py +0 -154
- prefect/_vendor/starlette/staticfiles.py +0 -248
- prefect/_vendor/starlette/status.py +0 -199
- prefect/_vendor/starlette/templating.py +0 -231
- prefect/_vendor/starlette/testclient.py +0 -804
- prefect/_vendor/starlette/types.py +0 -30
- prefect/_vendor/starlette/websockets.py +0 -193
- prefect/blocks/kubernetes.py +0 -119
- prefect/deprecated/__init__.py +0 -0
- prefect/deprecated/data_documents.py +0 -350
- prefect/deprecated/packaging/__init__.py +0 -12
- prefect/deprecated/packaging/base.py +0 -96
- prefect/deprecated/packaging/docker.py +0 -146
- prefect/deprecated/packaging/file.py +0 -92
- prefect/deprecated/packaging/orion.py +0 -80
- prefect/deprecated/packaging/serializers.py +0 -171
- prefect/events/instrument.py +0 -135
- prefect/infrastructure/container.py +0 -824
- prefect/infrastructure/kubernetes.py +0 -920
- prefect/infrastructure/process.py +0 -289
- prefect/manifests.py +0 -20
- prefect/new_flow_engine.py +0 -449
- prefect/new_task_engine.py +0 -423
- prefect/pydantic/__init__.py +0 -76
- prefect/pydantic/main.py +0 -39
- prefect/software/__init__.py +0 -2
- prefect/software/base.py +0 -50
- prefect/software/conda.py +0 -199
- prefect/software/pip.py +0 -122
- prefect/software/python.py +0 -52
- prefect/task_server.py +0 -322
- prefect_client-2.20.4.dist-info/RECORD +0 -294
- /prefect/{_internal/pydantic/utilities → client/types}/__init__.py +0 -0
- /prefect/{_vendor → concurrency/v1}/__init__.py +0 -0
- {prefect_client-2.20.4.dist-info → prefect_client-3.0.0.dist-info}/LICENSE +0 -0
- {prefect_client-2.20.4.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
|