|
@@ -478,117 +478,3 @@ def cry():
|
|
return out.getvalue()
|
|
return out.getvalue()
|
|
|
|
|
|
|
|
|
|
-class LocalProxy(object):
|
|
|
|
- """Code stolen from werkzeug.local.LocalProxy."""
|
|
|
|
- __slots__ = ('__local', '__dict__', '__name__')
|
|
|
|
-
|
|
|
|
- def __init__(self, local, name=None):
|
|
|
|
- object.__setattr__(self, '_LocalProxy__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)
|
|
|