| 
					
				 | 
			
			
				@@ -438,3 +438,119 @@ def cry(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         pprint(frame.f_locals, stream=out) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         out.write("\n\n") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     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) 
			 |