def msg_reply(conf, msg_id, connection_pool, reply=None, failure=None, ending=False): """Sends a reply or an error on the channel signified by msg_id. Failure should be a sys.exc_info() tuple. """ with ConnectionContext(conf, connection_pool) as conn: if failure: failure = rpc_common.serialize_remote_exception(failure) try: msg = {'result': reply, 'failure': failure} except TypeError: msg = { 'result': dict( (k, repr(v)) for k, v in reply.__dict__.iteritems()), 'failure': failure } if ending: msg['ending'] = True conn.direct_send(msg_id, msg)
def _get_response(self, ctx, proxy, topic, data): """Process a curried message and cast the result to topic.""" LOG.debug(_("Running func with context: %s"), ctx.to_dict()) data.setdefault('version', None) data.setdefault('args', []) try: result = proxy.dispatch( ctx, data['version'], data['method'], **data['args']) return ConsumerBase.normalize_reply(result, ctx.replies) except greenlet.GreenletExit: # ignore these since they are just from shutdowns pass except Exception: return {'exc': rpc_common.serialize_remote_exception(sys.exc_info())}
def test_serialize_remote_exception(self): expected = { 'class': 'Exception', 'module': 'exceptions', 'message': 'test', } try: raise_exception() except Exception as exc: failure = rpc_common.serialize_remote_exception(sys.exc_info()) failure = json.loads(failure) #assure the traceback was added self.assertEqual(expected['class'], failure['class']) self.assertEqual(expected['module'], failure['module']) self.assertEqual(expected['message'], failure['message'])
def _get_response(self, ctx, proxy, topic, data): """Process a curried message and cast the result to topic.""" LOG.debug(_("Running func with context: %s"), ctx.to_dict()) data.setdefault('version', None) data.setdefault('args', []) try: result = proxy.dispatch(ctx, data['version'], data['method'], **data['args']) return ConsumerBase.normalize_reply(result, ctx.replies) except greenlet.GreenletExit: # ignore these since they are just from shutdowns pass except Exception: return { 'exc': rpc_common.serialize_remote_exception(sys.exc_info()) }
def msg_reply(msg_id, connection_pool, reply=None, failure=None, ending=False): """Sends a reply or an error on the channel signified by msg_id. Failure should be a sys.exc_info() tuple. """ with ConnectionContext(connection_pool) as conn: if failure: failure = rpc_common.serialize_remote_exception(failure) try: msg = {'result': reply, 'failure': failure} except TypeError: msg = {'result': dict((k, repr(v)) for k, v in reply.__dict__.iteritems()), 'failure': failure} if ending: msg['ending'] = True conn.direct_send(msg_id, msg)
def test_serialize_remote_nova_exception(self): def raise_nova_exception(): raise exception.NovaException("test", code=500) expected = { 'class': 'NovaException', 'module': 'nova.exception', 'kwargs': {'code': 500}, 'message': 'test' } try: raise_nova_exception() except Exception as exc: failure = rpc_common.serialize_remote_exception(sys.exc_info()) failure = json.loads(failure) #assure the traceback was added self.assertEqual(expected['class'], failure['class']) self.assertEqual(expected['module'], failure['module']) self.assertEqual(expected['kwargs'], failure['kwargs']) self.assertEqual(expected['message'], failure['message'])
def test_serialize_remote_nova_exception(self): def raise_nova_exception(): raise exception.NovaException("test", code=500) expected = { 'class': 'NovaException', 'module': 'nova.exception', 'kwargs': { 'code': 500 }, 'message': 'test' } try: raise_nova_exception() except Exception as exc: failure = rpc_common.serialize_remote_exception(sys.exc_info()) failure = json.loads(failure) #assure the traceback was added self.assertEqual(expected['class'], failure['class']) self.assertEqual(expected['module'], failure['module']) self.assertEqual(expected['kwargs'], failure['kwargs']) self.assertEqual(expected['message'], failure['message'])