observerNotifier.py (1516B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\script\util\observerNotifier.py 2 3 4 class ObserverNotifier(object): 5 6 def __init__(self): 7 self.subscribers = {} 8 9 def get_value(self): 10 raise NotImplementedError('Must implement ObserverNotifier::get_value in derived class') 11 12 def start_updates(self): 13 raise NotImplementedError('Must implement ObserverNotifier::start_updates in derived class') 14 15 def stop_updates(self): 16 raise NotImplementedError('Must implement ObserverNotifier::stop_updates in derived class') 17 18 def register_subscriber(self, subscriber, callback): 19 if subscriber not in self.subscribers: 20 self.subscribers[subscriber] = callback 21 self._notify_subscriber(subscriber, self.get_value()) 22 self.start_updates() 23 24 def unregister_subscriber(self, subscriber): 25 if subscriber in self.subscribers: 26 del self.subscribers[subscriber] 27 if not self.subscribers: 28 self.stop_updates() 29 30 def _notify_subscribers(self, update): 31 all_subscribers = self.subscribers.copy() 32 for subscriber in all_subscribers: 33 self._notify_subscriber(subscriber, update) 34 35 def _notify_subscriber(self, subscriber, update): 36 if not subscriber or getattr(subscriber, 'destroyed', False): 37 self.unregister_subscriber(subscriber) 38 elif subscriber in self.subscribers: 39 self.subscribers[subscriber](update)