Exemplo n.º 1
0
    def done(self, reason):
        if log.isEnabledFor(logging.DEBUG):
            log.debug("done: %s %s\n%s", reason,
                      "(aborted)" if self.is_aborted() else "",
                      self.log_stream.getvalue())

        self.has_sent_response = True

        retrigger = self.trg.retriggerOnCompletion if self.trg else False

        if self.cplns:
            # Report completions
            self.driver.send(cplns=self.cplns,
                             request=self.request,
                             retrigger=retrigger)
        elif self.calltips:
            self.driver.send(calltip=self.calltips[0],
                             request=self.request,
                             retrigger=retrigger)
        elif self.defns:
            # We can't exactly serialize blobs directly...
            def defn_serializer(defn):
                return defn.__dict__

            self.driver.send(defns=list(map(defn_serializer, self.defns
                                            or [])),
                             request=self.request,
                             retrigger=retrigger)
        elif self.is_aborted():
            pass  # already reported the abort
        elif self.best_msg[0]:
            try:
                msg = "No %s found" % (self.desc, )
                if self.have_errors:
                    msg = self.best_msg[1] + " (error determining %s)" % (
                        self.desc, )
                    self.driver.report_error(self.log_stream.getvalue())
                elif self.have_warnings:
                    msg += "(warning: %s)" % (self.best_msg[1], )
            except TypeError as ex:
                # Guard against this common problem in log formatting above:
                #   TypeError: not enough arguments for format string
                log.exception("problem logging eval failure: self.log=%r",
                              self.log_entries)
                msg = "error evaluating '%s'" % self.desc
            self.driver.fail(request=self.request, message=msg)
        else:
            # ERROR
            self.driver.fail(request=self.request, message=reason)

        self.log = log  # If we have any more problems, put it in the main log
        self.log_stream.close()
        EvalController.done(self, reason)
Exemplo n.º 2
0
    def done(self, reason):
        log.debug("done: %s %s", reason,
                  "(aborted)" if self.is_aborted() else "")

        self.has_sent_response = True

        retrigger = self.trg.retriggerOnCompletion if self.trg else False

        if self.cplns:
            # Report completions
            self.driver.send(cplns=self.cplns, request=self.request,
                             retrigger=retrigger)
        elif self.calltips:
            self.driver.send(calltip=self.calltips[0], request=self.request,
                             retrigger=retrigger)
        elif self.defns:
            # We can't exactly serialize blobs directly...
            def defn_serializer(defn):
                return defn.__dict__
            self.driver.send(defns=map(defn_serializer, self.defns or []),
                             request=self.request, retrigger=retrigger)
        elif self.is_aborted():
            pass # already reported the abort
        elif self.best_msg[0]:
            try:
                msg = "No %s found" % (self.desc,)
                if self.have_errors:
                    msg = self.best_msg[1] + " (error determining %s)" % (self.desc,)
                    self.driver.report_error(self.log_stream.getvalue())
                elif self.have_warnings:
                    msg += "(warning: %s)" % (self.best_msg[1],)
            except TypeError as ex:
                # Guard against this common problem in log formatting above:
                #   TypeError: not enough arguments for format string
                log.exception("problem logging eval failure: self.log=%r", self.log_entries)
                msg = "error evaluating '%s'" % desc
            self.driver.fail(request=self.request, message=msg)
        else:
            # ERROR
            self.driver.fail(request=self.request, message=reason)

        self.log = log # If we have any more problems, put it in the main log
        self.log_stream.close()
        EvalController.done(self, reason)
Exemplo n.º 3
0
    def done(self, reason):
        log.debug("done: %s %s", reason,
                  "(aborted)" if self.is_aborted() else "")

        if self.cplns:
            # Report completions
            self.driver.send(cplns=self.cplns, request=self.request)
        elif self.calltips:
            self.driver.send(calltip=self.calltips[0], request=self.request)
        elif self.defns:
            # We can't exactly serialize blobs directly...
            def defn_serializer(defn):
                return defn.__dict__

            self.driver.send(defns=map(defn_serializer, self.defns or []),
                             request=self.request)
        elif self.is_aborted():
            pass  # already reported the abort
        elif self.silent:
            pass  # don't output any errors
        elif self.best_msg[0]:
            try:
                msg = "No %s found" % (self.desc, )
                if self.have_errors:
                    msg = self.best_msg[1] + " (error determining %s)" % (
                        self.desc, )
                    self.driver.report_error(self.log_stream.getvalue())
                elif self.have_warnings:
                    msg += "(warning: %s)" % (self.best_msg[1], )
            except TypeError as ex:
                # Guard against this common problem in log formatting above:
                #   TypeError: not enough arguments for format string
                log.exception("problem logging eval failure: self.log=%r",
                              self.log_entries)
                msg = "error evaluating '%s'" % desc
            self.driver.fail(request=self.request, message=msg)

        self.log_stream.close()
        EvalController.done(self, reason)