NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

_cpconfig.py (5305B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\lib\cherrypy\_cpconfig.py
      2 import cherrypy
      3 from cherrypy._cpcompat import set, basestring
      4 from cherrypy.lib import reprconf
      5 NamespaceSet = reprconf.NamespaceSet
      6 
      7 def merge(base, other):
      8     if isinstance(other, basestring):
      9         cherrypy.engine.autoreload.files.add(other)
     10     for section, value_map in reprconf.as_dict(other).items():
     11         if not isinstance(value_map, dict):
     12             raise ValueError("Application config must include section headers, but the config you tried to merge doesn't have any sections. Wrap your config in another dict with paths as section headers, for example: {'/': config}.")
     13         base.setdefault(section, {}).update(value_map)
     14 
     15 
     16 class Config(reprconf.Config):
     17 
     18     def update(self, config):
     19         if isinstance(config, basestring):
     20             cherrypy.engine.autoreload.files.add(config)
     21         reprconf.Config.update(self, config)
     22 
     23     def _apply(self, config):
     24         if isinstance(config.get('global', None), dict):
     25             if len(config) > 1:
     26                 cherrypy.checker.global_config_contained_paths = True
     27             config = config['global']
     28         if 'tools.staticdir.dir' in config:
     29             config['tools.staticdir.section'] = 'global'
     30         reprconf.Config._apply(self, config)
     31 
     32     def __call__(self, *args, **kwargs):
     33         if args:
     34             raise TypeError('The cherrypy.config decorator does not accept positional arguments; you must use keyword arguments.')
     35 
     36         def tool_decorator(f):
     37             if not hasattr(f, '_cp_config'):
     38                 f._cp_config = {}
     39             for k, v in kwargs.items():
     40                 f._cp_config[k] = v
     41 
     42             return f
     43 
     44         return tool_decorator
     45 
     46 
     47 Config.environments = environments = {'staging': {'engine.autoreload_on': False,
     48              'checker.on': False,
     49              'tools.log_headers.on': False,
     50              'request.show_tracebacks': False,
     51              'request.show_mismatched_params': False},
     52  'production': {'engine.autoreload_on': False,
     53                 'checker.on': False,
     54                 'tools.log_headers.on': False,
     55                 'request.show_tracebacks': False,
     56                 'request.show_mismatched_params': False,
     57                 'log.screen': False},
     58  'embedded': {'engine.autoreload_on': False,
     59               'checker.on': False,
     60               'tools.log_headers.on': False,
     61               'request.show_tracebacks': False,
     62               'request.show_mismatched_params': False,
     63               'log.screen': False,
     64               'engine.SIGHUP': None,
     65               'engine.SIGTERM': None},
     66  'test_suite': {'engine.autoreload_on': False,
     67                 'checker.on': False,
     68                 'tools.log_headers.on': False,
     69                 'request.show_tracebacks': True,
     70                 'request.show_mismatched_params': True,
     71                 'log.screen': False}}
     72 
     73 def _server_namespace_handler(k, v):
     74     atoms = k.split('.', 1)
     75     if len(atoms) > 1:
     76         if not hasattr(cherrypy, 'servers'):
     77             cherrypy.servers = {}
     78         servername, k = atoms
     79         if servername not in cherrypy.servers:
     80             from cherrypy import _cpserver
     81             cherrypy.servers[servername] = _cpserver.Server()
     82             cherrypy.servers[servername].subscribe()
     83         if k == 'on':
     84             if v:
     85                 cherrypy.servers[servername].subscribe()
     86             else:
     87                 cherrypy.servers[servername].unsubscribe()
     88         else:
     89             setattr(cherrypy.servers[servername], k, v)
     90     else:
     91         setattr(cherrypy.server, k, v)
     92 
     93 
     94 Config.namespaces['server'] = _server_namespace_handler
     95 
     96 def _engine_namespace_handler(k, v):
     97     engine = cherrypy.engine
     98     if k == 'autoreload_on':
     99         if v:
    100             engine.autoreload.subscribe()
    101         else:
    102             engine.autoreload.unsubscribe()
    103     elif k == 'autoreload_frequency':
    104         engine.autoreload.frequency = v
    105     elif k == 'autoreload_match':
    106         engine.autoreload.match = v
    107     elif k == 'reload_files':
    108         engine.autoreload.files = set(v)
    109     elif k == 'deadlock_poll_freq':
    110         engine.timeout_monitor.frequency = v
    111     elif k == 'SIGHUP':
    112         engine.listeners['SIGHUP'] = set([v])
    113     elif k == 'SIGTERM':
    114         engine.listeners['SIGTERM'] = set([v])
    115     elif '.' in k:
    116         plugin, attrname = k.split('.', 1)
    117         plugin = getattr(engine, plugin)
    118         if attrname == 'on':
    119             if v and hasattr(getattr(plugin, 'subscribe', None), '__call__'):
    120                 plugin.subscribe()
    121                 return
    122             if not v and hasattr(getattr(plugin, 'unsubscribe', None), '__call__'):
    123                 plugin.unsubscribe()
    124                 return
    125         setattr(plugin, attrname, v)
    126     else:
    127         setattr(engine, k, v)
    128 
    129 
    130 Config.namespaces['engine'] = _engine_namespace_handler
    131 
    132 def _tree_namespace_handler(k, v):
    133     if isinstance(v, dict):
    134         for script_name, app in v.items():
    135             cherrypy.tree.graft(app, script_name)
    136             cherrypy.engine.log('Mounted: %s on %s' % (app, script_name or '/'))
    137 
    138     else:
    139         cherrypy.tree.graft(v, v.script_name)
    140         cherrypy.engine.log('Mounted: %s on %s' % (v, v.script_name or '/'))
    141 
    142 
    143 Config.namespaces['tree'] = _tree_namespace_handler