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

Changeset 692

Show
Ignore:
Timestamp:
09/28/05 19:07:23
Author:
fumanchu
Message:

1. Fix for #305 (produce an error if a custom error page file can not be opened).

2. Also, a fix in _cputil.getErrorPage, where messages (and other kwargs set to None) were not printing defaults.

3. Removed defunct "server.httpErrors" config entry.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cherrypy/_cputil.py

    r682 r692  
    189189     
    190190    code, reason, message = cptools.validStatus(status) 
    191     errorPageFile = cherrypy.config.get('errorPage.%s' % code, '') 
    192     if errorPageFile: 
    193         template = file(errorPageFile, 'rb') 
    194     else: 
    195         template = _HTTPErrorTemplate 
    196      
    197     kwargs.setdefault('status', "%s %s" % (code, reason)) 
    198     kwargs.setdefault('message', '') 
    199     kwargs.setdefault('traceback', '') 
    200     kwargs.setdefault('version', cherrypy.__version__) 
     191     
     192    # We can't use setdefault here, because some 
     193    # callers send None for kwarg values. 
     194    if kwargs.get('status') is None: 
     195        kwargs['status'] = "%s %s" % (code, reason) 
     196    if kwargs.get('message') is None: 
     197        kwargs['message'] = message 
     198    if kwargs.get('traceback') is None: 
     199        kwargs['traceback'] = '' 
     200    if kwargs.get('version') is None: 
     201        kwargs['version'] = cherrypy.__version__ 
    201202    for k, v in kwargs.iteritems(): 
    202203        if v is None: 
    203204            kwargs[k] = "" 
     205     
     206    template = _HTTPErrorTemplate 
     207    errorPageFile = cherrypy.config.get('errorPage.%s' % code, '') 
     208    if errorPageFile: 
     209        try: 
     210            template = file(errorPageFile, 'rb') 
     211        except: 
     212            m = kwargs['message'] 
     213            if m: 
     214                m += "<br />" 
     215            m += ("In addition, the custom error page " 
     216                  "failed:\n<br />%s" % (sys.exc_info()[1])) 
     217            kwargs['message'] = m 
    204218     
    205219    return template % kwargs 
  • trunk/cherrypy/config.py

    r626 r692  
    4949     
    5050    'server.environment': 'development', 
    51     'server.httpErrors' : True, 
    5251    'server.protocolVersion': 'HTTP/1.0', 
    5352    'server.logToScreen': True, 
  • trunk/cherrypy/test/test_core.py

    r682 r692  
    162162class Error(Test): 
    163163     
     164    def custom(self): 
     165        raise cherrypy.HTTPError(404) 
     166     
    164167    def page_method(self): 
    165168        raise ValueError() 
     
    265268cherrypy.config.update({ 
    266269    'global': {'server.logToScreen': False, 
    267                'server.httpErrors' : False, 
    268270               'server.environment': 'production', 
    269271               'server.showTracebacks': True, 
     
    298300    '/error/cause_err_in_finalize': { 
    299301        'server.showTracebacks': False, 
     302    }, 
     303    '/error/custom': { 
     304        'errorPage.404': "nonexistent.html", 
    300305    }, 
    301306}) 
     
    534539        finally: 
    535540            ignore.pop() 
     541         
     542        # Test error in custom error page (ticket #305). 
     543        self.getPage("/error/custom") 
     544        self.assertStatus("404 Not Found") 
     545        msg = ("Nothing matches the given URI<br />" 
     546               "In addition, the custom error page failed:\n<br />" 
     547               "[Errno 2] No such file or directory: 'nonexistent.html'") 
     548        self.assertInBody(msg) 
     549 
    536550     
    537551    def test_Ranges(self): 

Hosted by WebFaction

Log in as guest/cpguest to create tickets