summaryrefslogtreecommitdiff
path: root/venv/lib/python3.11/site-packages/sqlalchemy/util/deprecations.py
diff options
context:
space:
mode:
Diffstat (limited to 'venv/lib/python3.11/site-packages/sqlalchemy/util/deprecations.py')
-rw-r--r--venv/lib/python3.11/site-packages/sqlalchemy/util/deprecations.py401
1 files changed, 0 insertions, 401 deletions
diff --git a/venv/lib/python3.11/site-packages/sqlalchemy/util/deprecations.py b/venv/lib/python3.11/site-packages/sqlalchemy/util/deprecations.py
deleted file mode 100644
index 3034715..0000000
--- a/venv/lib/python3.11/site-packages/sqlalchemy/util/deprecations.py
+++ /dev/null
@@ -1,401 +0,0 @@
-# util/deprecations.py
-# Copyright (C) 2005-2024 the SQLAlchemy authors and contributors
-# <see AUTHORS file>
-#
-# This module is part of SQLAlchemy and is released under
-# the MIT License: https://www.opensource.org/licenses/mit-license.php
-# mypy: allow-untyped-defs, allow-untyped-calls
-
-"""Helpers related to deprecation of functions, methods, classes, other
-functionality."""
-
-from __future__ import annotations
-
-import re
-from typing import Any
-from typing import Callable
-from typing import Dict
-from typing import Match
-from typing import Optional
-from typing import Sequence
-from typing import Set
-from typing import Tuple
-from typing import Type
-from typing import TypeVar
-from typing import Union
-
-from . import compat
-from .langhelpers import _hash_limit_string
-from .langhelpers import _warnings_warn
-from .langhelpers import decorator
-from .langhelpers import inject_docstring_text
-from .langhelpers import inject_param_text
-from .. import exc
-
-_T = TypeVar("_T", bound=Any)
-
-
-# https://mypy.readthedocs.io/en/stable/generics.html#declaring-decorators
-_F = TypeVar("_F", bound="Callable[..., Any]")
-
-
-def _warn_with_version(
- msg: str,
- version: str,
- type_: Type[exc.SADeprecationWarning],
- stacklevel: int,
- code: Optional[str] = None,
-) -> None:
- warn = type_(msg, code=code)
- warn.deprecated_since = version
-
- _warnings_warn(warn, stacklevel=stacklevel + 1)
-
-
-def warn_deprecated(
- msg: str, version: str, stacklevel: int = 3, code: Optional[str] = None
-) -> None:
- _warn_with_version(
- msg, version, exc.SADeprecationWarning, stacklevel, code=code
- )
-
-
-def warn_deprecated_limited(
- msg: str,
- args: Sequence[Any],
- version: str,
- stacklevel: int = 3,
- code: Optional[str] = None,
-) -> None:
- """Issue a deprecation warning with a parameterized string,
- limiting the number of registrations.
-
- """
- if args:
- msg = _hash_limit_string(msg, 10, args)
- _warn_with_version(
- msg, version, exc.SADeprecationWarning, stacklevel, code=code
- )
-
-
-def deprecated_cls(
- version: str, message: str, constructor: Optional[str] = "__init__"
-) -> Callable[[Type[_T]], Type[_T]]:
- header = ".. deprecated:: %s %s" % (version, (message or ""))
-
- def decorate(cls: Type[_T]) -> Type[_T]:
- return _decorate_cls_with_warning(
- cls,
- constructor,
- exc.SADeprecationWarning,
- message % dict(func=constructor),
- version,
- header,
- )
-
- return decorate
-
-
-def deprecated(
- version: str,
- message: Optional[str] = None,
- add_deprecation_to_docstring: bool = True,
- warning: Optional[Type[exc.SADeprecationWarning]] = None,
- enable_warnings: bool = True,
-) -> Callable[[_F], _F]:
- """Decorates a function and issues a deprecation warning on use.
-
- :param version:
- Issue version in the warning.
-
- :param message:
- If provided, issue message in the warning. A sensible default
- is used if not provided.
-
- :param add_deprecation_to_docstring:
- Default True. If False, the wrapped function's __doc__ is left
- as-is. If True, the 'message' is prepended to the docs if
- provided, or sensible default if message is omitted.
-
- """
-
- if add_deprecation_to_docstring:
- header = ".. deprecated:: %s %s" % (
- version,
- (message or ""),
- )
- else:
- header = None
-
- if message is None:
- message = "Call to deprecated function %(func)s"
-
- if warning is None:
- warning = exc.SADeprecationWarning
-
- message += " (deprecated since: %s)" % version
-
- def decorate(fn: _F) -> _F:
- assert message is not None
- assert warning is not None
- return _decorate_with_warning(
- fn,
- warning,
- message % dict(func=fn.__name__),
- version,
- header,
- enable_warnings=enable_warnings,
- )
-
- return decorate
-
-
-def moved_20(
- message: str, **kw: Any
-) -> Callable[[Callable[..., _T]], Callable[..., _T]]:
- return deprecated(
- "2.0", message=message, warning=exc.MovedIn20Warning, **kw
- )
-
-
-def became_legacy_20(
- api_name: str, alternative: Optional[str] = None, **kw: Any
-) -> Callable[[_F], _F]:
- type_reg = re.match("^:(attr|func|meth):", api_name)
- if type_reg:
- type_ = {"attr": "attribute", "func": "function", "meth": "method"}[
- type_reg.group(1)
- ]
- else:
- type_ = "construct"
- message = (
- "The %s %s is considered legacy as of the "
- "1.x series of SQLAlchemy and %s in 2.0."
- % (
- api_name,
- type_,
- "becomes a legacy construct",
- )
- )
-
- if ":attr:" in api_name:
- attribute_ok = kw.pop("warn_on_attribute_access", False)
- if not attribute_ok:
- assert kw.get("enable_warnings") is False, (
- "attribute %s will emit a warning on read access. "
- "If you *really* want this, "
- "add warn_on_attribute_access=True. Otherwise please add "
- "enable_warnings=False." % api_name
- )
-
- if alternative:
- message += " " + alternative
-
- warning_cls = exc.LegacyAPIWarning
-
- return deprecated("2.0", message=message, warning=warning_cls, **kw)
-
-
-def deprecated_params(**specs: Tuple[str, str]) -> Callable[[_F], _F]:
- """Decorates a function to warn on use of certain parameters.
-
- e.g. ::
-
- @deprecated_params(
- weak_identity_map=(
- "0.7",
- "the :paramref:`.Session.weak_identity_map parameter "
- "is deprecated."
- )
-
- )
-
- """
-
- messages: Dict[str, str] = {}
- versions: Dict[str, str] = {}
- version_warnings: Dict[str, Type[exc.SADeprecationWarning]] = {}
-
- for param, (version, message) in specs.items():
- versions[param] = version
- messages[param] = _sanitize_restructured_text(message)
- version_warnings[param] = exc.SADeprecationWarning
-
- def decorate(fn: _F) -> _F:
- spec = compat.inspect_getfullargspec(fn)
-
- check_defaults: Union[Set[str], Tuple[()]]
- if spec.defaults is not None:
- defaults = dict(
- zip(
- spec.args[(len(spec.args) - len(spec.defaults)) :],
- spec.defaults,
- )
- )
- check_defaults = set(defaults).intersection(messages)
- check_kw = set(messages).difference(defaults)
- elif spec.kwonlydefaults is not None:
- defaults = spec.kwonlydefaults
- check_defaults = set(defaults).intersection(messages)
- check_kw = set(messages).difference(defaults)
- else:
- check_defaults = ()
- check_kw = set(messages)
-
- check_any_kw = spec.varkw
-
- # latest mypy has opinions here, not sure if they implemented
- # Concatenate or something
- @decorator
- def warned(fn: _F, *args: Any, **kwargs: Any) -> _F:
- for m in check_defaults:
- if (defaults[m] is None and kwargs[m] is not None) or (
- defaults[m] is not None and kwargs[m] != defaults[m]
- ):
- _warn_with_version(
- messages[m],
- versions[m],
- version_warnings[m],
- stacklevel=3,
- )
-
- if check_any_kw in messages and set(kwargs).difference(
- check_defaults
- ):
- assert check_any_kw is not None
- _warn_with_version(
- messages[check_any_kw],
- versions[check_any_kw],
- version_warnings[check_any_kw],
- stacklevel=3,
- )
-
- for m in check_kw:
- if m in kwargs:
- _warn_with_version(
- messages[m],
- versions[m],
- version_warnings[m],
- stacklevel=3,
- )
- return fn(*args, **kwargs) # type: ignore[no-any-return]
-
- doc = fn.__doc__ is not None and fn.__doc__ or ""
- if doc:
- doc = inject_param_text(
- doc,
- {
- param: ".. deprecated:: %s %s"
- % ("1.4" if version == "2.0" else version, (message or ""))
- for param, (version, message) in specs.items()
- },
- )
- decorated = warned(fn)
- decorated.__doc__ = doc
- return decorated
-
- return decorate
-
-
-def _sanitize_restructured_text(text: str) -> str:
- def repl(m: Match[str]) -> str:
- type_, name = m.group(1, 2)
- if type_ in ("func", "meth"):
- name += "()"
- return name
-
- text = re.sub(r":ref:`(.+) <.*>`", lambda m: '"%s"' % m.group(1), text)
- return re.sub(r"\:(\w+)\:`~?(?:_\w+)?\.?(.+?)`", repl, text)
-
-
-def _decorate_cls_with_warning(
- cls: Type[_T],
- constructor: Optional[str],
- wtype: Type[exc.SADeprecationWarning],
- message: str,
- version: str,
- docstring_header: Optional[str] = None,
-) -> Type[_T]:
- doc = cls.__doc__ is not None and cls.__doc__ or ""
- if docstring_header is not None:
- if constructor is not None:
- docstring_header %= dict(func=constructor)
-
- if issubclass(wtype, exc.Base20DeprecationWarning):
- docstring_header += (
- " (Background on SQLAlchemy 2.0 at: "
- ":ref:`migration_20_toplevel`)"
- )
- doc = inject_docstring_text(doc, docstring_header, 1)
-
- constructor_fn = None
- if type(cls) is type:
- clsdict = dict(cls.__dict__)
- clsdict["__doc__"] = doc
- clsdict.pop("__dict__", None)
- clsdict.pop("__weakref__", None)
- cls = type(cls.__name__, cls.__bases__, clsdict)
- if constructor is not None:
- constructor_fn = clsdict[constructor]
-
- else:
- cls.__doc__ = doc
- if constructor is not None:
- constructor_fn = getattr(cls, constructor)
-
- if constructor is not None:
- assert constructor_fn is not None
- assert wtype is not None
- setattr(
- cls,
- constructor,
- _decorate_with_warning(
- constructor_fn, wtype, message, version, None
- ),
- )
- return cls
-
-
-def _decorate_with_warning(
- func: _F,
- wtype: Type[exc.SADeprecationWarning],
- message: str,
- version: str,
- docstring_header: Optional[str] = None,
- enable_warnings: bool = True,
-) -> _F:
- """Wrap a function with a warnings.warn and augmented docstring."""
-
- message = _sanitize_restructured_text(message)
-
- if issubclass(wtype, exc.Base20DeprecationWarning):
- doc_only = (
- " (Background on SQLAlchemy 2.0 at: "
- ":ref:`migration_20_toplevel`)"
- )
- else:
- doc_only = ""
-
- @decorator
- def warned(fn: _F, *args: Any, **kwargs: Any) -> _F:
- skip_warning = not enable_warnings or kwargs.pop(
- "_sa_skip_warning", False
- )
- if not skip_warning:
- _warn_with_version(message, version, wtype, stacklevel=3)
- return fn(*args, **kwargs) # type: ignore[no-any-return]
-
- doc = func.__doc__ is not None and func.__doc__ or ""
- if docstring_header is not None:
- docstring_header %= dict(func=func.__name__)
-
- docstring_header += doc_only
-
- doc = inject_docstring_text(doc, docstring_header, 1)
-
- decorated = warned(func)
- decorated.__doc__ = doc
- decorated._sa_warn = lambda: _warn_with_version( # type: ignore
- message, version, wtype, stacklevel=3
- )
- return decorated