__init__.py 15 KB

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