Skip to content

Commit ea7941b

Browse files
authored
Merge pull request #7 from OpenMatchmaking/feature-custom-event-loop
Specifying a custom event loop in `run` method
2 parents 30b3c28 + dabb616 commit ea7941b

File tree

3 files changed

+30
-3
lines changed

3 files changed

+30
-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.1'
2+
__version__ = '0.5.2'
33
__license__ = 'BSD'
44
VERSION = __version__

sage_utils/amqp/workers.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ def get_microservice_data(self, app):
2626
raise NotImplementedError("The `get_microservice_data(data)` method "
2727
"must be implemented.")
2828

29-
async def run(self, *args, **kwargs):
29+
async def run(self, *args, loop=None, **kwargs):
30+
loop = loop or getattr(self.app, 'loop', None) or asyncio.get_event_loop()
3031
client = RpcAmqpClient(
3132
self.app,
3233
routing_key=self.REQUEST_QUEUE_NAME,
@@ -58,7 +59,9 @@ async def run(self, *args, **kwargs):
5859
"responding or the required queues and the exchanges aren't created. "
5960
"Retry after {} second(s).".format(self.RETRY_TIMEOUT)
6061
)
61-
await asyncio.sleep(self.RETRY_TIMEOUT, loop=self.app.loop)
62+
await asyncio.sleep(self.RETRY_TIMEOUT, loop=loop)
63+
64+
await self.free_resources()
6265

6366
if not is_registered:
6467
raise ConnectionError('Occurred an error during registering microservice.')

tests/amqp/test_worker.py

+24
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,30 @@ async def test_microservice_has_been_registered_successfully(event_loop):
5151
await extension.deinit(event_loop)
5252

5353

54+
@pytest.mark.asyncio
55+
async def test_microservice_has_been_registered_successfully_with_custom_event_loop(event_loop):
56+
app = Application(config=FakeConfig(), loop=event_loop)
57+
register_worker = FakeRegisterMicroserviceWorker(app)
58+
extension = AmqpExtension(app)
59+
extension.register_worker(register_worker)
60+
61+
await extension.init(event_loop)
62+
63+
instance = BaseRegisterWorker(app)
64+
instance.REQUEST_QUEUE_NAME = REQUEST_QUEUE
65+
instance.REQUEST_EXCHANGE_NAME = REQUEST_EXCHANGE
66+
instance.RESPONSE_EXCHANGE_NAME = RESPONSE_EXCHANGE_NAME
67+
68+
with mock.patch(
69+
target='sage_utils.amqp.workers.BaseRegisterWorker.get_microservice_data',
70+
side_effect=valid_microservice_data
71+
):
72+
result = await instance.run(loop=event_loop)
73+
assert result is None
74+
75+
await extension.deinit(event_loop)
76+
77+
5478
@pytest.mark.asyncio
5579
async def test_register_worker_raises_an_error_with_invalid_response(event_loop):
5680
app = Application(config=FakeConfig(), loop=event_loop)

0 commit comments

Comments
 (0)