diff --git a/Observer.py b/Observer.py index 1212408..6cab621 100644 --- a/Observer.py +++ b/Observer.py @@ -24,7 +24,6 @@ Simply copy/paste this file and import Observer to start using it. """ import json -from StringIO import StringIO class Observer(): @@ -51,7 +50,6 @@ class Observer(): A notification updates message value """ ut = ObsUtility() - mess = json.loads(message) if ut.is_json_valid(message): self.message = message @@ -87,7 +85,6 @@ class Observable(): """ Adds observer to notification list. """ - # FIXME: Check name unique if not isinstance(observer, Observer): raise TypeError("Subscriber must be Observer") @@ -110,9 +107,12 @@ class Observable(): """ Sends notification message to all subscribed observer """ + # sends message only to those needed + dest = json.loads(mess)["name"] + for observer in self.obs_collection: - #print "sent %s to %s" % (mess, str(observer)) - observer.update(mess) + if (len(dest) == 0 ) or (observer.name == dest): + observer.update(mess) def set_val(self, val): """ @@ -126,7 +126,7 @@ class Observable(): else: raise TypeError("Expecting a valid JSon Object") - self.message = val + self.message = val # saves last message sent self.__notify(self.message) @@ -146,8 +146,8 @@ class ObsUtility(): # Cheks for the presence of tags try: #simply access all - expected = sorted(["name", "group", "type", "data"]) # should be placed somewhere else + expected = sorted(["name", "group", "type", "data"]) # should be placed somewhere else got = sorted(mess.keys()) return (expected == got) except KeyError: - return False \ No newline at end of file + return False diff --git a/testObserver.py b/testObserver.py index 5c9d23c..77298f0 100644 --- a/testObserver.py +++ b/testObserver.py @@ -38,8 +38,6 @@ class TestObserver(unittest.TestCase): self.myObservable = obs.Observable() - self.default_mess = "message" - self.name1 = "myObserver1" self.myObserver1 = obs.Observer(self.name1) self.name2 = "myObserver2" @@ -69,7 +67,6 @@ class TestObserver(unittest.TestCase): self.assertRaises(TypeError, lambda: self.myObserver1.update([4, 2])) self.assertRaises(TypeError, lambda: self.myObserver1.update(None)) - ## Observable def testIsJsonValid(self): self.assertEquals(True, self.ut.is_json_valid('{"name": "Bob","group": "","type": "","data": 42}')) @@ -113,18 +110,22 @@ class TestObserver(unittest.TestCase): self.myObservable.subscribe(self.myObserver1) self.myObservable.subscribe(self.myObserver2) - test = '{"name": "R2D2","group": "","type": "","data": 42}' + test = '{"name": "","group": "","type": "R2D2","data": 42}' self.myObservable.set_val(test) self.assertEquals(self.myObserver1.message, test) self.assertEquals(self.myObserver2.message, test) - self.myObservable.unsubscribe(self.myObserver1) - test2 = '{"name": "C3PO","group": "","type": "","data": 42}' - self.myObservable.set_val(test2 ) + test2 = '{"name": "","group": "C3PO","type": "","data": 42}' + self.myObservable.set_val(test2) self.assertEquals(self.myObserver1.message, test) self.assertEquals(self.myObserver2.message, test2) + self.myObservable.subscribe(self.myObserver1) + test3 = '{"name": "myObserver1","group": "C3PO","type": "","data": 42}' + self.myObservable.set_val(test3) + self.assertEquals(self.myObserver1.message, test3) + self.assertEquals(self.myObserver2.message, test2) if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main()