diff options
author | Federico Caselli <cfederico87@gmail.com> | 2020-04-08 20:26:21 +0200 |
---|---|---|
committer | Federico Caselli <cfederico87@gmail.com> | 2020-04-09 00:33:22 +0200 |
commit | a9b068ae564e5e775e312373088545b75aeaa1b0 (patch) | |
tree | 3a20c79acfefe49b62ee4bca360bb11001f9eec9 /lib/sqlalchemy/util/deprecations.py | |
parent | ecca4fe3f8aebc5b42c2acda2e5d28d6a90a821e (diff) | |
download | sqlalchemy-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.py | 69 |
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 |