Exemplo n.º 1
0
def send_catch_log(signal=Any, sender=Anonymous, *arguments, **named):
    """Like pydispatcher.robust.sendRobust but it also logs errors and returns
    Failures instead of exceptions.
    """
    dont_log = named.pop('dont_log', None)
    spider = named.get('spider', None)
    responses = []
    for receiver in liveReceivers(getAllReceivers(sender, signal)):
        try:
            response = robustApply(receiver, signal=signal, sender=sender,
                *arguments, **named)
            if isinstance(response, Deferred):
                log.msg(format="Cannot return deferreds from signal handler: %(receiver)s",
                        level=log.ERROR, spider=spider, receiver=receiver)
        except dont_log:
            result = Failure()
        except Exception:
            result = Failure()
            log.err(result, "Error caught on signal handler: %s" % receiver, \
                spider=spider)
        else:
            result = response
        responses.append((receiver, result))
    return responses
Exemplo n.º 2
0
 def logerror(failure, recv):
     if dont_log is None or not isinstance(failure.value, dont_log):
         log.err(failure, "Error caught on signal handler: %s" % recv, \
             spider=spider)
     return failure