__init__.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. import typing
  2. import pydantic_core
  3. from pydantic_core.core_schema import (
  4. FieldSerializationInfo,
  5. SerializationInfo,
  6. SerializerFunctionWrapHandler,
  7. ValidationInfo,
  8. ValidatorFunctionWrapHandler,
  9. )
  10. from . import dataclasses
  11. from ._internal._generate_schema import GenerateSchema as GenerateSchema
  12. from ._migration import getattr_migration
  13. from .annotated_handlers import GetCoreSchemaHandler, GetJsonSchemaHandler
  14. from .config import ConfigDict
  15. from .errors import *
  16. from .fields import AliasChoices, AliasPath, Field, PrivateAttr, computed_field
  17. from .functional_serializers import PlainSerializer, SerializeAsAny, WrapSerializer, field_serializer, model_serializer
  18. from .functional_validators import (
  19. AfterValidator,
  20. BeforeValidator,
  21. InstanceOf,
  22. PlainValidator,
  23. SkipValidation,
  24. WrapValidator,
  25. field_validator,
  26. model_validator,
  27. )
  28. from .json_schema import WithJsonSchema
  29. from .main import *
  30. from .networks import *
  31. from .type_adapter import TypeAdapter
  32. from .types import *
  33. from .validate_call import validate_call
  34. from .version import VERSION
  35. from .warnings import *
  36. __version__ = VERSION
  37. # this encourages pycharm to import `ValidationError` from here, not pydantic_core
  38. ValidationError = pydantic_core.ValidationError
  39. if typing.TYPE_CHECKING:
  40. # these are imported via `__getattr__` below, but we need them here for type checking and IDE support
  41. from .deprecated.class_validators import root_validator, validator
  42. from .deprecated.config import BaseConfig, Extra
  43. from .deprecated.tools import *
  44. from .root_model import RootModel
  45. __all__ = [
  46. # dataclasses
  47. 'dataclasses',
  48. # pydantic_core.core_schema
  49. 'ValidationInfo',
  50. 'ValidatorFunctionWrapHandler',
  51. # functional validators
  52. 'field_validator',
  53. 'model_validator',
  54. 'AfterValidator',
  55. 'BeforeValidator',
  56. 'PlainValidator',
  57. 'WrapValidator',
  58. 'SkipValidation',
  59. 'InstanceOf',
  60. 'WithJsonSchema',
  61. # deprecated V1 functional validators, these are imported via `__getattr__` below
  62. 'root_validator',
  63. 'validator',
  64. # functional serializers
  65. 'field_serializer',
  66. 'model_serializer',
  67. 'PlainSerializer',
  68. 'SerializeAsAny',
  69. 'WrapSerializer',
  70. 'FieldSerializationInfo',
  71. 'SerializationInfo',
  72. 'SerializerFunctionWrapHandler',
  73. # config
  74. 'ConfigDict',
  75. # deprecated V1 config, these are imported via `__getattr__` below
  76. 'BaseConfig',
  77. 'Extra',
  78. # validate_call
  79. 'validate_call',
  80. # pydantic_core errors
  81. 'ValidationError',
  82. # errors
  83. 'PydanticErrorCodes',
  84. 'PydanticUserError',
  85. 'PydanticSchemaGenerationError',
  86. 'PydanticImportError',
  87. 'PydanticUndefinedAnnotation',
  88. 'PydanticInvalidForJsonSchema',
  89. # fields
  90. 'AliasPath',
  91. 'AliasChoices',
  92. 'Field',
  93. 'computed_field',
  94. # main
  95. 'BaseModel',
  96. 'create_model',
  97. # network
  98. 'AnyUrl',
  99. 'AnyHttpUrl',
  100. 'FileUrl',
  101. 'HttpUrl',
  102. 'UrlConstraints',
  103. 'EmailStr',
  104. 'NameEmail',
  105. 'IPvAnyAddress',
  106. 'IPvAnyInterface',
  107. 'IPvAnyNetwork',
  108. 'PostgresDsn',
  109. 'CockroachDsn',
  110. 'AmqpDsn',
  111. 'RedisDsn',
  112. 'MongoDsn',
  113. 'KafkaDsn',
  114. 'MySQLDsn',
  115. 'MariaDBDsn',
  116. 'validate_email',
  117. # root_model
  118. 'RootModel',
  119. # deprecated tools, these are imported via `__getattr__` below
  120. 'parse_obj_as',
  121. 'schema_of',
  122. 'schema_json_of',
  123. # types
  124. 'Strict',
  125. 'StrictStr',
  126. 'conbytes',
  127. 'conlist',
  128. 'conset',
  129. 'confrozenset',
  130. 'constr',
  131. 'StringConstraints',
  132. 'ImportString',
  133. 'conint',
  134. 'PositiveInt',
  135. 'NegativeInt',
  136. 'NonNegativeInt',
  137. 'NonPositiveInt',
  138. 'confloat',
  139. 'PositiveFloat',
  140. 'NegativeFloat',
  141. 'NonNegativeFloat',
  142. 'NonPositiveFloat',
  143. 'FiniteFloat',
  144. 'condecimal',
  145. 'condate',
  146. 'UUID1',
  147. 'UUID3',
  148. 'UUID4',
  149. 'UUID5',
  150. 'FilePath',
  151. 'DirectoryPath',
  152. 'NewPath',
  153. 'Json',
  154. 'SecretStr',
  155. 'SecretBytes',
  156. 'StrictBool',
  157. 'StrictBytes',
  158. 'StrictInt',
  159. 'StrictFloat',
  160. 'PaymentCardNumber',
  161. 'PrivateAttr',
  162. 'ByteSize',
  163. 'PastDate',
  164. 'FutureDate',
  165. 'PastDatetime',
  166. 'FutureDatetime',
  167. 'AwareDatetime',
  168. 'NaiveDatetime',
  169. 'AllowInfNan',
  170. 'EncoderProtocol',
  171. 'EncodedBytes',
  172. 'EncodedStr',
  173. 'Base64Encoder',
  174. 'Base64Bytes',
  175. 'Base64Str',
  176. 'Base64UrlBytes',
  177. 'Base64UrlStr',
  178. 'GetPydanticSchema',
  179. # type_adapter
  180. 'TypeAdapter',
  181. # version
  182. 'VERSION',
  183. # warnings
  184. 'PydanticDeprecatedSince20',
  185. 'PydanticDeprecationWarning',
  186. # annotated handlers
  187. 'GetCoreSchemaHandler',
  188. 'GetJsonSchemaHandler',
  189. 'GenerateSchema',
  190. ]
  191. # A mapping of {<member name>: (package, <module name>)} defining dynamic imports
  192. _dynamic_imports: 'dict[str, tuple[str, str]]' = {
  193. 'RootModel': (__package__, '.root_model'),
  194. 'root_validator': (__package__, '.deprecated.class_validators'),
  195. 'validator': (__package__, '.deprecated.class_validators'),
  196. 'BaseConfig': (__package__, '.deprecated.config'),
  197. 'Extra': (__package__, '.deprecated.config'),
  198. 'parse_obj_as': (__package__, '.deprecated.tools'),
  199. 'schema_of': (__package__, '.deprecated.tools'),
  200. 'schema_json_of': (__package__, '.deprecated.tools'),
  201. # FieldValidationInfo is deprecated, and hidden behind module a `__getattr__`
  202. 'FieldValidationInfo': ('pydantic_core', '.core_schema'),
  203. }
  204. _getattr_migration = getattr_migration(__name__)
  205. def __getattr__(attr_name: str) -> object:
  206. dynamic_attr = _dynamic_imports.get(attr_name)
  207. if dynamic_attr is None:
  208. return _getattr_migration(attr_name)
  209. package, module_name = dynamic_attr
  210. from importlib import import_module
  211. module = import_module(module_name, package=package)
  212. return getattr(module, attr_name)