__init__.py 15 KB

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