From 90226f335f72df525c6720b712c7dfd446fd1a0a Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Tue, 3 Mar 2009 21:54:57 -0700 Subject: [PATCH] web/common.py: use 'Accept:' header to control HTML-vs-text/plain traceback renderings --- src/allmydata/web/common.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/allmydata/web/common.py b/src/allmydata/web/common.py index 5f7e76e6..c012be8d 100644 --- a/src/allmydata/web/common.py +++ b/src/allmydata/web/common.py @@ -116,14 +116,18 @@ class MyExceptionHandler(appserver.DefaultExceptionHandler): def simple(self, ctx, text, code=http.BAD_REQUEST): req = IRequest(ctx) req.setResponseCode(code) + #req.responseHeaders.setRawHeaders("content-encoding", []) + #req.responseHeaders.setRawHeaders("content-disposition", []) req.setHeader("content-type", "text/plain;charset=utf-8") if isinstance(text, unicode): text = text.encode("utf-8") + req.setHeader("content-length", str(len(text))) req.write(text) # TODO: consider putting the requested URL here req.finishRequest(False) def renderHTTP_exception(self, ctx, f): + traceback = f.getTraceback() if f.check(ExistingChildError): return self.simple(ctx, "There was already a child by that " @@ -150,8 +154,15 @@ class MyExceptionHandler(appserver.DefaultExceptionHandler): return self.simple(ctx, "I don't know how to treat a %s request." % method, http.NOT_IMPLEMENTED) - super = appserver.DefaultExceptionHandler - return super.renderHTTP_exception(self, ctx, f) + req = IRequest(ctx) + accept = req.getHeader("accept") + if not accept: + accept = "*/*" + if "*/*" in accept or "text/*" in accept or "text/html" in accept: + super = appserver.DefaultExceptionHandler + return super.renderHTTP_exception(self, ctx, f) + # use plain text + return self.simple(ctx, traceback, http.INTERNAL_SERVER_ERROR) class NeedOperationHandleError(WebError): pass -- 2.37.2