diff --git a/wptserve/handlers.py b/wptserve/handlers.py index 318219c..bc1ef33 100644 --- a/wptserve/handlers.py +++ b/wptserve/handlers.py @@ -63,7 +63,7 @@ def __call__(self, request, response): if not os.path.isdir(path): raise HTTPException(404, "%s is not a directory" % path) - response.headers = [("Content-Type", "text/html")] + response.headers.set("Content-Type", "text/html") response.content = """ Directory listing for %(path)s diff --git a/wptserve/server.py b/wptserve/server.py index cc79c08..4829852 100644 --- a/wptserve/server.py +++ b/wptserve/server.py @@ -250,18 +250,25 @@ def handle_one_request(self): if handler is None: response.set_error(404) - else: - try: - handler(request, response) - except HTTPException as e: - response.set_error(e.code, e.message) - except Exception as e: - if e.message: - err = [e.message] - else: - err = [] - err.append(traceback.format_exc()) - response.set_error(500, "\n".join(err)) + response.write() + return + + # Set any default headers before calling the handler, so that any headers + # set in the handler will overwrite the defaults. + if "default_headers" in Server.config and Server.config["default_headers"]: + response.headers.update(Server.config["default_headers"]) + + try: + handler(request, response) + except HTTPException as e: + response.set_error(e.code, e.message) + except Exception as e: + if e.message: + err = [e.message] + else: + err = [] + err.append(traceback.format_exc()) + response.set_error(500, "\n".join(err)) self.logger.debug("%i %s %s (%s) %i" % (response.status[0], request.method, request.request_path,