diff options
| author | Michael Merickel <michael@merickel.org> | 2020-01-05 19:24:19 -0600 |
|---|---|---|
| committer | Michael Merickel <michael@merickel.org> | 2020-01-05 19:50:29 -0600 |
| commit | db8ab619a09b90c633d78ce5487703bf72ea4111 (patch) | |
| tree | 395a180302bf8a3053970e3d90d1ea8b1b3dc810 | |
| parent | 1b555e2b7911bc3d8cee811986ec67c88fa36cad (diff) | |
| download | pyramid-db8ab619a09b90c633d78ce5487703bf72ea4111.tar.gz pyramid-db8ab619a09b90c633d78ce5487703bf72ea4111.tar.bz2 pyramid-db8ab619a09b90c633d78ce5487703bf72ea4111.zip | |
support using descriptors other than property
| -rw-r--r-- | src/pyramid/util.py | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/src/pyramid/util.py b/src/pyramid/util.py index ca644dcce..9024fe816 100644 --- a/src/pyramid/util.py +++ b/src/pyramid/util.py @@ -115,26 +115,26 @@ class InstancePropertyHelper(object): (name, property) pair. """ - is_property = isinstance(callable, property) - if is_property: - fn = callable - if name is None: - raise ValueError('must specify "name" for a property') - if reify: - raise ValueError('cannot reify a property') - elif name is not None: - fn = lambda this: callable(this) - fn.__name__ = get_callable_name(name) - fn.__doc__ = callable.__doc__ - else: + if name is None: + if not hasattr(callable, '__name__'): + raise ValueError( + 'missing __name__, must specify "name" for property' + ) name = callable.__name__ - fn = callable + name = get_callable_name(name) + 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_property: - fn = SettableProperty(fn, name) + elif not is_data_descriptor: + fn = SettableProperty(callable, name) return name, fn |
