__init__.py 14 KB

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