| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | class Delegator: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # The cache is only used to be able to change delegates! | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self, delegate=None): | 
					
						
							|  |  |  |         self.delegate = delegate | 
					
						
							|  |  |  |         self.__cache = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def __getattr__(self, name): | 
					
						
							|  |  |  |         attr = getattr(self.delegate, name) # May raise AttributeError | 
					
						
							|  |  |  |         setattr(self, name, attr) | 
					
						
							|  |  |  |         self.__cache[name] = attr | 
					
						
							|  |  |  |         return attr | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def resetcache(self): | 
					
						
							| 
									
										
										
										
											2007-08-23 05:25:55 +00:00
										 |  |  |         for key in self.__cache: | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |             try: | 
					
						
							|  |  |  |                 delattr(self, key) | 
					
						
							|  |  |  |             except AttributeError: | 
					
						
							|  |  |  |                 pass | 
					
						
							|  |  |  |         self.__cache.clear() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def cachereport(self): | 
					
						
							| 
									
										
										
										
											2007-08-23 05:25:55 +00:00
										 |  |  |         keys = list(self.__cache.keys()) | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |         keys.sort() | 
					
						
							| 
									
										
										
										
											2007-02-09 05:37:30 +00:00
										 |  |  |         print(keys) | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def setdelegate(self, delegate): | 
					
						
							|  |  |  |         self.resetcache() | 
					
						
							|  |  |  |         self.delegate = delegate | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def getdelegate(self): | 
					
						
							|  |  |  |         return self.delegate |