__init__.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. import typing
  2. from importlib import import_module
  3. from warnings import warn
  4. from ._migration import getattr_migration
  5. from .version import VERSION
  6. if typing.TYPE_CHECKING:
  7. # import of virtually everything is supported via `__getattr__` below,
  8. # but we need them here for type checking and IDE support
  9. import pydantic_core
  10. from pydantic_core.core_schema import (
  11. FieldSerializationInfo,
  12. SerializationInfo,
  13. SerializerFunctionWrapHandler,
  14. ValidationInfo,
  15. ValidatorFunctionWrapHandler,
  16. )
  17. from . import dataclasses
  18. from .aliases import AliasChoices, AliasGenerator, AliasPath
  19. from .annotated_handlers import GetCoreSchemaHandler, GetJsonSchemaHandler
  20. from .config import ConfigDict, with_config
  21. from .errors import *
  22. from .fields import Field, PrivateAttr, computed_field
  23. from .functional_serializers import (
  24. PlainSerializer,
  25. SerializeAsAny,
  26. WrapSerializer,
  27. field_serializer,
  28. model_serializer,
  29. )
  30. from .functional_validators import (
  31. AfterValidator,
  32. BeforeValidator,
  33. InstanceOf,
  34. ModelWrapValidatorHandler,
  35. PlainValidator,
  36. SkipValidation,
  37. WrapValidator,
  38. field_validator,
  39. model_validator,
  40. )
  41. from .json_schema import WithJsonSchema
  42. from .main import *
  43. from .networks import *
  44. from .type_adapter import TypeAdapter
  45. from .types import *
  46. from .validate_call_decorator import validate_call
  47. from .warnings import (
  48. PydanticDeprecatedSince20,
  49. PydanticDeprecatedSince26,
  50. PydanticDeprecatedSince29,
  51. PydanticDeprecationWarning,
  52. PydanticExperimentalWarning,
  53. )
  54. # this encourages pycharm to import `ValidationError` from here, not pydantic_core
  55. ValidationError = pydantic_core.ValidationError
  56. from .deprecated.class_validators import root_validator, validator
  57. from .deprecated.config import BaseConfig, Extra
  58. from .deprecated.tools import *
  59. from .root_model import RootModel
  60. __version__ = VERSION
  61. __all__ = (
  62. # dataclasses
  63. 'dataclasses',
  64. # functional validators
  65. 'field_validator',
  66. 'model_validator',
  67. 'AfterValidator',
  68. 'BeforeValidator',
  69. 'PlainValidator',
  70. 'WrapValidator',
  71. 'SkipValidation',
  72. 'InstanceOf',
  73. 'ModelWrapValidatorHandler',
  74. # JSON Schema
  75. 'WithJsonSchema',
  76. # deprecated V1 functional validators, these are imported via `__getattr__` below
  77. 'root_validator',
  78. 'validator',
  79. # functional serializers
  80. 'field_serializer',
  81. 'model_serializer',
  82. 'PlainSerializer',
  83. 'SerializeAsAny',
  84. 'WrapSerializer',
  85. # config
  86. 'ConfigDict',
  87. 'with_config',
  88. # deprecated V1 config, these are imported via `__getattr__` below
  89. 'BaseConfig',
  90. 'Extra',
  91. # validate_call
  92. 'validate_call',
  93. # errors
  94. 'PydanticErrorCodes',
  95. 'PydanticUserError',
  96. 'PydanticSchemaGenerationError',
  97. 'PydanticImportError',
  98. 'PydanticUndefinedAnnotation',
  99. 'PydanticInvalidForJsonSchema',
  100. # fields
  101. 'Field',
  102. 'computed_field',
  103. 'PrivateAttr',
  104. # alias
  105. 'AliasChoices',
  106. 'AliasGenerator',
  107. 'AliasPath',
  108. # main
  109. 'BaseModel',
  110. 'create_model',
  111. # network
  112. 'AnyUrl',
  113. 'AnyHttpUrl',
  114. 'FileUrl',
  115. 'HttpUrl',
  116. 'FtpUrl',
  117. 'WebsocketUrl',
  118. 'AnyWebsocketUrl',
  119. 'UrlConstraints',
  120. 'EmailStr',
  121. 'NameEmail',
  122. 'IPvAnyAddress',
  123. 'IPvAnyInterface',
  124. 'IPvAnyNetwork',
  125. 'PostgresDsn',
  126. 'CockroachDsn',
  127. 'AmqpDsn',
  128. 'RedisDsn',
  129. 'MongoDsn',
  130. 'KafkaDsn',
  131. 'NatsDsn',
  132. 'MySQLDsn',
  133. 'MariaDBDsn',
  134. 'ClickHouseDsn',
  135. 'SnowflakeDsn',
  136. 'validate_email',
  137. # root_model
  138. 'RootModel',
  139. # deprecated tools, these are imported via `__getattr__` below
  140. 'parse_obj_as',
  141. 'schema_of',
  142. 'schema_json_of',
  143. # types
  144. 'Strict',
  145. 'StrictStr',
  146. 'conbytes',
  147. 'conlist',
  148. 'conset',
  149. 'confrozenset',
  150. 'constr',
  151. 'StringConstraints',
  152. 'ImportString',
  153. 'conint',
  154. 'PositiveInt',
  155. 'NegativeInt',
  156. 'NonNegativeInt',
  157. 'NonPositiveInt',
  158. 'confloat',
  159. 'PositiveFloat',
  160. 'NegativeFloat',
  161. 'NonNegativeFloat',
  162. 'NonPositiveFloat',
  163. 'FiniteFloat',
  164. 'condecimal',
  165. 'condate',
  166. 'UUID1',
  167. 'UUID3',
  168. 'UUID4',
  169. 'UUID5',
  170. 'FilePath',
  171. 'DirectoryPath',
  172. 'NewPath',
  173. 'Json',
  174. 'Secret',
  175. 'SecretStr',
  176. 'SecretBytes',
  177. 'SocketPath',
  178. 'StrictBool',
  179. 'StrictBytes',
  180. 'StrictInt',
  181. 'StrictFloat',
  182. 'PaymentCardNumber',
  183. 'ByteSize',
  184. 'PastDate',
  185. 'FutureDate',
  186. 'PastDatetime',
  187. 'FutureDatetime',
  188. 'AwareDatetime',
  189. 'NaiveDatetime',
  190. 'AllowInfNan',
  191. 'EncoderProtocol',
  192. 'EncodedBytes',
  193. 'EncodedStr',
  194. 'Base64Encoder',
  195. 'Base64Bytes',
  196. 'Base64Str',
  197. 'Base64UrlBytes',
  198. 'Base64UrlStr',
  199. 'GetPydanticSchema',
  200. 'Tag',
  201. 'Discriminator',
  202. 'JsonValue',
  203. 'FailFast',
  204. # type_adapter
  205. 'TypeAdapter',
  206. # version
  207. '__version__',
  208. 'VERSION',
  209. # warnings
  210. 'PydanticDeprecatedSince20',
  211. 'PydanticDeprecatedSince26',
  212. 'PydanticDeprecatedSince29',
  213. 'PydanticDeprecationWarning',
  214. 'PydanticExperimentalWarning',
  215. # annotated handlers
  216. 'GetCoreSchemaHandler',
  217. 'GetJsonSchemaHandler',
  218. # pydantic_core
  219. 'ValidationError',
  220. 'ValidationInfo',
  221. 'SerializationInfo',
  222. 'ValidatorFunctionWrapHandler',
  223. 'FieldSerializationInfo',
  224. 'SerializerFunctionWrapHandler',
  225. 'OnErrorOmit',
  226. )
  227. # A mapping of {<member name>: (package, <module name>)} defining dynamic imports
  228. _dynamic_imports: 'dict[str, tuple[str, str]]' = {
  229. 'dataclasses': (__spec__.parent, '__module__'),
  230. # functional validators
  231. 'field_validator': (__spec__.parent, '.functional_validators'),
  232. 'model_validator': (__spec__.parent, '.functional_validators'),
  233. 'AfterValidator': (__spec__.parent, '.functional_validators'),
  234. 'BeforeValidator': (__spec__.parent, '.functional_validators'),
  235. 'PlainValidator': (__spec__.parent, '.functional_validators'),
  236. 'WrapValidator': (__spec__.parent, '.functional_validators'),
  237. 'SkipValidation': (__spec__.parent, '.functional_validators'),
  238. 'InstanceOf': (__spec__.parent, '.functional_validators'),
  239. 'ModelWrapValidatorHandler': (__spec__.parent, '.functional_validators'),
  240. # JSON Schema
  241. 'WithJsonSchema': (__spec__.parent, '.json_schema'),
  242. # functional serializers
  243. 'field_serializer': (__spec__.parent, '.functional_serializers'),
  244. 'model_serializer': (__spec__.parent, '.functional_serializers'),
  245. 'PlainSerializer': (__spec__.parent, '.functional_serializers'),
  246. 'SerializeAsAny': (__spec__.parent, '.functional_serializers'),
  247. 'WrapSerializer': (__spec__.parent, '.functional_serializers'),
  248. # config
  249. 'ConfigDict': (__spec__.parent, '.config'),
  250. 'with_config': (__spec__.parent, '.config'),
  251. # validate call
  252. 'validate_call': (__spec__.parent, '.validate_call_decorator'),
  253. # errors
  254. 'PydanticErrorCodes': (__spec__.parent, '.errors'),
  255. 'PydanticUserError': (__spec__.parent, '.errors'),
  256. 'PydanticSchemaGenerationError': (__spec__.parent, '.errors'),
  257. 'PydanticImportError': (__spec__.parent, '.errors'),
  258. 'PydanticUndefinedAnnotation': (__spec__.parent, '.errors'),
  259. 'PydanticInvalidForJsonSchema': (__spec__.parent, '.errors'),
  260. # fields
  261. 'Field': (__spec__.parent, '.fields'),
  262. 'computed_field': (__spec__.parent, '.fields'),
  263. 'PrivateAttr': (__spec__.parent, '.fields'),
  264. # alias
  265. 'AliasChoices': (__spec__.parent, '.aliases'),
  266. 'AliasGenerator': (__spec__.parent, '.aliases'),
  267. 'AliasPath': (__spec__.parent, '.aliases'),
  268. # main
  269. 'BaseModel': (__spec__.parent, '.main'),
  270. 'create_model': (__spec__.parent, '.main'),
  271. # network
  272. 'AnyUrl': (__spec__.parent, '.networks'),
  273. 'AnyHttpUrl': (__spec__.parent, '.networks'),
  274. 'FileUrl': (__spec__.parent, '.networks'),
  275. 'HttpUrl': (__spec__.parent, '.networks'),
  276. 'FtpUrl': (__spec__.parent, '.networks'),
  277. 'WebsocketUrl': (__spec__.parent, '.networks'),
  278. 'AnyWebsocketUrl': (__spec__.parent, '.networks'),
  279. 'UrlConstraints': (__spec__.parent, '.networks'),
  280. 'EmailStr': (__spec__.parent, '.networks'),
  281. 'NameEmail': (__spec__.parent, '.networks'),
  282. 'IPvAnyAddress': (__spec__.parent, '.networks'),
  283. 'IPvAnyInterface': (__spec__.parent, '.networks'),
  284. 'IPvAnyNetwork': (__spec__.parent, '.networks'),
  285. 'PostgresDsn': (__spec__.parent, '.networks'),
  286. 'CockroachDsn': (__spec__.parent, '.networks'),
  287. 'AmqpDsn': (__spec__.parent, '.networks'),
  288. 'RedisDsn': (__spec__.parent, '.networks'),
  289. 'MongoDsn': (__spec__.parent, '.networks'),
  290. 'KafkaDsn': (__spec__.parent, '.networks'),
  291. 'NatsDsn': (__spec__.parent, '.networks'),
  292. 'MySQLDsn': (__spec__.parent, '.networks'),
  293. 'MariaDBDsn': (__spec__.parent, '.networks'),
  294. 'ClickHouseDsn': (__spec__.parent, '.networks'),
  295. 'SnowflakeDsn': (__spec__.parent, '.networks'),
  296. 'validate_email': (__spec__.parent, '.networks'),
  297. # root_model
  298. 'RootModel': (__spec__.parent, '.root_model'),
  299. # types
  300. 'Strict': (__spec__.parent, '.types'),
  301. 'StrictStr': (__spec__.parent, '.types'),
  302. 'conbytes': (__spec__.parent, '.types'),
  303. 'conlist': (__spec__.parent, '.types'),
  304. 'conset': (__spec__.parent, '.types'),
  305. 'confrozenset': (__spec__.parent, '.types'),
  306. 'constr': (__spec__.parent, '.types'),
  307. 'StringConstraints': (__spec__.parent, '.types'),
  308. 'ImportString': (__spec__.parent, '.types'),
  309. 'conint': (__spec__.parent, '.types'),
  310. 'PositiveInt': (__spec__.parent, '.types'),
  311. 'NegativeInt': (__spec__.parent, '.types'),
  312. 'NonNegativeInt': (__spec__.parent, '.types'),
  313. 'NonPositiveInt': (__spec__.parent, '.types'),
  314. 'confloat': (__spec__.parent, '.types'),
  315. 'PositiveFloat': (__spec__.parent, '.types'),
  316. 'NegativeFloat': (__spec__.parent, '.types'),
  317. 'NonNegativeFloat': (__spec__.parent, '.types'),
  318. 'NonPositiveFloat': (__spec__.parent, '.types'),
  319. 'FiniteFloat': (__spec__.parent, '.types'),
  320. 'condecimal': (__spec__.parent, '.types'),
  321. 'condate': (__spec__.parent, '.types'),
  322. 'UUID1': (__spec__.parent, '.types'),
  323. 'UUID3': (__spec__.parent, '.types'),
  324. 'UUID4': (__spec__.parent, '.types'),
  325. 'UUID5': (__spec__.parent, '.types'),
  326. 'FilePath': (__spec__.parent, '.types'),
  327. 'DirectoryPath': (__spec__.parent, '.types'),
  328. 'NewPath': (__spec__.parent, '.types'),
  329. 'Json': (__spec__.parent, '.types'),
  330. 'Secret': (__spec__.parent, '.types'),
  331. 'SecretStr': (__spec__.parent, '.types'),
  332. 'SecretBytes': (__spec__.parent, '.types'),
  333. 'StrictBool': (__spec__.parent, '.types'),
  334. 'StrictBytes': (__spec__.parent, '.types'),
  335. 'StrictInt': (__spec__.parent, '.types'),
  336. 'StrictFloat': (__spec__.parent, '.types'),
  337. 'PaymentCardNumber': (__spec__.parent, '.types'),
  338. 'ByteSize': (__spec__.parent, '.types'),
  339. 'PastDate': (__spec__.parent, '.types'),
  340. 'SocketPath': (__spec__.parent, '.types'),
  341. 'FutureDate': (__spec__.parent, '.types'),
  342. 'PastDatetime': (__spec__.parent, '.types'),
  343. 'FutureDatetime': (__spec__.parent, '.types'),
  344. 'AwareDatetime': (__spec__.parent, '.types'),
  345. 'NaiveDatetime': (__spec__.parent, '.types'),
  346. 'AllowInfNan': (__spec__.parent, '.types'),
  347. 'EncoderProtocol': (__spec__.parent, '.types'),
  348. 'EncodedBytes': (__spec__.parent, '.types'),
  349. 'EncodedStr': (__spec__.parent, '.types'),
  350. 'Base64Encoder': (__spec__.parent, '.types'),
  351. 'Base64Bytes': (__spec__.parent, '.types'),
  352. 'Base64Str': (__spec__.parent, '.types'),
  353. 'Base64UrlBytes': (__spec__.parent, '.types'),
  354. 'Base64UrlStr': (__spec__.parent, '.types'),
  355. 'GetPydanticSchema': (__spec__.parent, '.types'),
  356. 'Tag': (__spec__.parent, '.types'),
  357. 'Discriminator': (__spec__.parent, '.types'),
  358. 'JsonValue': (__spec__.parent, '.types'),
  359. 'OnErrorOmit': (__spec__.parent, '.types'),
  360. 'FailFast': (__spec__.parent, '.types'),
  361. # type_adapter
  362. 'TypeAdapter': (__spec__.parent, '.type_adapter'),
  363. # warnings
  364. 'PydanticDeprecatedSince20': (__spec__.parent, '.warnings'),
  365. 'PydanticDeprecatedSince26': (__spec__.parent, '.warnings'),
  366. 'PydanticDeprecatedSince29': (__spec__.parent, '.warnings'),
  367. 'PydanticDeprecationWarning': (__spec__.parent, '.warnings'),
  368. 'PydanticExperimentalWarning': (__spec__.parent, '.warnings'),
  369. # annotated handlers
  370. 'GetCoreSchemaHandler': (__spec__.parent, '.annotated_handlers'),
  371. 'GetJsonSchemaHandler': (__spec__.parent, '.annotated_handlers'),
  372. # pydantic_core stuff
  373. 'ValidationError': ('pydantic_core', '.'),
  374. 'ValidationInfo': ('pydantic_core', '.core_schema'),
  375. 'SerializationInfo': ('pydantic_core', '.core_schema'),
  376. 'ValidatorFunctionWrapHandler': ('pydantic_core', '.core_schema'),
  377. 'FieldSerializationInfo': ('pydantic_core', '.core_schema'),
  378. 'SerializerFunctionWrapHandler': ('pydantic_core', '.core_schema'),
  379. # deprecated, mostly not included in __all__
  380. 'root_validator': (__spec__.parent, '.deprecated.class_validators'),
  381. 'validator': (__spec__.parent, '.deprecated.class_validators'),
  382. 'BaseConfig': (__spec__.parent, '.deprecated.config'),
  383. 'Extra': (__spec__.parent, '.deprecated.config'),
  384. 'parse_obj_as': (__spec__.parent, '.deprecated.tools'),
  385. 'schema_of': (__spec__.parent, '.deprecated.tools'),
  386. 'schema_json_of': (__spec__.parent, '.deprecated.tools'),
  387. # deprecated dynamic imports
  388. 'FieldValidationInfo': ('pydantic_core', '.core_schema'),
  389. 'GenerateSchema': (__spec__.parent, '._internal._generate_schema'),
  390. }
  391. _deprecated_dynamic_imports = {'FieldValidationInfo', 'GenerateSchema'}
  392. _getattr_migration = getattr_migration(__name__)
  393. def __getattr__(attr_name: str) -> object:
  394. if attr_name in _deprecated_dynamic_imports:
  395. warn(
  396. f'Importing {attr_name} from `pydantic` is deprecated. This feature is either no longer supported, or is not public.',
  397. DeprecationWarning,
  398. stacklevel=2,
  399. )
  400. dynamic_attr = _dynamic_imports.get(attr_name)
  401. if dynamic_attr is None:
  402. return _getattr_migration(attr_name)
  403. package, module_name = dynamic_attr
  404. if module_name == '__module__':
  405. result = import_module(f'.{attr_name}', package=package)
  406. globals()[attr_name] = result
  407. return result
  408. else:
  409. module = import_module(module_name, package=package)
  410. result = getattr(module, attr_name)
  411. g = globals()
  412. for k, (_, v_module_name) in _dynamic_imports.items():
  413. if v_module_name == module_name and k not in _deprecated_dynamic_imports:
  414. g[k] = getattr(module, k)
  415. return result
  416. def __dir__() -> 'list[str]':
  417. return list(__all__)