Files
@ bbe21df7ad48
Branch filter:
Location: kallithea/rhodecode/lib/vcs/utils/lazy.py - annotation
bbe21df7ad48
1.2 KiB
text/x-python
notifications changes
- closing pull requests will give notification about it
- more detailed notifications about commenting on changesets and pull requests
- closing pull requests will give notification about it
- more detailed notifications about commenting on changesets and pull requests
324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da c4d418b440d1 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da 324ac367a4da c4d418b440d1 324ac367a4da 324ac367a4da 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab | class LazyProperty(object):
"""
Decorator for easier creation of ``property`` from potentially expensive to
calculate attribute of the class.
Usage::
class Foo(object):
@LazyProperty
def bar(self):
print 'Calculating self._bar'
return 42
Taken from http://blog.pythonisito.com/2008/08/lazy-descriptors.html and
used widely.
"""
def __init__(self, func):
self._func = func
self.__module__ = func.__module__
self.__name__ = func.__name__
self.__doc__ = func.__doc__
def __get__(self, obj, klass=None):
if obj is None:
return self
result = obj.__dict__[self.__name__] = self._func(obj)
return result
import threading
class ThreadLocalLazyProperty(LazyProperty):
"""
Same as above but uses thread local dict for cache storage.
"""
def __get__(self, obj, klass=None):
if obj is None:
return self
if not hasattr(obj, '__tl_dict__'):
obj.__tl_dict__ = threading.local().__dict__
result = obj.__tl_dict__[self.__name__] = self._func(obj)
return result
|