1 """
2 from Thinking in Python, Bruce Eckel
3 http://mindview.net/Books/TIPython
4
5 Class support for "observer" pattern.
6
7 The observer class is the base class
8 for all smartcard package observers.
9
10 Known subclasses:
11 smartcard.ReaderObserver
12
13 """
14
15 from smartcard.Synchronization import *
16
17
19
21 '''Called when the observed object is
22 modified. You call an Observable object's
23 notifyObservers method to notify all the
24 object's observers of the change.'''
25 pass
26
27
29
34
36 if observer not in self.obs:
37 self.obs.append(observer)
38
41
43 '''If 'changed' indicates that this object
44 has changed, notify all its observers, then
45 call clearChanged(). Each observer has its
46 update() called with two arguments: this
47 observable object and the generic 'arg'.'''
48
49 self.mutex.acquire()
50 try:
51 if not self.changed:
52 return
53
54
55 localArray = self.obs[:]
56 self.clearChanged()
57 finally:
58 self.mutex.release()
59
60 for observer in localArray:
61 observer.update(self, arg)
62
65
68
71
74
77
78 synchronize(Observable,
79 "addObserver deleteObserver deleteObservers " +
80 "setChanged clearChanged hasChanged " +
81 "countObservers")
82
83