|
2 | 2 |
|
3 | 3 | # nopycln: file |
4 | 4 | import datetime as dt |
| 5 | +import types |
| 6 | +import typing |
5 | 7 | from collections import defaultdict |
6 | 8 | from typing import ( |
7 | 9 | Any, |
|
20 | 22 | ) |
21 | 23 |
|
22 | 24 | import pydantic |
| 25 | +import typing_extensions |
23 | 26 |
|
24 | 27 | IS_PYDANTIC_V2 = pydantic.VERSION.startswith("2.") |
25 | 28 |
|
26 | 29 | if IS_PYDANTIC_V2: |
27 | | - from pydantic.v1.datetime_parse import parse_date as parse_date |
28 | | - from pydantic.v1.datetime_parse import parse_datetime as parse_datetime |
29 | | - from pydantic.v1.fields import ModelField as ModelField |
30 | | - from pydantic.v1.json import ENCODERS_BY_TYPE as encoders_by_type # type: ignore[attr-defined] |
31 | | - from pydantic.v1.typing import get_args as get_args |
32 | | - from pydantic.v1.typing import get_origin as get_origin |
33 | | - from pydantic.v1.typing import is_literal_type as is_literal_type |
34 | | - from pydantic.v1.typing import is_union as is_union |
| 30 | + from pydantic.fields import FieldInfo as FieldInfo |
| 31 | + |
| 32 | + ModelField = FieldInfo # type: ignore[assignment] |
| 33 | + encoders_by_type: Dict[Any, Callable[[Any], Any]] = {} |
| 34 | + get_args = typing_extensions.get_args |
| 35 | + get_origin = typing_extensions.get_origin |
| 36 | + |
| 37 | + def parse_date(value: Any) -> dt.date: |
| 38 | + return pydantic.TypeAdapter(dt.date).validate_python(value) # type: ignore[attr-defined] |
| 39 | + |
| 40 | + def parse_datetime(value: Any) -> dt.datetime: |
| 41 | + return pydantic.TypeAdapter(dt.datetime).validate_python(value) # type: ignore[attr-defined] |
| 42 | + |
| 43 | + def is_literal_type(type_: Any) -> bool: |
| 44 | + origin = typing_extensions.get_origin(type_) |
| 45 | + return origin in (typing.Literal, typing_extensions.Literal) |
| 46 | + |
| 47 | + def is_union(type_: Any) -> bool: |
| 48 | + origin = typing_extensions.get_origin(type_) |
| 49 | + return origin in (Union, types.UnionType) |
35 | 50 | else: |
36 | 51 | from pydantic.datetime_parse import parse_date as parse_date # type: ignore[no-redef] |
37 | 52 | from pydantic.datetime_parse import parse_datetime as parse_datetime # type: ignore[no-redef] |
| 53 | + from pydantic.fields import FieldInfo as FieldInfo |
38 | 54 | from pydantic.fields import ModelField as ModelField # type: ignore[attr-defined, no-redef] |
39 | 55 | from pydantic.json import ENCODERS_BY_TYPE as encoders_by_type # type: ignore[no-redef] |
40 | 56 | from pydantic.typing import get_args as get_args # type: ignore[no-redef] |
@@ -287,7 +303,7 @@ def decorator(func: AnyCallable) -> AnyCallable: |
287 | 303 | return decorator |
288 | 304 |
|
289 | 305 |
|
290 | | -PydanticField = Union[ModelField, pydantic.fields.FieldInfo] |
| 306 | +PydanticField = Union[ModelField, FieldInfo] |
291 | 307 |
|
292 | 308 |
|
293 | 309 | def _get_model_fields(model: Type["Model"]) -> Mapping[str, PydanticField]: |
|
0 commit comments