def serve(ctx): log_config = load_logging_config(ctx.obj.config_file) server = load_server(ctx.obj.config_file, name=ctx.obj.server_env) log_config['version'] = 1 log_config['disable_existing_loggers'] = False dictConfig(log_config) server(ctx.obj.app)
def test_logging_config(): stream_key_name = 'stream' if (sys.version_info[0] > 2 or sys.version_info[1] > 6) else 'strm' expected = { 'version': 1, 'root': { 'level': 'DEBUG', 'handlers': ['console'], }, 'loggers': { 'simpleExample': { 'level': 'DEBUG', 'handlers': ['console'], 'propagate': False, } }, 'handlers': { 'console': { 'class': 'logging.StreamHandler', 'level': 'DEBUG', 'formatter': 'simple', stream_key_name: sys.stdout, }, 'syslog': { 'class': 'logging.handlers.SysLogHandler', 'level': 'WARNING', 'formatter': 'complicated', } }, 'formatters': { 'simple': { 'format': '%(asctime)s - %(name)s - %(levelname)s - %(message)s' }, 'complicated': { 'format': 'F1 %(asctime)s %(levelname)s %(message)s', 'datefmt': '%a, %d %b %Y %H:%M:%S +0000', }, 'withclass': { '()': 'foobar.FooBarClass', 'first': 'foo', 'second': 'bar', }, }, } config_path = os.path.join(here, 'config_files/logging.ini') actual = load_logging_config(config_path) assert actual == expected
def run(self): # pragma: no cover if self.options.stop_daemon: return self.stop_daemon() if not hasattr(self.options, 'set_user'): # Windows case: self.options.set_user = self.options.set_group = None # @@: Is this the right stage to set the user at? self.change_user_group( self.options.set_user, self.options.set_group) if not self.args: self.out('You must give a config file') return 2 app_spec = self.args[0] if (len(self.args) > 1 and self.args[1] in self.possible_subcommands): cmd = self.args[1] else: cmd = None if self.options.reload: if os.environ.get(self._reloader_environ_key): if self.options.verbose > 1: self.out('Running reloading file monitor') install_reloader(int(self.options.reload_interval), [app_spec]) # if self.requires_config_file: # watch_file(self.args[0]) else: return self.restart_with_reloader() if cmd not in (None, 'start', 'stop', 'restart', 'status'): self.out( 'Error: must give start|stop|restart (not %s)' % cmd) return 2 if cmd == 'status' or self.options.show_status: return self.show_status() if cmd == 'restart' or cmd == 'stop': result = self.stop_daemon() if result: if cmd == 'restart': self.out("Could not stop daemon; aborting") else: self.out("Could not stop daemon") return result if cmd == 'stop': return result self.options.daemon = True if cmd == 'start': self.options.daemon = True app_name = self.options.app_name vars = self.get_options() if not self._scheme_re.search(app_spec): app_spec = 'config:' + app_spec server_name = self.options.server_name if self.options.server: server_spec = 'egg:pyramid' assert server_name is None server_name = self.options.server else: server_spec = app_spec base = os.getcwd() if getattr(self.options, 'daemon', False): if not self.options.pid_file: self.options.pid_file = 'pyramid.pid' if not self.options.log_file: self.options.log_file = 'pyramid.log' # Ensure the log file is writeable if self.options.log_file: try: writeable_log_file = open(self.options.log_file, 'a') except IOError as ioe: msg = 'Error: Unable to write to log file: %s' % ioe raise ValueError(msg) writeable_log_file.close() # Ensure the pid file is writeable if self.options.pid_file: try: writeable_pid_file = open(self.options.pid_file, 'a') except IOError as ioe: msg = 'Error: Unable to write to pid file: %s' % ioe raise ValueError(msg) writeable_pid_file.close() if getattr(self.options, 'daemon', False): try: self.daemonize() except DaemonizeException as ex: if self.options.verbose > 0: self.out(str(ex)) return 2 if (self.options.monitor_restart and not os.environ.get(self._monitor_environ_key)): return self.restart_with_monitor() if self.options.pid_file: self.record_pid(self.options.pid_file) if self.options.log_file: stdout_log = LazyWriter(self.options.log_file, 'a') sys.stdout = stdout_log sys.stderr = stdout_log logging.basicConfig(stream=stdout_log) log_fn = app_spec if log_fn.startswith('config:'): log_fn = log_fn[len('config:'):] elif log_fn.startswith('egg:'): log_fn = None if log_fn: log_fn = os.path.join(base, log_fn) dictConfig(load_logging_config(log_fn, self.options.logging_config)) server = self.loadserver(server_spec, name=server_name, relative_to=base, global_conf=vars) app = self.loadapp(app_spec, name=app_name, relative_to=base, global_conf=vars) if self.options.verbose > 0: if hasattr(os, 'getpid'): msg = 'Starting server in PID %i.' % os.getpid() else: msg = 'Starting server.' self.out(msg) def serve(): try: server(app) except (SystemExit, KeyboardInterrupt) as e: if self.options.verbose > 1: raise if str(e): msg = ' ' + str(e) else: msg = '' self.out('Exiting%s (-v to see traceback)' % msg) if self.options.browser: def open_browser(): spec = app_spec # bug? if spec.startswith('config:'): spec = spec[len('config:'):] path = os.path.join(base, spec) name = app_name # bug? config = Loader(path).server_config(name) url = 'http://127.0.0.1:{port}/'.format(**config.config) time.sleep(1) webbrowser.open(url) t = threading.Thread(target=open_browser) t.setDaemon(True) t.start() serve()