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