| 
					
				 | 
			
			
				@@ -157,7 +157,7 @@ class Proxy(object): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     __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 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    __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 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -212,12 +212,27 @@ class PromiseProxy(Proxy): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     """ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    __slots__ = ('__pending__', ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def _get_current_object(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return object.__getattribute__(self, '__thing') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         except AttributeError: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return self.__evaluate__() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    def __then__(self, fun, *args, **kwargs): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if self.__evaluated__(): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return fun(*args, **kwargs) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        from collections import deque 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pending = object.__getattribute__(self, '__pending__') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        except AttributeError: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pending = None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if pending is None: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pending = deque() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            object.__setattr__(self, '__pending__', pending) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        pending.append((fun, args, kwargs)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     def __evaluated__(self): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             object.__getattribute__(self, '__thing') 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -243,6 +258,20 @@ class PromiseProxy(Proxy): 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 except AttributeError:  # pragma: no cover 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     # May mask errors so ignore 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pending = object.__getattribute__(self, '__pending__') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            except AttributeError: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            else: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    while pending: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        fun, args, kwargs = pending.popleft() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        fun(*args, **kwargs) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                finally: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    try: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        object.__delattr__(self, '__pending__') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    except AttributeError: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        pass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 def maybe_evaluate(obj): 
			 |