Exemplo n.º 1
0
def wait_many(*args, **kwargs):
    def _async():
        for awaitable in args:
            awaitable.wait()

    gevent.spawn(_async).get(timeout=kwargs.get('timeout', None))

    if kwargs.get('track_exceptions', True):
        from rowboat import raven_client
        for awaitable in args:
            if awaitable.exception:
                raven_client.captureException(exc_info=awaitable.exc_info)
Exemplo n.º 2
0
    def handle_exception(self, greenlet, event):
        extra = {}

        if isinstance(greenlet.exception, MetaException):
            extra.update(greenlet.exception.metadata)

        if isinstance(greenlet.exception, APIException):
            extra['status_code'] = greenlet.exception.response.status_code
            extra['code'] = greenlet.exception.code
            extra['msg'] = greenlet.exception.msg
            extra['content'] = greenlet.exception.response.content

        if isinstance(event, CommandEvent):
            extra['command'] = {
                'name': event.name,
                'plugin': event.command.plugin.__class__.__name__,
                'content': event.msg.content,
            }
            extra['author'] = event.msg.author.to_dict(),
            extra['channel'] = {
                'id': event.channel.id,
                'name': event.channel.name,
            }

            if event.guild:
                extra['guild'] = {
                    'id': event.guild.id,
                    'name': event.guild.name,
                }
        elif isinstance(event, GatewayEvent):
            try:
                extra['event'] = {
                    'name': event.__class__.__name__,
                    'data': event.to_dict(),
                }
            except:
                pass

        raven_client.captureException(exc_info=greenlet.exc_info, extra=extra)