diff options
| author | Michael Merickel <michael@merickel.org> | 2020-01-05 18:47:52 -0600 |
|---|---|---|
| committer | Michael Merickel <michael@merickel.org> | 2020-01-05 18:56:04 -0600 |
| commit | c5dd748a3bc06b6e7e17797863bb363a2f377a5e (patch) | |
| tree | 0646e35718395b3abec0dfa8097aad385890609e /src | |
| parent | 148cf5138638ce6b1b92b4e13fe1444df9451e34 (diff) | |
| download | pyramid-c5dd748a3bc06b6e7e17797863bb363a2f377a5e.tar.gz pyramid-c5dd748a3bc06b6e7e17797863bb363a2f377a5e.tar.bz2 pyramid-c5dd748a3bc06b6e7e17797863bb363a2f377a5e.zip | |
allow overriding synthesized properties
Diffstat (limited to 'src')
| -rw-r--r-- | src/pyramid/util.py | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/pyramid/util.py b/src/pyramid/util.py index e552b37de..ca644dcce 100644 --- a/src/pyramid/util.py +++ b/src/pyramid/util.py @@ -73,6 +73,27 @@ def as_sorted_tuple(val): return val +class SettableProperty(object): + def __init__(self, wrapped, name): + 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) + if value is _marker: + value = self.wrapped(obj) + return value + + def __set__(self, obj, value): + obj.__dict__[self.name] = value + + def __delete__(self, obj): + del obj.__dict__[self.name] + + class InstancePropertyHelper(object): """A helper object for assigning properties and descriptors to instances. It is not normally possible to do this because descriptors must be @@ -113,7 +134,7 @@ class InstancePropertyHelper(object): fn = pyramid.decorator.reify(fn) elif not is_property: - fn = property(fn) + fn = SettableProperty(fn, name) return name, fn |
