| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | # -*- coding: utf-8 -*-"""    celery.local    ~~~~~~~~~~~~    This module contains critical utilities that    needs to be loaded as soon as possible, and that    shall not load any third party modules.    :copyright: (c) 2009 - 2011 by Ask Solem.    :license: BSD, see LICENSE for more details."""from __future__ import absolute_importdef try_import(module):    """Try to import and return module, or return    None if the module does not exist."""    from importlib import import_module    try:        return import_module(module)    except ImportError:        passclass Proxy(object):    """Proxy to another object."""    # Code stolen from werkzeug.local.Proxy.    __slots__ = ('__local', '__dict__', '__name__')    def __init__(self, local, name=None):        object.__setattr__(self, '_Proxy__local', local)        object.__setattr__(self, '__name__', name)    def _get_current_object(self):        """Return the current object.  This is useful if you want the real        object behind the proxy at a time for performance reasons or because        you want to pass the object into a different context.        """        if not hasattr(self.__local, '__release_local__'):            return self.__local()        try:            return getattr(self.__local, self.__name__)        except AttributeError:            raise RuntimeError('no object bound to %s' % self.__name__)    @property    def __dict__(self):        try:            return self._get_current_object().__dict__        except RuntimeError:            raise AttributeError('__dict__')    def __repr__(self):        try:            obj = self._get_current_object()        except RuntimeError:            return '<%s unbound>' % self.__class__.__name__        return repr(obj)    def __nonzero__(self):        try:            return bool(self._get_current_object())        except RuntimeError:            return False    def __unicode__(self):        try:            return unicode(self._get_current_object())        except RuntimeError:            return repr(self)    def __dir__(self):        try:            return dir(self._get_current_object())        except RuntimeError:            return []    def __getattr__(self, name):        if name == '__members__':            return dir(self._get_current_object())        return getattr(self._get_current_object(), name)    def __setitem__(self, key, value):        self._get_current_object()[key] = value    def __delitem__(self, key):        del self._get_current_object()[key]    def __setslice__(self, i, j, seq):        self._get_current_object()[i:j] = seq    def __delslice__(self, i, j):        del self._get_current_object()[i:j]    __setattr__ = lambda x, n, v: setattr(x._get_current_object(), n, v)    __delattr__ = lambda x, n: delattr(x._get_current_object(), n)    __str__ = lambda x: str(x._get_current_object())    __lt__ = lambda x, o: x._get_current_object() < o    __le__ = lambda x, o: x._get_current_object() <= o    __eq__ = lambda x, o: x._get_current_object() == o    __ne__ = lambda x, o: x._get_current_object() != o    __gt__ = lambda x, o: x._get_current_object() > o    __ge__ = lambda x, o: x._get_current_object() >= o    __cmp__ = lambda x, o: cmp(x._get_current_object(), o)    __hash__ = lambda x: hash(x._get_current_object())    __call__ = lambda x, *a, **kw: x._get_current_object()(*a, **kw)    __len__ = lambda x: len(x._get_current_object())    __getitem__ = lambda x, i: x._get_current_object()[i]    __iter__ = lambda x: iter(x._get_current_object())    __contains__ = lambda x, i: i in x._get_current_object()    __getslice__ = lambda x, i, j: x._get_current_object()[i:j]    __add__ = lambda x, o: x._get_current_object() + o    __sub__ = lambda x, o: x._get_current_object() - o    __mul__ = lambda x, o: x._get_current_object() * o    __floordiv__ = lambda x, o: x._get_current_object() // o    __mod__ = lambda x, o: x._get_current_object() % o    __divmod__ = lambda x, o: x._get_current_object().__divmod__(o)    __pow__ = lambda x, o: x._get_current_object() ** o    __lshift__ = lambda x, o: x._get_current_object() << o    __rshift__ = lambda x, o: x._get_current_object() >> o    __and__ = lambda x, o: x._get_current_object() & o    __xor__ = lambda x, o: x._get_current_object() ^ o    __or__ = lambda x, o: x._get_current_object() | o    __div__ = lambda x, o: x._get_current_object().__div__(o)    __truediv__ = lambda x, o: x._get_current_object().__truediv__(o)    __neg__ = lambda x: -(x._get_current_object())    __pos__ = lambda x: +(x._get_current_object())    __abs__ = lambda x: abs(x._get_current_object())    __invert__ = lambda x: ~(x._get_current_object())    __complex__ = lambda x: complex(x._get_current_object())    __int__ = lambda x: int(x._get_current_object())    __long__ = lambda x: long(x._get_current_object())    __float__ = lambda x: float(x._get_current_object())    __oct__ = lambda x: oct(x._get_current_object())    __hex__ = lambda x: hex(x._get_current_object())    __index__ = lambda x: x._get_current_object().__index__()    __coerce__ = lambda x, o: x.__coerce__(x, o)    __enter__ = lambda x: x.__enter__()    __exit__ = lambda x, *a, **kw: x.__exit__(*a, **kw)
 |