1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 __maintainer__ = 'Florian Boucault <florian@fluendo.com>'
19
20 import weakref
21
22 from elisa.core import log
23
25 """Observable objects can be observed by multiple
26 L{elisa.core.observers.observer.Observer} instances, each of them
27 getting notified of any changes occuring to the former.
28 """
29
30
31 _observers = []
32
36
38 """Attach an observer which will then be notified of all the changes
39 applied to the observable.
40
41 @param observer: observer to attach
42 @type observer: L{elisa.core.observers.observer.Observer}
43 """
44 self.debug("Adding observer %r" % observer)
45 real_observers = [weak_observer() for weak_observer in self._observers]
46 if observer not in real_observers:
47 self._observers.append(weakref.ref(observer))
48 else:
49 self.debug("Observer %r was already observing" % observer)
50
52 """Detach an observer which will not be notified anymore of changes
53 applied to the observable.
54
55 @param observer: observer to detach
56 @type observer: L{elisa.core.observers.observer.Observer}
57 """
58 self.debug("Removing observer %r", observer)
59 refs = weakref.getweakrefs(observer)
60 for ref in refs:
61 try:
62 self._observers.remove(ref)
63 except ValueError:
64 pass
65 """
66 # ignore the call if the observer was not known
67 self.debug("Observer %r was not observing", observer)
68 """
69
84
92