Adds support for custom message sending.

Messages can now be sent to only one Observer if needed.
This commit is contained in:
2012-10-26 16:03:40 +02:00
parent 5fa599efbf
commit 2718195eb8
2 changed files with 17 additions and 16 deletions

View File

@@ -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
return False

View File

@@ -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()
unittest.main()