Home | History | Annotate | Download | only in idlelib
      1 class Delegator:
      2 
      3     # The cache is only used to be able to change delegates!
      4 
      5     def __init__(self, delegate=None):
      6         self.delegate = delegate
      7         self.__cache = {}
      8 
      9     def __getattr__(self, name):
     10         attr = getattr(self.delegate, name) # May raise AttributeError
     11         setattr(self, name, attr)
     12         self.__cache[name] = attr
     13         return attr
     14 
     15     def resetcache(self):
     16         for key in self.__cache.keys():
     17             try:
     18                 delattr(self, key)
     19             except AttributeError:
     20                 pass
     21         self.__cache.clear()
     22 
     23     def cachereport(self):
     24         keys = self.__cache.keys()
     25         keys.sort()
     26         print keys
     27 
     28     def setdelegate(self, delegate):
     29         self.resetcache()
     30         self.delegate = delegate
     31 
     32     def getdelegate(self):
     33         return self.delegate
     34