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

Changeset 761

Show
Ignore:
Timestamp:
10/30/05 18:46:28
Author:
fumanchu
Message:

Fix for #356 (formalize server.environment as a set of config defaults). New server.logFileNotFound boolean.

Files:

Legend:

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

    r710 r761  
    188188            cherrypy.log(tb) 
    189189         
    190         defaultOn = (cherrypy.config.get('server.environment') == 'development') 
    191         if not cherrypy.config.get('server.showTracebacks', defaultOn): 
     190        if not cherrypy.config.get('server.showTracebacks', False): 
    192191            tb = None 
    193192         
  • trunk/cherrypy/_cphttptools.py

    r760 r761  
    662662        # Failure in _cpOnError, error filter, or finalize. 
    663663        # Bypass them all. 
    664         defaultOn = (cherrypy.config.get('server.environment') == 'development') 
    665         if cherrypy.config.get('server.showTracebacks', defaultOn): 
     664        if cherrypy.config.get('server.showTracebacks', False): 
    666665            body = self.dbltrace % (_cputil.formatExc(exc), 
    667666                                    _cputil.formatExc()) 
  • trunk/cherrypy/_cpserver.py

    r758 r761  
    9393        # autoreload calls sys.exit. 
    9494        if serverClass is not None: 
    95             defaultOn = (conf("server.environment") == "development") 
    96             if conf('autoreload.on', defaultOn): 
     95            if conf('autoreload.on', False): 
    9796                try: 
    9897                    autoreload.main(self._start) 
  • trunk/cherrypy/_cpwsgi.py

    r758 r761  
    107107        tb = _cputil.formatExc() 
    108108        cherrypy.log(tb) 
    109         defaultOn = (cherrypy.config.get('server.environment') == 'development') 
    110         if not cherrypy.config.get("server.showTracebacks", defaultOn): 
     109        if not cherrypy.config.get("server.showTracebacks", False): 
    111110            tb = "" 
    112111        s, h, b = _cputil.bareError(tb) 
  • trunk/cherrypy/config.py

    r760 r761  
    4747    'server.socketFile': '', 
    4848    'server.socketQueueSize': 5, 
    49      
    50     'server.environment': 'development', 
    5149    'server.protocolVersion': 'HTTP/1.0', 
    5250    'server.logToScreen': True, 
     
    5452    'server.reverseDNS': False, 
    5553    'server.threadPool': 0, 
     54    'server.environment': "development", 
    5655    } 
     56 
     57environments = { 
     58    "development": { 
     59        'autoreload.on': True, 
     60        'logDebugInfoFilter.on': True, 
     61        'server.logFileNotFound': True, 
     62        'server.showTracebacks': True, 
     63        }, 
     64    "staging": { 
     65        'autoreload.on': False, 
     66        'logDebugInfoFilter.on': False, 
     67        'server.logFileNotFound': False, 
     68        'server.showTracebacks': False, 
     69        }, 
     70    "production": { 
     71        'autoreload.on': False, 
     72        'logDebugInfoFilter.on': False, 
     73        'server.logFileNotFound': False, 
     74        'server.showTracebacks': False, 
     75        }, 
     76    } 
     77 
     78def update(updateMap=None, file=None, overwrite=True): 
     79    """Update configMap from a dictionary or a config file. 
     80     
     81    If overwrite is False then the update will not modify values 
     82    already defined in the configMap. 
     83    """ 
     84    if updateMap is None: 
     85        updateMap = {} 
     86     
     87    if file: 
     88        if file not in autoreload.reloadFiles: 
     89            autoreload.reloadFiles.append(file) 
     90        updateMap = updateMap.copy() 
     91        updateMap.update(dict_from_config_file(file)) 
     92     
     93    # Load new conf into cherrypy.configMap 
     94    for section, valueMap in updateMap.iteritems(): 
     95        # Handle shortcut syntax for "global" section 
     96        #   example: update({'server.socketPort': 80}) 
     97        if not isinstance(valueMap, dict): 
     98            valueMap = {section: valueMap} 
     99            section = 'global' 
     100         
     101        bucket = configMap.setdefault(section, {}) 
     102        if overwrite: 
     103            bucket.update(valueMap) 
     104        else: 
     105            for key, value in valueMap.iteritems(): 
     106                bucket.setdefault(key, value) 
    57107 
    58108def reset(useDefaults=True): 
     
    60110    configMap.clear() 
    61111    if useDefaults: 
    62         configMap["global"] = defaultGlobal.copy(
     112        update(defaultGlobal
    63113reset() 
    64  
    65 def update(updateMap=None, file=None, override=True): 
    66     """Update configMap from a dictionary or a config file 
    67     If override is True then the update will not modify values already defined 
    68     in the configMap. 
    69     """ 
    70     if updateMap: 
    71         for section, valueMap in updateMap.iteritems(): 
    72             if not isinstance(valueMap, dict): 
    73                 # Shortcut syntax 
    74                 #   ex: update({'server.socketPort': 80}) 
    75                 valueMap = {section: valueMap} 
    76                 section = 'global' 
    77             sectionMap = configMap.setdefault(section, {}) 
    78             if override: 
    79                 sectionMap.update(valueMap) 
    80             else: 
    81                 for key, value in valueMap.iteritems(): 
    82                     sectionMap.setdefault(key, value) 
    83     if file: 
    84         if file not in autoreload.reloadFiles: 
    85             autoreload.reloadFiles.append(file) 
    86         _load(file, override) 
    87114 
    88115def get(key, defaultValue=None, returnSection=False, path = None): 
     
    106133        try: 
    107134            result = configMap[path][key] 
     135            break 
    108136        except KeyError: 
    109             if path == "global": 
    110                 result = defaultValue 
    111             elif path == "/": 
    112                 path = "global" 
    113                 continue 
    114             else: 
    115                 path = path[:path.rfind("/")] 
    116                 continue 
    117         break 
     137            pass 
     138         
     139        try: 
     140            # Check for a server.environment entry at this node. 
     141            env = configMap[path]["server.environment"] 
     142            result = environments[env][key] 
     143            break 
     144        except KeyError: 
     145            pass 
     146         
     147        if path == "global": 
     148            result = defaultValue 
     149            break 
     150         
     151        # Move one node up the tree and try again. 
     152        if path == "/": 
     153            path = "global" 
     154        else: 
     155            path = path[:path.rfind("/")] 
    118156     
    119157    if returnSection: 
     
    199237 
    200238 
    201 def _load(configFile, override=True): 
    202     """Merge an INI file into configMap 
    203     If override is false, preserve values already in the configMap. 
    204     """ 
    205      
    206     conf = dict_from_config_file(configFile) 
    207      
    208     # Load new conf into cherrypy.configMap 
    209     for section, options in conf.iteritems(): 
    210         bucket = configMap.setdefault(section, {}) 
    211         for key, value in options.iteritems(): 
    212             if override: 
    213                 bucket[key] = value 
    214             else: 
    215                 bucket.setdefault(key, value) 
    216  
    217  
    218239def outputConfigMap(): 
    219240    """Log server configuration parameters""" 
  • trunk/cherrypy/lib/cptools.py

    r760 r761  
    245245        stat = os.stat(path) 
    246246    except OSError: 
    247         if cherrypy.config.get('server.environment') == 'development'
     247        if cherrypy.config.get('server.logFileNotFound', False)
    248248            cherrypy.log("    NOT FOUND file: %s" % path, "DEBUG") 
    249249        raise cherrypy.NotFound() 
  • trunk/cherrypy/lib/filter/logdebuginfofilter.py

    r687 r761  
    4848     
    4949    def beforeFinalize(self): 
    50         if cherrypy.config.get('server.environment') == 'development': 
    51             # In "dev" environment, log everything by default 
    52             defaultOn = True 
    53         else: 
    54             defaultOn = False 
    55          
    56         if not cherrypy.config.get('logDebugInfoFilter.on', defaultOn): 
     50        if not cherrypy.config.get('logDebugInfoFilter.on', False): 
    5751            return 
    5852         
  • trunk/cherrypy/test/test_core.py

    r760 r761  
    324324               'server.protocolVersion': "HTTP/1.1", 
    325325               }, 
    326     '/': { 
    327         'foo': 'this', 
    328         'bar': 'that', 
    329     }, 
    330     '/foo': { 
    331         'foo': 'this2', 
    332         'baz': 'that2', 
    333     }, 
    334     '/foo/bar': { 
    335         'foo': 'this3', 
    336         'bax': 'this4', 
    337     }, 
    338326    '/flatten': { 
    339327        'server.logFile': logFile, 
     
    358346}) 
    359347 
    360 # Shortcut syntax--should get put in the "global" bucket 
    361 cherrypy.config.update({'luxuryyacht': 'throatwobblermangrove'}) 
    362348 
    363349import helper 
    364350 
    365351class CoreRequestHandlingTest(helper.CPWebCase): 
    366      
    367     def testConfig(self): 
    368         tests = [ 
    369             ('global',   'luxuryyacht', 'throatwobblermangrove'), 
    370             ('/',        'nex', None   ), 
    371             ('/',        'foo', 'this' ), 
    372             ('/',        'bar', 'that' ), 
    373             ('/xyz',     'foo', 'this' ), 
    374             ('/foo',     'foo', 'this2'), 
    375             ('/foo',     'bar', 'that' ), 
    376             ('/foo',     'bax', None   ), 
    377             ('/foo/bar', 'baz', 'that2'), 
    378             ('/foo/nex', 'baz', 'that2'), 
    379         ] 
    380         for path, key, expected in tests: 
    381             from cherrypy import _cphttptools 
    382             cherrypy.serving.request = r = _cphttptools.Request("", "", "") 
    383             r.objectPath = r.path = path 
    384             result = cherrypy.config.get(key, None) 
    385             self.assertEqual(result, expected) 
    386352     
    387353    def testParams(self): 

Hosted by WebFaction

Log in as guest/cpguest to create tickets