diff options
author | Jason Kirtland <jek@discorporate.us> | 2008-10-17 19:19:05 +0000 |
---|---|---|
committer | Jason Kirtland <jek@discorporate.us> | 2008-10-17 19:19:05 +0000 |
commit | 6481d24642488bd445bc0ab29d211fe468814e1c (patch) | |
tree | 6bf63fd69511906d607a80e6b3ad61d68196f9a7 /lib/sqlalchemy/util.py | |
parent | fc35f5b6e0cc67044265baa5af181bbfcd6e469b (diff) | |
download | sqlalchemy-6481d24642488bd445bc0ab29d211fe468814e1c.tar.gz |
Cache polymorphic_iterator in UOWTask; substantial savings for polymorphism-heavy workloads.
Diffstat (limited to 'lib/sqlalchemy/util.py')
-rw-r--r-- | lib/sqlalchemy/util.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py index 88245945e..770b48796 100644 --- a/lib/sqlalchemy/util.py +++ b/lib/sqlalchemy/util.py @@ -395,6 +395,19 @@ def iterate_attributes(cls): yield (key, c.__dict__[key]) break +class lazy_property(object): + """A read-only @property that is only evaluated once.""" + 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 None + obj.__dict__[self.__name__] = result = self.fget(obj) + return result + # from paste.deploy.converters def asbool(obj): if isinstance(obj, (str, unicode)): |