# HG changeset patch # User Goffi # Date 1493248430 -7200 # Node ID 00236973e1383434ddffe60c55dac1f4817e9403 # Parent 78692d47340d4a818efabcf463a012f29af31f98 server (pages): an HTTP internal error is raised if an error is uncatched during page workflow diff -r 78692d47340d -r 00236973e138 src/server/server.py --- a/src/server/server.py Thu Apr 27 01:12:57 2017 +0200 +++ b/src/server/server.py Thu Apr 27 01:13:50 2017 +0200 @@ -1482,6 +1482,7 @@ @classmethod def importPages(cls, host, parent=None, path=None): + """Recursively import Libervia pages""" if path is None: path = [] if parent is None: @@ -1642,6 +1643,7 @@ raise failure.Failure(exceptions.CancelError(u'error page is used')) def writeData(self, data, request): + """write data to transport and finish the request""" if data is None: self.pageError(request) request.write(data.encode('utf-8')) @@ -1681,6 +1683,13 @@ """don't raise error on CancelError""" failure_.trap(exceptions.CancelError) + def _internalError(self, failure_, request): + """called if an error is not catched""" + log.error(_(u"Uncatched error for HTTP request on {url}: {msg}").format( + url = request.URLPath(), + msg = failure_)) + self.pageError(request, C.HTTP_INTERNAL_ERROR) + def _on_data_post(self, dummy, request): return defer.maybeDeferred(self.on_data_post, self, request) @@ -1750,6 +1759,7 @@ return data def renderPage(self, request, skip_parse_url=False): + """Main method to handle the workflow of a LiberviaPage""" # template_data are the variables passed to template if not hasattr(request, 'template_data'): request.template_data = {} @@ -1796,6 +1806,7 @@ d.addCallback(self.writeData, request) d.addErrback(self._renderEb, request) + d.addErrback(self._internalError, request) d.callback(self) return server.NOT_DONE_YET