|  | @@ -478,117 +478,3 @@ def cry():
 | 
	
		
			
				|  |  |      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)
 |