Add tests for `znflow.Property`
Opened this issue · 0 comments
PythonFZ commented
The following class is not tested enough.
Ideally, there would also be another way without entirely reimplementing the property class but I don't know how.
Lines 23 to 73 in a24ee7c
class Property: | |
"""Custom Property with disabled graph. | |
References | |
---------- | |
Adapted from https://docs.python.org/3/howto/descriptor.html#properties | |
""" | |
def __init__(self, fget=None, fset=None, fdel=None, doc=None): | |
self.fget = disable_graph()(fget) | |
self.fset = disable_graph()(fset) | |
self.fdel = disable_graph()(fdel) | |
if doc is None and fget is not None: | |
doc = fget.__doc__ | |
self.__doc__ = doc | |
self._name = "" | |
def __set_name__(self, owner, name): | |
self._name = name | |
def __get__(self, obj, objtype=None): | |
if obj is None: | |
return self | |
if self.fget is None: | |
raise AttributeError(f"property '{self._name}' has no getter") | |
return self.fget(obj) | |
def __set__(self, obj, value): | |
if self.fset is None: | |
raise AttributeError(f"property '{self._name}' has no setter") | |
self.fset(obj, value) | |
def __delete__(self, obj): | |
if self.fdel is None: | |
raise AttributeError(f"property '{self._name}' has no deleter") | |
self.fdel(obj) | |
def getter(self, fget): | |
prop = type(self)(fget, self.fset, self.fdel, self.__doc__) | |
prop._name = self._name | |
return prop | |
def setter(self, fset): | |
prop = type(self)(self.fget, fset, self.fdel, self.__doc__) | |
prop._name = self._name | |
return prop | |
def deleter(self, fdel): | |
prop = type(self)(self.fget, self.fset, fdel, self.__doc__) | |
prop._name = self._name | |
return prop |