summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2020-01-05 21:24:35 -0600
committerMichael Merickel <michael@merickel.org>2020-01-05 21:24:35 -0600
commit5cad7ad7ce47f1fe151b40ae9398fb5cbbfd3806 (patch)
treebc8d03a5c7927ea3ae2a868fd5af8e1a2cff7c6b /src
parentdb8ab619a09b90c633d78ce5487703bf72ea4111 (diff)
downloadpyramid-5cad7ad7ce47f1fe151b40ae9398fb5cbbfd3806.tar.gz
pyramid-5cad7ad7ce47f1fe151b40ae9398fb5cbbfd3806.tar.bz2
pyramid-5cad7ad7ce47f1fe151b40ae9398fb5cbbfd3806.zip
handle settable property same as reify
Diffstat (limited to 'src')
-rw-r--r--src/pyramid/util.py32
1 files changed, 17 insertions, 15 deletions
diff --git a/src/pyramid/util.py b/src/pyramid/util.py
index 9024fe816..504516631 100644
--- a/src/pyramid/util.py
+++ b/src/pyramid/util.py
@@ -74,24 +74,23 @@ def as_sorted_tuple(val):
class SettableProperty(object):
- def __init__(self, wrapped, name):
+ def __init__(self, wrapped):
self.wrapped = wrapped
- self.name = name
functools.update_wrapper(self, wrapped)
def __get__(self, obj, type=None):
if obj is None: # pragma: no cover
return self
- value = obj.__dict__.get(self.name, _marker)
+ value = obj.__dict__.get(self.wrapped.__name__, _marker)
if value is _marker:
value = self.wrapped(obj)
return value
def __set__(self, obj, value):
- obj.__dict__[self.name] = value
+ obj.__dict__[self.wrapped.__name__] = value
def __delete__(self, obj):
- del obj.__dict__[self.name]
+ del obj.__dict__[self.wrapped.__name__]
class InstancePropertyHelper(object):
@@ -125,16 +124,19 @@ class InstancePropertyHelper(object):
is_data_descriptor = hasattr(callable, '__set__')
if reify and is_data_descriptor:
raise ValueError('cannot reify a data descriptor')
- fn = callable
- if reify:
- import pyramid.decorator # avoid circular import
-
- fn = lambda this: callable(this)
- fn.__name__ = name
- fn.__doc__ = callable.__doc__
- fn = pyramid.decorator.reify(fn)
- elif not is_data_descriptor:
- fn = SettableProperty(callable, name)
+ if is_data_descriptor:
+ fn = callable
+ else:
+ wrapped = lambda this: callable(this)
+ wrapped.__name__ = name
+ wrapped.__doc__ = callable.__doc__
+
+ if reify:
+ import pyramid.decorator # avoid circular import
+
+ fn = pyramid.decorator.reify(wrapped)
+ else:
+ fn = SettableProperty(wrapped)
return name, fn