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

1import json 1klabmcndoefghij

2from collections.abc import Callable 1klabmcndoefghij

3from typing import Any 1klabmcndoefghij

4 

5from pydantic import BaseModel, create_model 1klabmcndoefghij

6from pydantic.version import VERSION as PYDANTIC_VERSION 1klabmcndoefghij

7 

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) 

18 

19 

20json_dumps: Callable[..., bytes] 1klabmcndoefghij

21orjson: Any 1klabmcndoefghij

22ujson: Any 1klabmcndoefghij

23 

24try: 1klabmcndoefghij

25 import orjson as orjson_ 1klabmcndoefghij

26except ImportError: 1klabmcndoefghij

27 orjson = None 1klabmcndoefghij

28else: 

29 orjson = orjson_ 1klabmcndoefghij

30 

31try: 1klabmcndoefghij

32 import ujson as ujson_ 1klabmcndoefghij

33except ImportError: 1klabmcndoefghij

34 ujson = None 1klabmcndoefghij

35else: 

36 ujson = ujson_ 1klabmcndoefghij

37 

38if orjson: 1klabmcndoefghij

39 json_loads = orjson.loads 1klabmcndoefghij

40 json_dumps = orjson.dumps 1klabmcndoefghij

41 

42elif ujson: 1klabmcndoefghij

43 json_loads = ujson.loads 1klabmcndoefghij

44 

45 def json_dumps(*a: Any, **kw: Any) -> bytes: 1klabmcndoefghij

46 return ujson.dumps(*a, **kw).encode() # type: ignore[no-any-return] 1klabmcndoefghij

47 

48else: 

49 json_loads = json.loads 1klabmcndoefghij

50 

51 def json_dumps(*a: Any, **kw: Any) -> bytes: 1klabmcndoefghij

52 return json.dumps(*a, **kw).encode() 1klabmcndoefghij

53 

54 

55PYDANTIC_V2 = PYDANTIC_VERSION.startswith("2.") 1klabmcndoefghij

56 

57default_pydantic_config = {"arbitrary_types_allowed": True} 1klabmcndoefghij

58 

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

65 

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

69 

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

72 

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

75 

76 def get_model_fields(model: type[BaseModel]) -> dict[str, FieldInfo]: 1abcdefghij

77 fields: dict[str, FieldInfo] | None = getattr(model, "__pydantic_fields__", None) 1abcdefghij

78 

79 if fields is not None: 1abcdefghij

80 return fields 1abcdefghij

81 

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

85 

86 def dump_json(data: Any) -> bytes: 1abcdefghij

87 return to_json(data) 1abcdefghij

88 

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

93 

94 TypeAdapter = None # type: ignore[assignment, misc] 1klmno

95 PydanticUserError = Exception # type: ignore[assignment, misc] 1klmno

96 

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

99 

100 def model_schema(model: type[BaseModel]) -> dict[str, Any]: 1klmno

101 return model.schema() 1klmno

102 

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

105 

106 def get_model_fields(model: type[BaseModel]) -> dict[str, ModelField]: # type: ignore[misc] 1klmno

107 return model.__fields__ # type: ignore[return-value] 1klmno

108 

109 def dump_json(data: Any) -> bytes: 1klmno

110 return json_dumps(data, default=pydantic_encoder) 1klmno