Mercurial > kallithea
view rhodecode/lib/vcs/utils/lazy.py @ 3774:60335b702a00 beta
invalidation: don't create CacheInvalidation records on startup
Creating the records early gave an advantage before lightweight was introduced.
With lightweight it is no longer necessary.
The records will be created on demand anyway and there is no reason to create and
maintain them before they are used.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Wed, 03 Apr 2013 15:56:12 +0200 |
parents | f134d125fb67 |
children |
line wrap: on
line source
class _Missing(object): def __repr__(self): return 'no value' def __reduce__(self): return '_missing' _missing = _Missing() 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 value = obj.__dict__.get(self.__name__, _missing) if value is _missing: value = self._func(obj) obj.__dict__[self.__name__] = value return value 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__ value = obj.__tl_dict__.get(self.__name__, _missing) if value is _missing: value = self._func(obj) obj.__tl_dict__[self.__name__] = value return value