Subclass removed_property from property

This allows for a more "normal" implementation.

Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Change-Id: I1f4393b6dfd721f05c782260f2c58d1cc6d1ea31
This commit is contained in:
Stephen Finucane
2026-01-06 18:19:13 +00:00
parent 259bb57a23
commit 775fa84515

View File

@@ -33,7 +33,7 @@ def _fetch_first_result(fget, fset, fdel, apply_func, value_not_found=None):
return value_not_found
class removed_property:
class removed_property(property):
"""Property descriptor that deprecates a property.
This works like the ``@property`` descriptor but can be used instead to
@@ -73,18 +73,15 @@ class removed_property:
removal_version=None,
message=None,
):
self.fset = fset
self.fget = fget
self.fdel = fdel
if doc is None and inspect.isfunction(fget):
doc = getattr(fget, '__doc__', None)
super().__init__(fget, fset, fdel, doc)
self.stacklevel = stacklevel
self.category = category
self.version = version
self.removal_version = removal_version
self.message = message
if doc is None and inspect.isfunction(fget):
doc = getattr(fget, '__doc__', None)
self._message_cache = {}
self.__doc__ = doc
def _fetch_message_from_cache(self, kind):
try:
@@ -108,20 +105,17 @@ class removed_property:
return out_message
def __call__(self, fget, **kwargs):
self.fget = fget
self.message = kwargs.get('message', self.message)
self.version = kwargs.get('version', self.version)
self.removal_version = kwargs.get(
'removal_version', self.removal_version
return type(self)(
fget,
self.fset,
self.fdel,
kwargs.get('doc', getattr(fget, '__doc__', self.__doc__)),
kwargs.get('stacklevel', self.stacklevel),
kwargs.get('category', self.category),
kwargs.get('version', self.version),
kwargs.get('removal_version', self.removal_version),
kwargs.get('message', self.message),
)
self.stacklevel = kwargs.get('stacklevel', self.stacklevel)
self.category = kwargs.get('category', self.category)
self.__doc__ = kwargs.get(
'doc', getattr(fget, '__doc__', self.__doc__)
)
# Regenerate all the messages...
self._message_cache.clear()
return self
def __delete__(self, obj):
if self.fdel is None:
@@ -153,31 +147,43 @@ class removed_property:
return self.fget(obj)
def getter(self, fget):
o = type(self)(fget, self.fset, self.fdel, self.__doc__)
o.message = self.message
o.version = self.version
o.stacklevel = self.stacklevel
o.removal_version = self.removal_version
o.category = self.category
return o
return type(self)(
fget,
self.fset,
self.fdel,
self.__doc__,
self.stacklevel,
self.category,
self.version,
self.removal_version,
self.message,
)
def setter(self, fset):
o = type(self)(self.fget, fset, self.fdel, self.__doc__)
o.message = self.message
o.version = self.version
o.stacklevel = self.stacklevel
o.removal_version = self.removal_version
o.category = self.category
return o
return type(self)(
self.fget,
fset,
self.fdel,
self.__doc__,
self.stacklevel,
self.category,
self.version,
self.removal_version,
self.message,
)
def deleter(self, fdel):
o = type(self)(self.fget, self.fset, fdel, self.__doc__)
o.message = self.message
o.version = self.version
o.stacklevel = self.stacklevel
o.removal_version = self.removal_version
o.category = self.category
return o
return type(self)(
self.fget,
self.fset,
fdel,
self.__doc__,
self.stacklevel,
self.category,
self.version,
self.removal_version,
self.message,
)
def remove(