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)