class TestSession(unittest.TestCase): def setUp(self): self.bus = VoomBus() def test_1(self): session = {} @receiver(str) def doer1(s): self.bus.session[s] = True session.update(self.bus.session) self.bus.register(doer1) with self.bus.using(dict(a=1, b=2)): self.bus.publish("meow") assert session == dict(a=1, b=2, meow=True) session = {} self.bus.publish("meow") assert session == dict(meow=True) @receiver(str) def doer2(s): if s == "meow": self.bus.publish("grr") self.bus.register(doer2) session = {} self.bus.publish("meow") assert session == dict(meow=True, grr=True)
class TestDefer(unittest.TestCase): def setUp(self): self.bus = VoomBus() def test1(self): @receiver(str) def h1(msg): self.msgs.append(msg) self.bus.defer(1) @receiver(int, str) def h2(msg): self.msgs.append(msg) self.msgs = [] self.bus.register(h1) self.bus.register(h2) self.bus.publish("s") assert self.msgs == ['s', 's', 1]
class TestHeaders(unittest.TestCase): def setUp(self): self.bus = VoomBus() def test_arbitrary_headers(self): uni = u'\u014b' r = ChainedDict(**{'foo': 1, uni: 2}) assert r['foo'] == 1 assert r[uni] == 2 assert uni in r assert r.get('bar') == None assert 'bar' not in r def test_unicode(self): uni = u'\u014b' r = ChainedDict(**{'foo': 1, uni: 2}) unicode(r) repr(r) print r def test_abort(self): self.bus.resetConfig() self.msg = None @receiver(str) def aborter(msg): if msg == "cancel": raise AbortProcessing() @receiver(str) def not_aborter(msg): self.msg = msg self.bus.raise_errors = True self.bus.register(aborter) self.bus.register(not_aborter, priority=BusPriority.LOW_PRIORITY) self.bus.publish("foo") assert self.msg == "foo" self.msg = None self.bus.publish("cancel") assert self.msg == None
class TestHeaders(unittest.TestCase): def setUp(self): self.bus = VoomBus() def test_arbitrary_headers(self): uni = u'\u014b' r = Session(**{'foo': 1, uni: 2}) assert r['foo'] == 1 assert r[uni] == 2 assert uni in r assert r.get('bar') == None assert 'bar' not in r def test_unicode(self): uni = u'\u014b' r = Session(**{'foo': 1, uni: 2}) unicode(r) repr(r) print r def test_abort(self): self.bus.resetConfig() self.msg = None @receiver(str) def aborter(msg): if msg == "cancel": raise AbortProcessing() @receiver(str) def not_aborter(msg): self.msg = msg self.bus.raise_errors = True self.bus.register(aborter) self.bus.register(not_aborter, priority=BusPriority.LOW_PRIORITY) self.bus.publish("foo") assert self.msg == "foo" self.msg = None self.bus.publish("cancel") assert self.msg == None
class TestBusReply(unittest.TestCase): def setUp(self): self.bus = VoomBus() self.forward = None def test_errors(self): with patch('voom.bus.VoomBus.session', {}): nose.tools.assert_raises(InvalidAddressError, self.bus.reply, None) #@UndefinedVariable with patch('voom.bus.VoomBus.session', {SessionKeys.REPLY_TO: "badaddr"}): assert self.bus.session == { SessionKeys.REPLY_TO: "badaddr" }, self.bus.session nose.tools.assert_raises(InvalidStateError, self.bus.reply, None) #@UndefinedVariable def test_reply_1(self): @receiver(str) def what_is_it(_): self.bus.reply('ponies') @receiver(MessageForwarded) def forward(msg): self.forward = msg self.bus.register(what_is_it) self.bus.register(forward) with self.bus.using( {SessionKeys.REPLY_TO: CurrentThreadChannel.ADDRESS}): self.bus.publish("meow") assert self.bus.thread_channel.pop_all() == ['ponies'] assert self.forward assert self.forward.message == "ponies", self.forward assert self.forward.address == CurrentThreadChannel.ADDRESS def test_reply_2(self): @receiver(str) def what_is_it(_): self.bus.reply('ponies') self.bus.register(what_is_it) self.bus.raise_errors = True nose.tools.assert_raises(InvalidAddressError, self.bus.publish, "my little")
class TestBusReply(unittest.TestCase): def setUp(self): self.bus = VoomBus() self.forward = None def test_errors(self): with patch('voom.bus.VoomBus.session', {}): nose.tools.assert_raises(InvalidAddressError, self.bus.reply, None) #@UndefinedVariable with patch('voom.bus.VoomBus.session', {SessionKeys.REPLY_TO: "badaddr"}): assert self.bus.session == {SessionKeys.REPLY_TO: "badaddr"}, self.bus.session nose.tools.assert_raises(InvalidStateError, self.bus.reply, None) #@UndefinedVariable def test_reply_1(self): @receiver(str) def what_is_it(_): self.bus.reply('ponies') @receiver(MessageForwarded) def forward(msg): self.forward = msg self.bus.register(what_is_it) self.bus.register(forward) with self.bus.using({SessionKeys.REPLY_TO: CurrentThreadChannel.ADDRESS}): self.bus.publish("meow") assert self.bus.thread_channel.pop_all() == ['ponies'] assert self.forward assert self.forward.message == "ponies", self.forward assert self.forward.address == CurrentThreadChannel.ADDRESS def test_reply_2(self): @receiver(str) def what_is_it(_): self.bus.reply('ponies') self.bus.register(what_is_it) self.bus.raise_errors = True nose.tools.assert_raises(InvalidAddressError, self.bus.publish, "my little")
def incrementGlobalActivity(event): stats_db[event.thing] += 1 @receiver(UserDidSomething, UserDidSomethingElse) def appendToStream(event): activity_db[event.user].append(event) @receiver(VoomBus.ALL) def log_it(event): print "An event happened, yo:", event # # configure the bus # bus = VoomBus() bus.register(incrementUserActivity) bus.register(incrementGlobalActivity) bus.register(appendToStream) bus.register(log_it) # publish some messages bus.publish(UserDidSomething("bob", "loggedin", time.time())) bus.publish(UserDidSomething("bob", "loggedin", time.time())) bus.publish(UserDidSomethingElse("bob", "viewed_thing", time.time())) assert len(activity_db["bob"]) == 3 # we see the three activities here assert user_stats_db["bob"] == {'loggedin': 2} # but counter logic executed for only 2 of them # publish more messages bus.publish(UserDidSomething("alice", "loggedin", time.time())) bus.publish(UserDidSomething("alice", "unsubscribed", time.time()))