Esempio n. 1
0
def _renderHTTP_exception(request, failure):
    try:
        text, code = humanize_failure(failure)
    except:
        log.msg("exception in humanize_failure")
        log.msg("argument was %s" % (failure, ))
        log.err()
        text = str(failure)
        code = None

    if code is not None:
        return _renderHTTP_exception_simple(request, text, code)

    accept = request.getHeader("accept")
    if not accept:
        accept = "*/*"
    if "*/*" in accept or "text/*" in accept or "text/html" in accept:
        request.setResponseCode(http.INTERNAL_SERVER_ERROR)
        return template.renderElement(
            request,
            tags.html(
                tags.head(tags.title(u"Exception"), ),
                tags.body(FailureElement(failure), ),
            ),
        )

    # use plain text
    traceback = failure.getTraceback()
    return _renderHTTP_exception_simple(
        request,
        traceback,
        http.INTERNAL_SERVER_ERROR,
    )
Esempio n. 2
0
 def test_failureElementValue(self):
     """
     The I{value} renderer of L{FailureElement} renders the value's exception
     value.
     """
     element = FailureElement(self.failure,
                              TagLoader(tags.span(render="value")))
     d = flattenString(None, element)
     d.addCallback(self.assertEqual, b"<span>This is a problem</span>")
     return d
Esempio n. 3
0
 def test_failureElementType(self):
     """
     The I{type} renderer of L{FailureElement} renders the failure's
     exception type.
     """
     element = FailureElement(self.failure,
                              TagLoader(tags.span(render="type")))
     d = flattenString(None, element)
     d.addCallback(self.assertEqual, "<span>exceptions.Exception</span>")
     return d
Esempio n. 4
0
 def test_failureElementTraceback(self):
     """
     The I{traceback} renderer of L{FailureElement} renders the failure's
     stack frames using L{_StackElement}.
     """
     element = FailureElement(self.failure)
     renderer = element.lookupRenderMethod("traceback")
     tag = tags.div()
     result = renderer(None, tag)
     self.assertIsInstance(result, _StackElement)
     self.assertIdentical(result.stackFrames, self.failure.frames)
     self.assertEqual([tag], result.loader.load())
Esempio n. 5
0
 def test_failureElementType(self):
     """
     The I{type} renderer of L{FailureElement} renders the failure's
     exception type.
     """
     element = FailureElement(self.failure,
                              TagLoader(tags.span(render="type")))
     d = flattenString(None, element)
     if _PY3:
         exc = b"builtins.Exception"
     else:
         exc = b"exceptions.Exception"
     d.addCallback(self.assertEqual, b"<span>" + exc + b"</span>")
     return d