Skip to content

Commit b9b5c3f

Browse files
authored
Merge pull request #8 from OpenMatchmaking/feature-client-with-custom-loop
Custom event loop for RPC client
2 parents ea7941b + 013236d commit b9b5c3f

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

sage_utils/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
__title__ = 'sage-utils'
2-
__version__ = '0.5.2'
2+
__version__ = '0.5.3'
33
__license__ = 'BSD'
44
VERSION = __version__

sage_utils/amqp/clients.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ class RpcAmqpClient(object):
1212
}
1313

1414
def __init__(self, app, routing_key, request_exchange='',
15-
response_queue=None, response_exchange=''):
15+
response_queue=None, response_exchange='', loop=None):
1616
self.app = app
17+
self.loop = loop or getattr(self.app, 'loop', None) or asyncio.get_event_loop()
1718
self.routing_key = routing_key
1819
self.request_exchange = request_exchange
1920
self.response_queue = response_queue
@@ -59,7 +60,7 @@ async def connect(self, consume_timeout=None):
5960
queue_name=self._response_queue_name,
6061
),
6162
timeout=consume_timeout,
62-
loop=self.app.loop
63+
loop=self.loop
6364
)
6465

6566
async def on_response(self, _channel, body, _envelope, _properties):

tests/amqp/test_rpc_client.py

+28
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,34 @@ async def test_rpc_amqp_client_returns_ok(event_loop):
4040
await extension.deinit(event_loop)
4141

4242

43+
@pytest.mark.asyncio
44+
async def test_rpc_amqp_client_returns_ok_with_custom_event_loop(event_loop):
45+
app = Application(config=FakeConfig(), loop=event_loop)
46+
register_worker = FakeRegisterMicroserviceWorker(app)
47+
extension = AmqpExtension(app)
48+
extension.register_worker(register_worker)
49+
50+
await extension.init(event_loop)
51+
52+
client = RpcAmqpClient(
53+
app=app,
54+
routing_key=REQUEST_QUEUE,
55+
request_exchange=REQUEST_EXCHANGE,
56+
response_queue='',
57+
response_exchange=RESPONSE_EXCHANGE_NAME,
58+
loop=event_loop
59+
)
60+
response = await client.send(payload={'name': 'microservice', 'version': '1.0.0'})
61+
62+
assert Response.CONTENT_FIELD_NAME in response.keys()
63+
assert response[Response.CONTENT_FIELD_NAME] == 'OK'
64+
65+
assert Response.EVENT_FIELD_NAME in response.keys()
66+
assert response[Response.EVENT_FIELD_NAME] is None
67+
68+
await extension.deinit(event_loop)
69+
70+
4371
@pytest.mark.asyncio
4472
async def test_rpc_amqp_client_returns_an_error(event_loop):
4573
app = Application(config=FakeConfig(), loop=event_loop)

0 commit comments

Comments
 (0)