def handle(self, msg): """\ Handle a message and call the appropriate method. :param msg: A parsed message object. :returns: Whether the call was successful. """ try: handler = getattr(self, 'handle_v' + msg.mversion.replace('.', '_'), None) if not handler: raise LXError("unimplemented version processor") prev_item = IDStoreItem() if msg.mid in settings.ID_STORE: prev_item = settings.ID_STORE[msg.mid] settings.ID_STORE[msg.mid] = IDStoreItem(msg, prev_item.callback) try: prev_item.callback(msg, prev_item.msg) except: logger.exception("error occurred in callback") return handler(msg, prev_item.msg) except: logger.exception("error occurred in message processor") return False
def test_id_store_item(self): item = IDStoreItem() self.assertIsNone(item.msg) self.assertTrue(callable(item.callback)) with self.assertRaises(ValueError): item.callback = '' item.callback = lambda x, y: None item.msg = '' self.assertEqual(item.msg, '')