summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/util/deprecations.py
diff options
context:
space:
mode:
authorFederico Caselli <cfederico87@gmail.com>2020-04-08 20:26:21 +0200
committerFederico Caselli <cfederico87@gmail.com>2020-04-09 00:33:22 +0200
commita9b068ae564e5e775e312373088545b75aeaa1b0 (patch)
tree3a20c79acfefe49b62ee4bca360bb11001f9eec9 /lib/sqlalchemy/util/deprecations.py
parentecca4fe3f8aebc5b42c2acda2e5d28d6a90a821e (diff)
downloadsqlalchemy-a9b068ae564e5e775e312373088545b75aeaa1b0.tar.gz
Remove code deprecated before version 1.1
- Remove deprecated method ``get_primary_keys` in the :class:`.Dialect` and :class:`.Inspector` classes. - Remove deprecated event ``dbapi_error`` and the method ``ConnectionEvents.dbapi_error`. - Remove support for deprecated engine URLs of the form ``postgres://``. - Remove deprecated dialect ``mysql+gaerdbms``. - Remove deprecated parameter ``quoting`` from :class:`.mysql.ENUM` and :class:`.mysql.SET` in the ``mysql`` dialect. - Remove deprecated function ``comparable_property``. and function ``comparable_using`` in the declarative extension. - Remove deprecated function ``compile_mappers``. - Remove deprecated method ``collection.linker``. - Remove deprecated method ``Session.prune`` and parameter ``Session.weak_identity_map``. This change also removes the class ``StrongInstanceDict``. - Remove deprecated parameter ``mapper.order_by``. - Remove deprecated parameter ``Session._enable_transaction_accounting`. - Remove deprecated parameter ``Session.is_modified.passive``. - Remove deprecated class ``Binary``. Please use :class:`.LargeBinary`. - Remove deprecated methods ``Compiled.compile``, ``ClauseElement.__and__`` and ``ClauseElement.__or__`` and attribute ``Over.func``. - Remove deprecated ``FromClause.count`` method. - Remove deprecated parameter ``Table.useexisting``. - Remove deprecated parameters ``text.bindparams`` and ``text.typemap``. - Remove boolean support for the ``passive`` parameter in ``get_history``. - Remove deprecated ``adapt_operator`` in ``UserDefinedType.Comparator``. Fixes: #4643 Change-Id: Idcd390c77bf7b0e9957907716993bdaa3f1a1763
Diffstat (limited to 'lib/sqlalchemy/util/deprecations.py')
-rw-r--r--lib/sqlalchemy/util/deprecations.py69
1 files changed, 47 insertions, 22 deletions
diff --git a/lib/sqlalchemy/util/deprecations.py b/lib/sqlalchemy/util/deprecations.py
index e3d4b88c4..4bc37bf04 100644
--- a/lib/sqlalchemy/util/deprecations.py
+++ b/lib/sqlalchemy/util/deprecations.py
@@ -18,14 +18,25 @@ from .langhelpers import inject_param_text
from .. import exc
-def warn_deprecated(msg, stacklevel=3):
- warnings.warn(msg, exc.SADeprecationWarning, stacklevel=stacklevel)
+def _warn_with_version(msg, version, type_, stacklevel):
+ warn = type_(msg)
+ warn.deprecated_since = version
+ warnings.warn(warn, stacklevel=stacklevel + 1)
+
+
+def warn_deprecated(msg, version, stacklevel=3):
+ _warn_with_version(msg, version, exc.SADeprecationWarning, stacklevel)
def warn_deprecated_20(msg, stacklevel=3):
msg += " (Background on SQLAlchemy 2.0 at: http://sqlalche.me/e/b8d9)"
- warnings.warn(msg, exc.RemovedIn20Warning, stacklevel=stacklevel)
+ _warn_with_version(
+ msg,
+ exc.RemovedIn20Warning.deprecated_since,
+ exc.RemovedIn20Warning,
+ stacklevel,
+ )
def deprecated_cls(version, message, constructor="__init__"):
@@ -37,6 +48,7 @@ def deprecated_cls(version, message, constructor="__init__"):
constructor,
exc.SADeprecationWarning,
message % dict(func=constructor),
+ version,
header,
)
@@ -54,7 +66,12 @@ def deprecated_20_cls(clsname, alternative=None, constructor="__init__"):
def decorate(cls):
return _decorate_cls_with_warning(
- cls, constructor, exc.RemovedIn20Warning, message, message
+ cls,
+ constructor,
+ exc.RemovedIn20Warning,
+ message,
+ exc.RemovedIn20Warning.deprecated_since,
+ message,
)
return decorate
@@ -92,7 +109,7 @@ def deprecated(
def decorate(fn):
return _decorate_with_warning(
- fn, warning, message % dict(func=fn.__name__), header
+ fn, warning, message % dict(func=fn.__name__), version, header
)
return decorate
@@ -129,8 +146,10 @@ def deprecated_params(**specs):
"""
messages = {}
+ versions = {}
version_warnings = {}
for param, (version, message) in specs.items():
+ versions[param] = version
messages[param] = _sanitize_restructured_text(message)
version_warnings[param] = (
exc.RemovedIn20Warning
@@ -159,13 +178,19 @@ def deprecated_params(**specs):
if (defaults[m] is None and kwargs[m] is not None) or (
defaults[m] is not None and kwargs[m] != defaults[m]
):
- warnings.warn(
- messages[m], version_warnings[m], stacklevel=3
+ _warn_with_version(
+ messages[m],
+ versions[m],
+ version_warnings[m],
+ stacklevel=3,
)
for m in check_kw:
if m in kwargs:
- warnings.warn(
- messages[m], version_warnings[m], stacklevel=3
+ _warn_with_version(
+ messages[m],
+ versions[m],
+ version_warnings[m],
+ stacklevel=3,
)
return fn(*args, **kwargs)
@@ -186,14 +211,6 @@ def deprecated_params(**specs):
return decorate
-def deprecated_option_value(parameter_value, default_value, warning_text):
- if parameter_value is None:
- return default_value
- else:
- warn_deprecated(warning_text)
- return parameter_value
-
-
def _sanitize_restructured_text(text):
def repl(m):
type_, name = m.group(1, 2)
@@ -206,7 +223,7 @@ def _sanitize_restructured_text(text):
def _decorate_cls_with_warning(
- cls, constructor, wtype, message, docstring_header=None
+ cls, constructor, wtype, message, version, docstring_header=None
):
doc = cls.__doc__ is not None and cls.__doc__ or ""
if docstring_header is not None:
@@ -238,12 +255,16 @@ def _decorate_cls_with_warning(
setattr(
cls,
constructor,
- _decorate_with_warning(constructor_fn, wtype, message, None),
+ _decorate_with_warning(
+ constructor_fn, wtype, message, version, None
+ ),
)
return cls
-def _decorate_with_warning(func, wtype, message, docstring_header=None):
+def _decorate_with_warning(
+ func, wtype, message, version, docstring_header=None
+):
"""Wrap a function with a warnings.warn and augmented docstring."""
message = _sanitize_restructured_text(message)
@@ -263,7 +284,9 @@ def _decorate_with_warning(func, wtype, message, docstring_header=None):
def warned(fn, *args, **kwargs):
skip_warning = kwargs.pop("_sa_skip_warning", False)
if not skip_warning:
- warnings.warn(message + warning_only, wtype, stacklevel=3)
+ _warn_with_version(
+ message + warning_only, version, wtype, stacklevel=3
+ )
return fn(*args, **kwargs)
doc = func.__doc__ is not None and func.__doc__ or ""
@@ -276,5 +299,7 @@ def _decorate_with_warning(func, wtype, message, docstring_header=None):
decorated = warned(func)
decorated.__doc__ = doc
- decorated._sa_warn = lambda: warnings.warn(message, wtype, stacklevel=3)
+ decorated._sa_warn = lambda: _warn_with_version(
+ message, version, wtype, stacklevel=3
+ )
return decorated