Commit | Line | Data |
---|---|---|
86530b38 AT |
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 |