Add asyncio.Task subclass for better __repr__ for events.
This commit is contained in:
parent
db9a293f14
commit
82b54933e2
@ -93,6 +93,22 @@ def _cleanup_loop(loop):
|
|||||||
log.info('Closing the event loop.')
|
log.info('Closing the event loop.')
|
||||||
loop.close()
|
loop.close()
|
||||||
|
|
||||||
|
class _ClientEventTask(asyncio.Task):
|
||||||
|
def __init__(self, original_coro, event_name, coro, *, loop):
|
||||||
|
super().__init__(coro, loop=loop)
|
||||||
|
self.__event_name = event_name
|
||||||
|
self.__original_coro = original_coro
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
info = [
|
||||||
|
('state', self._state.lower()),
|
||||||
|
('event', self.__event_name),
|
||||||
|
('coro', repr(self.__original_coro)),
|
||||||
|
]
|
||||||
|
if self._exception is not None:
|
||||||
|
info.append(('exception', repr(self._exception)))
|
||||||
|
return '<ClientEventTask {}>'.format(' '.join('%s=%s' % t for t in info))
|
||||||
|
|
||||||
class Client:
|
class Client:
|
||||||
r"""Represents a client connection that connects to Discord.
|
r"""Represents a client connection that connects to Discord.
|
||||||
This class is used to interact with the Discord WebSocket and API.
|
This class is used to interact with the Discord WebSocket and API.
|
||||||
@ -257,6 +273,11 @@ class Client:
|
|||||||
except asyncio.CancelledError:
|
except asyncio.CancelledError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def _schedule_event(self, coro, event_name, *args, **kwargs):
|
||||||
|
wrapped = self._run_event(coro, event_name, *args, **kwargs)
|
||||||
|
# Schedules the task
|
||||||
|
return _ClientEventTask(original_coro=coro, event_name=event_name, coro=wrapped, loop=self.loop)
|
||||||
|
|
||||||
def dispatch(self, event, *args, **kwargs):
|
def dispatch(self, event, *args, **kwargs):
|
||||||
log.debug('Dispatching event %s', event)
|
log.debug('Dispatching event %s', event)
|
||||||
method = 'on_' + event
|
method = 'on_' + event
|
||||||
@ -295,7 +316,7 @@ class Client:
|
|||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
asyncio.ensure_future(self._run_event(coro, method, *args, **kwargs), loop=self.loop)
|
self._schedule_event(coro, method, *args, **kwargs)
|
||||||
|
|
||||||
async def on_error(self, event_method, *args, **kwargs):
|
async def on_error(self, event_method, *args, **kwargs):
|
||||||
"""|coro|
|
"""|coro|
|
||||||
|
@ -125,8 +125,7 @@ class BotBase(GroupMixin):
|
|||||||
super().dispatch(event_name, *args, **kwargs)
|
super().dispatch(event_name, *args, **kwargs)
|
||||||
ev = 'on_' + event_name
|
ev = 'on_' + event_name
|
||||||
for event in self.extra_events.get(ev, []):
|
for event in self.extra_events.get(ev, []):
|
||||||
coro = self._run_event(event, event_name, *args, **kwargs)
|
self._schedule_event(event, ev, *args, **kwargs)
|
||||||
asyncio.ensure_future(coro, loop=self.loop)
|
|
||||||
|
|
||||||
async def close(self):
|
async def close(self):
|
||||||
for extension in tuple(self.__extensions):
|
for extension in tuple(self.__extensions):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user