Files @ ae5ac36cdf83
Branch filter:

Location: kallithea/rhodecode/lib/vcs/utils/lazy.py

Mads Kiilerich
pull request: use unionrepo instead of outgoing

This makes it possible to look the 'moving target' symbols up in the right repo.

Using a revset with the right revisions also removes the need for pruning
changesets that are outside the requested range.

It will also not be confused by changesets that for some reason has been pulled
to the repo but haven't been merged yet. They are going to be 'merged' by the
'pull' request and should thus be a part of what is reviewed.
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