import eventlet

eventlet.monkey_patch(os=False)

import socket

from oslo.config import cfg

from oslo import messaging

_opts = [
    cfg.StrOpt('host', default=socket.gethostname()),
]

CONF = cfg.CONF
CONF.register_opts(_opts)

class Server(object):

    def __init__(self, transport):
        self.target = messaging.Target(topic='testtopic',
                                       server=transport.conf.host,
                                       version='2.5')
        self._server = messaging.get_rpc_server(transport,
                                                self.target,
                                                [self],
                                                executor='eventlet')
        super(Server, self).__init__()

    def start(self):
        self._server.start()

    def test(self, ctxt, arg):
        return arg

transport = messaging.get_transport(CONF, 'fake:///testexchange')

server = Server(transport)
server.start()


class Client(object):

    def __init__(self, transport):
        target = messaging.Target(topic='testtopic', version='2.0')
        self._client = messaging.RPCClient(transport, target)
        super(Client, self).__init__()

    def test(self, ctxt, arg):
        cctxt = self._client.prepare(version='2.5')
        return cctxt.call(ctxt, 'test', arg=arg)


client = Client(transport)
print client.test({'c': 'b'}, 'foo')