import eventlet

eventlet.monkey_patch(os=False)

import socket

from oslo.config import cfg

from oslo.messaging.openstack.common import log as logging
from oslo import messaging
from oslo.messaging import eventlet as evmsg

logging.setup('test-eventlet')

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

CONF = cfg.CONF
CONF.register_opts(_opts)

class Server(evmsg.EventletRPCServer):

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

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

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

server = Server(transport)
server.start()


class Client(messaging.RPCClient):

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

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


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