| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- from __future__ import annotations as _annotations
- import warnings
- from typing import TYPE_CHECKING, Any, Literal
- from typing_extensions import deprecated
- from .._internal import _config
- from ..warnings import PydanticDeprecatedSince20
- if not TYPE_CHECKING:
- # See PyCharm issues https://youtrack.jetbrains.com/issue/PY-21915
- # and https://youtrack.jetbrains.com/issue/PY-51428
- DeprecationWarning = PydanticDeprecatedSince20
- __all__ = 'BaseConfig', 'Extra'
- class _ConfigMetaclass(type):
- def __getattr__(self, item: str) -> Any:
- try:
- obj = _config.config_defaults[item]
- warnings.warn(_config.DEPRECATION_MESSAGE, DeprecationWarning)
- return obj
- except KeyError as exc:
- raise AttributeError(f"type object '{self.__name__}' has no attribute {exc}") from exc
- @deprecated('BaseConfig is deprecated. Use the `pydantic.ConfigDict` instead.', category=PydanticDeprecatedSince20)
- class BaseConfig(metaclass=_ConfigMetaclass):
- """This class is only retained for backwards compatibility.
- !!! Warning "Deprecated"
- BaseConfig is deprecated. Use the [`pydantic.ConfigDict`][pydantic.ConfigDict] instead.
- """
- def __getattr__(self, item: str) -> Any:
- try:
- obj = super().__getattribute__(item)
- warnings.warn(_config.DEPRECATION_MESSAGE, DeprecationWarning)
- return obj
- except AttributeError as exc:
- try:
- return getattr(type(self), item)
- except AttributeError:
- # re-raising changes the displayed text to reflect that `self` is not a type
- raise AttributeError(str(exc)) from exc
- def __init_subclass__(cls, **kwargs: Any) -> None:
- warnings.warn(_config.DEPRECATION_MESSAGE, DeprecationWarning)
- return super().__init_subclass__(**kwargs)
- class _ExtraMeta(type):
- def __getattribute__(self, __name: str) -> Any:
- # The @deprecated decorator accesses other attributes, so we only emit a warning for the expected ones
- if __name in {'allow', 'ignore', 'forbid'}:
- warnings.warn(
- "`pydantic.config.Extra` is deprecated, use literal values instead (e.g. `extra='allow'`)",
- DeprecationWarning,
- stacklevel=2,
- )
- return super().__getattribute__(__name)
- @deprecated(
- "Extra is deprecated. Use literal values instead (e.g. `extra='allow'`)", category=PydanticDeprecatedSince20
- )
- class Extra(metaclass=_ExtraMeta):
- allow: Literal['allow'] = 'allow'
- ignore: Literal['ignore'] = 'ignore'
- forbid: Literal['forbid'] = 'forbid'
|