Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Ticket #556: err_internal.patch

  • _cprequest.py

    old new  
    289289    methods_with_bodies = ("POST", "PUT") 
    290290    body = None 
    291291    body_read = False 
     292    headers_read = False 
    292293     
    293294    # Dispatch attributes 
    294295    dispatch = Dispatcher() 
     
    405406            self.simple_cookie = Cookie.SimpleCookie() 
    406407            self.handler = None 
    407408             
    408             # Get the 'Host' header, so we can do HTTPRedirects properly. 
    409             self.process_headers() 
    410              
    411409            # path_info should be the path from the 
    412410            # app root (script_name) to the handler. 
    413411            self.script_name = self.app.script_name 
     
    429427            raise 
    430428        except cherrypy.TimeoutError: 
    431429            raise 
    432         except: 
    433             if self.throw_errors: 
    434                 raise 
    435             self.handle_error(sys.exc_info()) 
    436430         
    437431        if self.method == "HEAD": 
    438432            # HEAD requests MUST NOT return a message-body in the response. 
     
    446440        """Generate a response for the resource at self.path_info.""" 
    447441        try: 
    448442            try: 
    449                 if cherrypy.response.timed_out: 
    450                     raise cherrypy.TimeoutError() 
    451                  
    452                 if self.app is None: 
    453                     raise cherrypy.NotFound() 
    454                  
    455                 self.hooks = HookMap(self.hookpoints) 
    456                 self.get_resource(path_info) 
    457                 self.tool_up() 
    458                 self.hooks.run('on_start_resource') 
    459                  
    460                 if not self.body_read: 
     443                try: 
     444                    if cherrypy.response.timed_out: 
     445                        raise cherrypy.TimeoutError() 
     446                     
     447                    if self.app is None: 
     448                        raise cherrypy.NotFound() 
     449                     
     450                    if not self.headers_read: 
     451                        # Get the 'Host' header, so we can do HTTPRedirects properly. 
     452                        self.process_headers() 
     453                     
     454                    self.hooks = HookMap(self.hookpoints) 
     455                    self.get_resource(path_info) 
     456                    self.tool_up() 
     457                     
     458                    self.hooks.run('on_start_resource') 
     459                     
     460                    if not self.body_read: 
     461                        if self.process_request_body: 
     462                            if self.method not in self.methods_with_bodies: 
     463                                self.process_request_body = False 
     464                         
     465                        if self.process_request_body: 
     466                            # Prepare the SizeCheckWrapper for the request body 
     467                            mbs = cherrypy.server.max_request_body_size 
     468                            if mbs > 0: 
     469                                self.rfile = http.SizeCheckWrapper(self.rfile, mbs) 
     470                     
     471                    self.hooks.run('before_request_body') 
    461472                    if self.process_request_body: 
    462                         if self.method not in self.methods_with_bodies: 
    463                             self.process_request_body = False 
     473                        self.process_body() 
    464474                     
    465                     if self.process_request_body: 
    466                         # Prepare the SizeCheckWrapper for the request body 
    467                         mbs = cherrypy.server.max_request_body_size 
    468                         if mbs > 0: 
    469                             self.rfile = http.SizeCheckWrapper(self.rfile, mbs) 
    470                  
    471                 self.hooks.run('before_request_body') 
    472                 if self.process_request_body: 
    473                     self.process_body() 
    474                  
    475                 self.hooks.run('before_main') 
    476                 if self.handler: 
    477                     self.handler() 
    478                 self.hooks.run('before_finalize') 
    479                 cherrypy.response.finalize() 
    480             except (cherrypy.HTTPRedirect, cherrypy.HTTPError), inst: 
    481                 inst.set_response() 
    482                 self.hooks.run('before_finalize') 
    483                 cherrypy.response.finalize() 
    484         finally: 
    485             self.hooks.run('on_end_resource') 
     475                    self.hooks.run('before_main') 
     476                    if self.handler: 
     477                        self.handler() 
     478                    self.hooks.run('before_finalize') 
     479                    cherrypy.response.finalize() 
     480                except (cherrypy.HTTPRedirect, cherrypy.HTTPError), inst: 
     481                    inst.set_response() 
     482                    self.hooks.run('before_finalize') 
     483                    cherrypy.response.finalize() 
     484            finally: 
     485                self.hooks.run('on_end_resource') 
     486        except cherrypy.InternalRedirect: 
     487            raise 
     488        except: 
     489            if self.throw_errors: 
     490                raise 
     491            self.handle_error(sys.exc_info()) 
    486492     
    487493    def process_headers(self): 
     494        # Guard against re-reading body (e.g. on InternalRedirect) 
     495        if self.headers_read: 
     496            return 
     497        self.headers_read = True 
     498         
    488499        self.params = http.parse_query_string(self.query_string) 
    489500         
    490501        # Process the headers into self.headers 

Hosted by WebFaction

Log in as guest/cpguest to create tickets