__init__.py 15 KB

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