summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/util/langhelpers.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-06-08 18:36:27 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2015-06-08 18:36:27 -0400
commit657be357de569ced699f44bdd96c6ba4e650b492 (patch)
tree53dbd0641c26d2e7a0a79a980a56ffd0c38fab05 /lib/sqlalchemy/util/langhelpers.py
parent0e1da3265445fc2afaa54c4025bcab442199dc2b (diff)
downloadsqlalchemy-657be357de569ced699f44bdd96c6ba4e650b492.tar.gz
- Fixed an internal "memoization" routine for method types such
that a Python descriptor is no longer used; repairs inspectability of these methods including support for Sphinx documentation.
Diffstat (limited to 'lib/sqlalchemy/util/langhelpers.py')
-rw-r--r--lib/sqlalchemy/util/langhelpers.py30
1 files changed, 9 insertions, 21 deletions
diff --git a/lib/sqlalchemy/util/langhelpers.py b/lib/sqlalchemy/util/langhelpers.py
index 3d7bfad0a..499515142 100644
--- a/lib/sqlalchemy/util/langhelpers.py
+++ b/lib/sqlalchemy/util/langhelpers.py
@@ -755,7 +755,7 @@ class memoized_property(object):
obj.__dict__.pop(name, None)
-class memoized_instancemethod(object):
+def memoized_instancemethod(fn):
"""Decorate a method memoize its return value.
Best applied to no-arg methods: memoization is not sensitive to
@@ -764,26 +764,14 @@ class memoized_instancemethod(object):
"""
- def __init__(self, fget, doc=None):
- self.fget = fget
- self.__doc__ = doc or fget.__doc__
- self.__name__ = fget.__name__
-
- def __get__(self, obj, cls):
- if obj is None:
- return self
-
- def oneshot(*args, **kw):
- result = self.fget(obj, *args, **kw)
- memo = lambda *a, **kw: result
- memo.__name__ = self.__name__
- memo.__doc__ = self.__doc__
- obj.__dict__[self.__name__] = memo
- return result
-
- oneshot.__name__ = self.__name__
- oneshot.__doc__ = self.__doc__
- return oneshot
+ def oneshot(self, *args, **kw):
+ result = fn(self, *args, **kw)
+ memo = lambda *a, **kw: result
+ memo.__name__ = fn.__name__
+ memo.__doc__ = fn.__doc__
+ self.__dict__[fn.__name__] = memo
+ return result
+ return update_wrapper(oneshot, fn)
class group_expirable_memoized_property(object):