Exemple #1
0
def log_traceback_for_exception(website, exception):
    tb = traceback.format_exc()
    aspen.log_dammit(tb)
    response = Response(500)
    if website.show_tracebacks:
        response.body = tb
    return {'response': response, 'exception': None}
Exemple #2
0
    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 200 <= response.code < 300:

            # The app raised a Response(2xx). Act as if nothing
            # happened. This is unusual but allowed.

            pass

        else:

            # Delegate to any error simplate.
            # ===============================

            fs = self.ours_or_theirs(str(response.code) + '.html')
            if fs is None:
                fs = self.ours_or_theirs('error.html')
            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
Exemple #3
0
 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
Exemple #4
0
 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
Exemple #5
0
def get_response_for_exception(website, exception):
    tb = traceback.format_exc()
    if isinstance(exception, Response):
        response = exception
    else:
        response = Response(500)
        if website.show_tracebacks:
            response.body = tb
    return {'response': response, 'traceback': tb, 'exception': None}
Exemple #6
0
def get_response_for_exception(website, exception):
    tb = traceback.format_exc()
    if isinstance(exception, Response):
        response = exception
    else:
        response = Response(500)
        if website.show_tracebacks:
            response.body = tb
    return {"response": response, "traceback": tb, "exception": None}
Exemple #7
0
 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
Exemple #8
0
    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)
Exemple #9
0
 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
Exemple #11
0
    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
Exemple #12
0
 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       
Exemple #13
0
 def broken_from_wsgi(*a, **kw):
     raise Response(400)
Exemple #14
0
            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):
Exemple #15
0
                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)
Exemple #16
0
                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)