_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