From ae7e74487e5aff1b9ebb832a704055ddcf042567 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 12 Jan 2023 12:33:09 -0500 Subject: [PATCH] replace @decorated_property decorator This decorator is no longer necessary as of Mypy 0.981 [1]. In current mypy versions, we require direct use of `@property` for return types of these methods to be recognized [1] https://github.com/python/mypy/issues/1362 Change-Id: Ibc36083dec854c5f9140a9b621e9bf9d5bb4fb61 --- lib/sqlalchemy/engine/default.py | 3 +- lib/sqlalchemy/orm/instrumentation.py | 3 +- lib/sqlalchemy/pool/base.py | 6 ++-- lib/sqlalchemy/sql/elements.py | 6 ++-- lib/sqlalchemy/sql/selectable.py | 6 ++-- lib/sqlalchemy/util/__init__.py | 1 - lib/sqlalchemy/util/deprecations.py | 48 --------------------------- 7 files changed, 16 insertions(+), 57 deletions(-) diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index 4e7922658f..f8126fa30c 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -357,7 +357,8 @@ class DefaultDialect(Dialect): if insertmanyvalues_page_size is not _NoArg.NO_ARG: self.insertmanyvalues_page_size = insertmanyvalues_page_size - @util.deprecated_property( + @property + @util.deprecated( "2.0", "full_returning is deprecated, please use insert_returning, " "update_returning, delete_returning", diff --git a/lib/sqlalchemy/orm/instrumentation.py b/lib/sqlalchemy/orm/instrumentation.py index 9867c1c56a..4c911f3748 100644 --- a/lib/sqlalchemy/orm/instrumentation.py +++ b/lib/sqlalchemy/orm/instrumentation.py @@ -129,7 +129,8 @@ class ClassManager( _bases: List[ClassManager[Any]] - @util.deprecated_property( + @property + @util.deprecated( "1.4", message="The ClassManager.deferred_scalar_loader attribute is now " "named expired_attribute_loader", diff --git a/lib/sqlalchemy/pool/base.py b/lib/sqlalchemy/pool/base.py index 4611d16262..a77f652050 100644 --- a/lib/sqlalchemy/pool/base.py +++ b/lib/sqlalchemy/pool/base.py @@ -689,7 +689,8 @@ class _ConnectionRecord(ConnectionPoolEntry): self.dbapi_connection ) - @util.deprecated_property( + @property + @util.deprecated( "2.0", "The _ConnectionRecord.connection attribute is deprecated; " "please use 'driver_connection'", @@ -1234,7 +1235,8 @@ class _ConnectionFairy(PoolProxiedConnection): return None return self._connection_record.driver_connection - @util.deprecated_property( + @property + @util.deprecated( "2.0", "The _ConnectionFairy.connection attribute is deprecated; " "please use 'driver_connection'", diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py index 5538ca4f3a..748e9504b3 100644 --- a/lib/sqlalchemy/sql/elements.py +++ b/lib/sqlalchemy/sql/elements.py @@ -1712,7 +1712,8 @@ class ColumnElement( """ return self._anon_label(self._proxy_key) - @util.deprecated_property( + @property + @util.deprecated( "1.4", "The :attr:`_expression.ColumnElement.anon_label` attribute is now " "private, and the public accessor is deprecated.", @@ -1720,7 +1721,8 @@ class ColumnElement( def anon_label(self) -> str: return self._anon_name_label - @util.deprecated_property( + @property + @util.deprecated( "1.4", "The :attr:`_expression.ColumnElement.anon_key_label` attribute is " "now private, and the public accessor is deprecated.", diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index 1d283e83c2..54230d58a6 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -3413,7 +3413,8 @@ class SelectBase( """ return self.selected_columns.as_readonly() - @util.deprecated_property( + @property + @util.deprecated( "1.4", "The :attr:`_expression.SelectBase.c` and " ":attr:`_expression.SelectBase.columns` attributes " @@ -5531,7 +5532,8 @@ class Select( return self._compile_state_factory(self, None)._get_display_froms() - @util.deprecated_property( + @property + @util.deprecated( "1.4.23", "The :attr:`_expression.Select.froms` attribute is moved to " "the :meth:`_expression.Select.get_final_froms` method.", diff --git a/lib/sqlalchemy/util/__init__.py b/lib/sqlalchemy/util/__init__.py index cb69c28a74..d443cf0311 100644 --- a/lib/sqlalchemy/util/__init__.py +++ b/lib/sqlalchemy/util/__init__.py @@ -76,7 +76,6 @@ from .deprecations import became_legacy_20 as became_legacy_20 from .deprecations import deprecated as deprecated from .deprecations import deprecated_cls as deprecated_cls from .deprecations import deprecated_params as deprecated_params -from .deprecations import deprecated_property as deprecated_property from .deprecations import moved_20 as moved_20 from .deprecations import warn_deprecated as warn_deprecated from .langhelpers import add_parameter_text as add_parameter_text diff --git a/lib/sqlalchemy/util/deprecations.py b/lib/sqlalchemy/util/deprecations.py index 2322cee605..097150712a 100644 --- a/lib/sqlalchemy/util/deprecations.py +++ b/lib/sqlalchemy/util/deprecations.py @@ -96,54 +96,6 @@ def deprecated_cls( return decorate -def deprecated_property( - version: str, - message: Optional[str] = None, - add_deprecation_to_docstring: bool = True, - warning: Optional[Type[exc.SADeprecationWarning]] = None, - enable_warnings: bool = True, -) -> Callable[[Callable[..., Any]], property]: - """the @deprecated decorator with a @property. - - E.g.:: - - class Foo: - @deprecated_property("1.4", "thing is deprecated") - def thing(self): - return "thing" - - is equivalent to:: - - class Foo: - @property - @deprecated("1.4", "thing is deprecated") - def thing(self): - return "thing" - - How come? - - Because:: - - mypy: error: Decorated property not supported - - great! now it is. - - """ - - def decorate(fn: Callable[..., Any]) -> property: - return property( - deprecated( - version, - message=message, - add_deprecation_to_docstring=add_deprecation_to_docstring, - warning=warning, - enable_warnings=enable_warnings, - )(fn) - ) - - return decorate - - def deprecated( version: str, message: Optional[str] = None, -- 2.47.2