1 from support import *
2
4 """Mix-in entity class that supports an audit trail"""
5
8
10 str = '%s by %s at %s' % \
11 (string.capitalize(entry['what']),
12 entry['who'],
13 time.strftime('%x %X',time.localtime(entry['when'])))
14 return str
15
16 - def getHistory(self,key):
17 return map(self.formatHistory,self.__getHistory(key))
18
19 - def __getHistory(self,key):
20 """Returns the history of changes to this entity's state/goal value"""
21 try:
22 history = self.history[key]
23 except AttributeError:
24 history = []
25 self.history = {key:history}
26 except KeyError:
27 history = []
28 self.history[key] = history
29 return history
30
31 - def extendHistory(self,entry,key=None):
32 if key:
33 history = self.__getHistory(key)
34 if len(history) > 0:
35 lastEntry = history[0]
36 if lastEntry['who'] != entry['who'] \
37 or lastEntry['what'] != entry['what'] \
38 or entry['what'] == 'stepped':
39
40 history.insert(0,entry)
41 elif lastEntry['what'] == 'modified':
42 lastEntry['when'] = entry['when']
43 else:
44 history.append(entry)
45 else:
46 for key in self.getStateFeatures():
47 self.extendHistory(entry,key)
48 for key in self.getGoals():
49 self.extendHistory(entry,key)
50 for entity in self.getEntityBeliefs():
51 entity.extendHistory(entry)
52
53 - def setState(self,feature,value,log=None):
59