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, )
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
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
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())
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