Coverage for fast_depends/pydantic/_compat.py: 100%
66 statements
« prev ^ index » next coverage.py v7.17.3, created at 2026-11-13 05:19 +0000
« prev ^ index » next coverage.py v7.17.3, created at 2026-11-13 05:19 +0000
1import json 1klabmcndoefghij
2from collections.abc import Callable 1klabmcndoefghij
3from typing import Any 1klabmcndoefghij
5from pydantic import BaseModel, create_model 1klabmcndoefghij
6from pydantic.version import VERSION as PYDANTIC_VERSION 1klabmcndoefghij
8__all__ = ( 1klabmcndoefghij
9 "BaseModel",
10 "create_model",
11 "PYDANTIC_V2",
12 "get_config_base",
13 "ConfigDict",
14 "TypeAdapter",
15 "PydanticUserError",
16 "dump_json",
17)
20json_dumps: Callable[..., bytes] 1klabmcndoefghij
21orjson: Any 1klabmcndoefghij
22ujson: Any 1klabmcndoefghij
24try: 1klabmcndoefghij
25 import orjson as orjson_ 1klabmcndoefghij
26except ImportError: 1klabmcndoefghij
27 orjson = None 1klabmcndoefghij
28else:
29 orjson = orjson_ 1klabmcndoefghij
31try: 1klabmcndoefghij
32 import ujson as ujson_ 1klabmcndoefghij
33except ImportError: 1klabmcndoefghij
34 ujson = None 1klabmcndoefghij
35else:
36 ujson = ujson_ 1klabmcndoefghij
38if orjson: 1klabmcndoefghij
39 json_loads = orjson.loads 1klabmcndoefghij
40 json_dumps = orjson.dumps 1klabmcndoefghij
42elif ujson: 1klabmcndoefghij
43 json_loads = ujson.loads 1klabmcndoefghij
45 def json_dumps(*a: Any, **kw: Any) -> bytes: 1klabmcndoefghij
46 return ujson.dumps(*a, **kw).encode() # type: ignore[no-any-return] 1klabmcndoefghij
48else:
49 json_loads = json.loads 1klabmcndoefghij
51 def json_dumps(*a: Any, **kw: Any) -> bytes: 1klabmcndoefghij
52 return json.dumps(*a, **kw).encode() 1klabmcndoefghij
55PYDANTIC_V2 = PYDANTIC_VERSION.startswith("2.") 1klabmcndoefghij
57default_pydantic_config = {"arbitrary_types_allowed": True} 1klabmcndoefghij
59# isort: off
60if PYDANTIC_V2: 1klabmcndoefghij
61 from pydantic import ConfigDict, TypeAdapter 1abcdefghij
62 from pydantic.fields import FieldInfo 1abcdefghij
63 from pydantic.errors import PydanticUserError 1abcdefghij
64 from pydantic_core import to_json 1abcdefghij
66 def model_schema(model: type[BaseModel]) -> dict[str, Any]: 1abcdefghij
67 schema: dict[str, Any] = model.model_json_schema() 1abcdefghij
68 return schema 1abcdefghij
70 def get_config_base(config_data: ConfigDict | None = None) -> ConfigDict: 1abcdefghij
71 return config_data or ConfigDict(**default_pydantic_config) # type: ignore[typeddict-item] 1abcdefghij
73 def get_aliases(model: type[BaseModel]) -> tuple[str, ...]: 1abcdefghij
74 return tuple(f.alias or name for name, f in get_model_fields(model).items()) 1abcdefghij
76 def get_model_fields(model: type[BaseModel]) -> dict[str, FieldInfo]: 1abcdefghij
77 fields: dict[str, FieldInfo] | None = getattr(model, "__pydantic_fields__", None) 1abcdefghij
79 if fields is not None: 1abcdefghij
80 return fields 1abcdefghij
82 # Deprecated in Pydantic V2.11 to be removed in V3.0.
83 model_fields: dict[str, FieldInfo] = model.model_fields 1abcdefghij
84 return model_fields 1abcdefghij
86 def dump_json(data: Any) -> bytes: 1abcdefghij
87 return to_json(data) 1abcdefghij
89else:
90 from pydantic.config import get_config, ConfigDict, BaseConfig 1klmno
91 from pydantic.fields import ModelField, FieldInfo 1klmno
92 from pydantic.json import pydantic_encoder 1klmno
94 TypeAdapter = None # type: ignore[assignment, misc] 1klmno
95 PydanticUserError = Exception # type: ignore[assignment, misc] 1klmno
97 def get_config_base(config_data: ConfigDict | None = None) -> type[BaseConfig]: # type: ignore[misc] 1klmno
98 return get_config(config_data or ConfigDict(**default_pydantic_config)) # type: ignore[typeddict-item, no-any-return] 1klmno
100 def model_schema(model: type[BaseModel]) -> dict[str, Any]: 1klmno
101 return model.schema() 1klmno
103 def get_aliases(model: type[BaseModel]) -> tuple[str, ...]: 1klmno
104 return tuple(f.alias or name for name, f in model.__fields__.items()) 1klmno
106 def get_model_fields(model: type[BaseModel]) -> dict[str, ModelField]: # type: ignore[misc] 1klmno
107 return model.__fields__ # type: ignore[return-value] 1klmno
109 def dump_json(data: Any) -> bytes: 1klmno
110 return json_dumps(data, default=pydantic_encoder) 1klmno