comparison piecrust/serving/middlewares.py @ 1082:8d5b8a3dca02

serve: Show debug info, report errors when debug info isn't available.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 15 Feb 2018 21:17:01 -0800
parents 33a89139c284
children
comparison
equal deleted inserted replaced
1081:d4e0c53aa6e8 1082:8d5b8a3dca02
1 import os.path 1 import os.path
2 from werkzeug.exceptions import NotFound, Forbidden 2 from werkzeug.exceptions import HTTPException, NotFound, Forbidden
3 from werkzeug.wrappers import Request, Response 3 from werkzeug.wrappers import Request, Response
4 from werkzeug.wsgi import ClosingIterator 4 from werkzeug.wsgi import ClosingIterator
5 from piecrust import RESOURCES_DIR, CACHE_DIR 5 from piecrust import RESOURCES_DIR, CACHE_DIR
6 from piecrust.data.builder import ( 6 from piecrust.data.builder import (
7 DataBuildingContext, build_page_data) 7 DataBuildingContext, build_page_data)
69 request = Request(environ) 69 request = Request(environ)
70 if request.path.startswith(debug_mount): 70 if request.path.startswith(debug_mount):
71 rel_req_path = request.path[len(debug_mount):] 71 rel_req_path = request.path[len(debug_mount):]
72 handler = self._handlers.get(rel_req_path) 72 handler = self._handlers.get(rel_req_path)
73 if handler is not None: 73 if handler is not None:
74 return handler(request, start_response) 74 try:
75 return handler(request, start_response)
76 except HTTPException as ex:
77 return ex(environ, start_response)
75 78
76 return self.app(environ, start_response) 79 return self.app(environ, start_response)
77 80
78 def _getDebugInfo(self, request, start_response): 81 def _getDebugInfo(self, request, start_response):
79 app = get_app_for_server(self.appfactory) 82 app = get_app_for_server(self.appfactory)
80 if not app.config.get('site/enable_debug_info'): 83 if not app.config.get('site/enable_debug_info', True):
81 return Forbidden() 84 raise Forbidden("PieCrust debug info isn't enabled.")
82 85
83 found = False 86 found = False
84 page_path = request.args.get('page') 87 page_path = request.args.get('page')
85 try: 88 try:
86 req_page = get_requested_page(app, page_path) 89 req_page = get_requested_page(app, page_path)
87 found = (req_page is not None) 90 found = (req_page is not None)
88 except (RouteNotFoundError, PageNotFoundError): 91 except (RouteNotFoundError, PageNotFoundError):
89 pass 92 pass
90 if not found: 93 if not found:
91 return NotFound("No such page: %s" % page_path) 94 raise NotFound("No such page: %s" % page_path)
92 95
93 ctx = DataBuildingContext(req_page.page, 96 ctx = DataBuildingContext(req_page.page,
94 sub_num=req_page.sub_num) 97 sub_num=req_page.sub_num)
95 data = build_page_data(ctx) 98 data = build_page_data(ctx)
96 99