[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [stem/master] Add support for asynchronous event handlers
commit 933a7b30663c2ab41115c2796a58ea236633ead5
Author: Illia Volochii <illia.volochii@xxxxxxxxx>
Date: Fri Apr 17 23:03:12 2020 +0300
Add support for asynchronous event handlers
---
stem/control.py | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/stem/control.py b/stem/control.py
index 86af0e8a..20d7c8ef 100644
--- a/stem/control.py
+++ b/stem/control.py
@@ -844,7 +844,7 @@ class BaseController(object):
await def __aexit__(self, exit_type: Optional[Type[BaseException]], value: Optional[BaseException], traceback: Optional[TracebackType]) -> None:
await self.close()
- def _handle_event(self, event_message: stem.response.ControlMessage) -> None:
+ async def _handle_event(self, event_message: stem.response.ControlMessage) -> None:
"""
Callback to be overwritten by subclasses for event listening. This is
notified whenever we receive an event from the control socket.
@@ -975,7 +975,7 @@ class BaseController(object):
while True:
try:
event_message = self._event_queue.get_nowait()
- self._handle_event(event_message)
+ await self._handle_event(event_message)
self._event_queue.task_done()
# Attempt to finish processing enqueued events when our controller closes
@@ -3802,7 +3802,7 @@ class Controller(BaseController):
else:
log.warn('We were unable assert ownership of tor through TAKEOWNERSHIP, despite being configured to be the owning process through __OwningControllerProcess. (%s)' % response)
- def _handle_event(self, event_message: stem.response.ControlMessage) -> None:
+ async def _handle_event(self, event_message: stem.response.ControlMessage) -> None:
event = None # type: Optional[stem.response.events.Event]
try:
@@ -3822,7 +3822,10 @@ class Controller(BaseController):
if listener_type == event_type:
for listener in event_listeners:
try:
- listener(event)
+ if asyncio.iscoroutinefunction(listener):
+ await listener(event_message)
+ else:
+ listener(event_message)
except Exception as exc:
log.warn('Event listener raised an uncaught exception (%s): %s' % (exc, event))
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits