Mercurial > piecrust2
diff piecrust/serving.py @ 128:28444014ce7d
Fix error reporting and counting of lines.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Fri, 14 Nov 2014 22:49:50 +0100 |
parents | de257cc40ce1 |
children | 7f81c84f7ddb |
line wrap: on
line diff
--- a/piecrust/serving.py Fri Nov 14 22:47:18 2014 +0100 +++ b/piecrust/serving.py Fri Nov 14 22:49:50 2014 +0100 @@ -7,7 +7,7 @@ import logging import io from werkzeug.exceptions import (NotFound, MethodNotAllowed, - InternalServerError) + InternalServerError, HTTPException) from werkzeug.serving import run_simple from werkzeug.wrappers import Request, Response from werkzeug.wsgi import wrap_file @@ -129,19 +129,23 @@ try: response = self._try_serve_page(app, environ, request) return response(environ, start_response) + except HTTPException as ex: + raise except (RouteNotFoundError, SourceNotFoundError) as ex: logger.exception(ex) raise NotFound() except Exception as ex: - logger.exception(ex) if app.debug: + logger.exception(ex) raise - raise InternalServerError() + msg = str(ex) + logger.error(msg) + raise InternalServerError(msg) def _try_serve_asset(self, app, environ, request): logger.debug("Searching for asset with path: %s" % request.path) rel_req_path = request.path.lstrip('/').replace('/', os.sep) - entry = self._asset_record.findEntry(rel_req_path) + entry = self._asset_record.previous.findEntry(rel_req_path) if entry is None: return None @@ -246,6 +250,15 @@ rendered_page = render_page(render_ctx) rp_content = rendered_page.content + if taxonomy is not None: + paginator = rendered_page.data.get('pagination') + if (paginator and paginator.is_loaded and + len(paginator.items) == 0): + message = ("This URL matched a route for taxonomy '%s' but " + "no pages have been found to have it. This page " + "won't be generated by a bake." % taxonomy.name) + raise NotFound(message) + if entry is None: entry = ServeRecordPageEntry(req_path, page_num) self._page_record.addEntry(entry) @@ -308,10 +321,13 @@ def _handle_error(self, exception, environ, start_response): path = 'error' if isinstance(exception, NotFound): - path = '404' + path += '404' + description = str(exception) + if isinstance(exception, HTTPException): + description = exception.description env = Environment(loader=ErrorMessageLoader()) template = env.get_template(path) - context = {'details': str(exception)} + context = {'details': description} response = Response(template.render(context), mimetype='text/html') return response(environ, start_response)