Files
@ 5ee341209d7f
Branch filter:
Location: kallithea/rhodecode/lib/vcs/utils/lazy.py - annotation
5ee341209d7f
1.5 KiB
text/x-python
action logger will try to get IP address automatically based
on tmpl_context var (if defined)
on tmpl_context var (if defined)
f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 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 f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab 7ae9939409ab f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 f134d125fb67 | 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
|