Mercurial > piecrust2
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 |