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

Changeset 405

Show
Ignore:
Timestamp:
07/04/05 13:29:09
Author:
fumanchu
Message:

Added a cherrypy._appserver_state flag. Helps report errors when server.start() has not been called or did not complete normally.

Files:

Legend:

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

    r395 r405  
    3838import server 
    3939 
     40# Use a flag to indicate the state of the cherrypy application server. 
     41# 0 = Not started 
     42# None = In process of starting 
     43# 1 = Started, ready to receive requests 
     44_appserver_state = 0 
    4045_httpserver = None 
    4146 
  • trunk/cherrypy/_cperror.py

    r385 r405  
    3535class InternalError(Error): 
    3636    """ Error that should never happen """ 
     37    pass 
     38 
     39class NotReady(Error): 
     40    """A request was made before the app server has been started.""" 
    3741    pass 
    3842 
  • trunk/cherrypy/_cpwsgi.py

    r388 r405  
    8585        # Both IIS and Apache set REMOTE_USER, when possible. 
    8686        cherrypy.request.login = (environ.get('LOGON_USER') 
    87                              or environ.get('REMOTE_USER') or None) 
     87                                  or environ.get('REMOTE_USER') or None) 
    8888        cherrypy.request.multithread = environ['wsgi.multithread'] 
    8989        cherrypy.request.multiprocess = environ['wsgi.multiprocess'] 
     
    9696                                ) 
    9797        start_response(cherrypy.response.status, cherrypy.response.headers) 
     98    except: 
     99        tb = _cputil.formatExc() 
     100        cherrypy.log(tb) 
     101        s, h, b = _cphttptools.bareError(tb) 
     102        start_response(s, h, sys.exc_info()) 
     103     
     104    try: 
    98105        for chunk in cherrypy.response.body: 
    99106            # WSGI requires all data to be of type "str". This coercion should 
     
    109116        # so don't call start_response (which, according to PEP 333, 
    110117        # may raise its own error at that point). 
    111 ##        start_response(s, h, sys.exc_info()) 
    112118        for chunk in b: 
    113119            yield str(chunk) 
  • trunk/cherrypy/lib/profiler.py

    r382 r405  
    140140    import cherrypy 
    141141    cherrypy.root = Profiler(path) 
    142     cherrypy.config.update({'global': {'server.serverPort': port, 
     142    cherrypy.config.update({'global': {'server.socketPort': port, 
    143143                                       'server.threadPool': 10, 
    144144                                       'server.environment': "production", 
  • trunk/cherrypy/server.py

    r391 r405  
    4747onStopThreadList = [] 
    4848 
     49 
    4950def start(initOnly=False, serverClass=None): 
    5051    if cherrypy.config.get("server.environment") == "development": 
     
    6667    """ 
    6768     
     69    # Use a flag to indicate the state of the cherrypy application server. 
     70    # 0 = Not started 
     71    # None = In process of starting 
     72    # 1 = Started, ready to receive requests 
     73    cherrypy._appserver_state = None 
     74     
    6875    # Output config options to log 
    6976    if cherrypy.config.get("server.logConfigOptions", True): 
     
    96103        cherrypy.profiler = None 
    97104     
    98     if not initOnly: 
     105    if initOnly: 
     106        cherrypy._appserver_state = 1 
     107    else: 
    99108        run_server(serverClass) 
    100109 
     
    127136    # Start the http server. 
    128137    try: 
     138        cherrypy._appserver_state = 1 
    129139        cherrypy._httpserver.start() 
    130140    except (KeyboardInterrupt, SystemExit): 
     
    177187    """ 
    178188     
     189    if cherrypy._appserver_state == 0: 
     190        raise cherrypy.NotReady("No thread has called cherrypy.server.start().") 
     191    elif cherrypy._appserver_state == None: 
     192        raise cherrypy.NotReady("cherrypy.server.start() encountered errors.") 
     193     
    179194    threadID = threading._get_ident() 
    180195    if threadID not in seen_threads: 
     
    210225    for func in cherrypy.server.onStopServerList: 
    211226        func() 
     227     
    212228    cherrypy._httpserver = None 
     229    cherrypy._appserver_state = 0 
  • trunk/cherrypy/test/test.py

    r382 r405  
    141141    print 
    142142     
     143    import cherrypy 
     144    from cherrypy.test import helper 
     145     
     146    class NotReadyTest(unittest.TestCase): 
     147        def testNotReadyError(self): 
     148            # Without having called "cherrypy.server.start()", we should 
     149            # get a NotReady error 
     150            self.assertRaises(cherrypy.NotReady, helper.request, "/") 
     151    CPTestRunner(verbosity=2).run(NotReadyTest("testNotReadyError")) 
     152     
    143153    testList = [ 
    144154        'test_baseurl_filter', 
     
    154164        'test_virtualhost_filter', 
    155165    ] 
    156      
    157     import cherrypy 
    158     from cherrypy.test import helper 
    159166     
    160167    server_conf = {'server.socketHost': helper.HOST, 
  • trunk/cherrypy/test/test_baseurl_filter.py

    r382 r405  
    4040    'global': { 
    4141        'server.environment': 'production', 
     42        'server.logToScreen': False, 
    4243        'baseUrlFilter.on': True, 
    4344        'baseUrlFilter.baseUrl': 'http://www.mydomain.com' 

Hosted by WebFaction

Log in as guest/cpguest to create tickets