def handle_error_at_all(self, tb_1): tb_2 = traceback.format_exc().strip() tbs = '\n\n'.join([tb_2, "... while handling ...", tb_1]) aspen.log_dammit(tbs) if self.show_tracebacks: response = Response(500, tbs) else: response = Response(500) return response
def handle_error_nicely(self, request): """Try to provide some nice error handling. """ try: # nice error messages tb_1 = traceback.format_exc() response = sys.exc_info()[1] if not isinstance(response, Response): aspen.log_dammit(tb_1) response = Response(500, tb_1) elif 200 <= response.code < 300: return response response.request = request self.hooks.outbound_early.run(response) fs = self.ours_or_theirs(str(response.code) + '.html') if fs is None: fs = self.ours_or_theirs('error.html') if fs is None: raise request.fs = fs request.original_resource = request.resource request.resource = resources.get(request) response = request.resource.respond(request, response) return response except Response, response: # no nice error simplate available raise
def check_auth(self, request): """Raise 401 if there's no authenticated user. The user can set website.protected """ if self.protected and request.context['user'].ANON: raise Response(401)
def exec_simplate(self, path="/", request=None, response=None): """Given the URL path of a simplate, exec page two and return response. """ resource, request = self.load_simplate(path, request, True) if response is None: response = Response(charset=self.charset_dynamic) context = resource.populate_context(request, response) exec resource.pages[1] in context # let's let exceptions raise return response, context
def handle_error_nicely(self, tb_1, request): response = sys.exc_info()[1] if not isinstance(response, Response): # We have a true Exception; convert it to a Response object. response = Response(500, tb_1) response.request = request if 500 <= response.code < 600: # Log tracebacks for Reponse(5xx). aspen.log_dammit(tb_1) # TODO Switch to the logging module and use something like this: # log_level = [DEBUG,INFO,WARNING,ERROR][(response.code/100)-2] # logging.log(log_level, tb_1) if 200 <= response.code < 300 or response.code == 304: # The app raised a Response(2xx) or Response(304). # Act as if nothing happened. This is unusual but allowed. pass else: # Delegate to any error simplate. # =============================== rc = str(response.code) possibles = [ rc + ".html", rc + ".html.spt", "error.html", "error.html.spt" ] fs = first( self.ours_or_theirs(errpage) for errpage in possibles ) if fs is not None: request.fs = fs request.original_resource = request.resource request.resource = resources.get(request) response = request.resource.respond(request, response) return response
def handle_error_nicely(self, request): """Try to provide some nice error handling. """ try: # nice error messages tb_1 = traceback.format_exc() response = sys.exc_info()[1] if not isinstance(response, Response): log.error(tb_1) response = Response(500, tb_1) response.request = request self.hooks.run('outbound_early', response) fs = self.ours_or_theirs(str(response.code) + '.html') if fs is None: fs = self.ours_or_theirs('error.html') if fs is None: raise request.fs = fs response = simplates.handle(request, response) except Response, response: # no nice error template available raise
def broken_from_wsgi(*a, **kw): raise Response(400)
self.hooks.run('outbound_early', response) fs = self.ours_or_theirs(str(response.code) + '.html') if fs is None: fs = self.ours_or_theirs('error.html') if fs is None: raise request.fs = fs response = simplates.handle(request, response) except Response, response: # no nice error template available raise except: # last chance for tracebacks in the browser tb_2 = traceback.format_exc().strip() tbs = '\n\n'.join([tb_2, "... while handling ...", tb_1]) log.error(tbs) if self.show_tracebacks: raise Response(500, tbs) else: raise Response(500) return response def find_ours(self, filename): """Given a filename, return a filepath. """ return join(os.path.dirname(__file__), 'www', filename) def ours_or_theirs(self, filename): """Given a filename, return a filepath or None. """ ours = self.find_ours(filename) theirs = join(self.root, '.aspen', filename) if isfile(theirs):
fs = self.ours_or_theirs('error.html') if fs is None: raise request.fs = fs request.original_resource = request.resource request.resource = resources.get(request) response = request.resource.respond(request, response) return response except Response, response: # no nice error simplate available raise except: # last chance for tracebacks in the browser tb_2 = traceback.format_exc().strip() tbs = '\n\n'.join([tb_2, "... while handling ...", tb_1]) aspen.log_dammit(tbs) if self.show_tracebacks: response = Response(500, tbs) else: response = Response(500) response.request = request raise response def find_ours(self, filename): """Given a filename, return a filepath. """ return join(os.path.dirname(__file__), 'www', filename) def ours_or_theirs(self, filename): """Given a filename, return a filepath or None. """ if self.project_root is not None: theirs = join(self.project_root, filename)