def UpdateUserOptions(options): global SERVER_STATE if not options: return user_options_store.SetAll(options) SERVER_STATE = server_state.ServerState(options)
def Main(): parser = argparse.ArgumentParser() parser.add_argument('--host', type=str, default='localhost', help='server hostname') # Default of 0 will make the OS pick a free port for us parser.add_argument('--port', type=int, default=0, help='server port') parser.add_argument('--log', type=str, default='info', help='log level, one of ' '[debug|info|warning|error|critical]') parser.add_argument('--idle_suicide_seconds', type=int, default=0, help='num idle seconds before server shuts down') parser.add_argument('--options_file', type=str, default='', help='file with user options, in JSON format') args = parser.parse_args() numeric_level = getattr(logging, args.log.upper(), None) if not isinstance(numeric_level, int): raise ValueError('Invalid log level: %s' % args.log) # Has to be called before any call to logging.getLogger() logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s', level=numeric_level) options = (json.load(open(args.options_file, 'r')) if args.options_file else user_options_store.DefaultOptions()) user_options_store.SetAll(options) # This ensures that ycm_core is not loaded before extra conf # preload was run. YcmCoreSanityCheck() extra_conf_store.CallGlobalExtraConfYcmCorePreloadIfExists() # This can't be a top-level import because it transitively imports # ycm_core which we want to be imported ONLY after extra conf # preload has executed. from ycm.server import handlers handlers.UpdateUserOptions(options) SetUpSignalHandler() handlers.app.install(WatchdogPlugin(args.idle_suicide_seconds)) waitress.serve(handlers.app, host=args.host, port=args.port, threads=10)
def Main(): parser = argparse.ArgumentParser() parser.add_argument( '--host', type = str, default = 'localhost', help = 'server hostname') # Default of 0 will make the OS pick a free port for us parser.add_argument( '--port', type = int, default = 0, help = 'server port') parser.add_argument( '--log', type = str, default = 'info', help = 'log level, one of ' '[debug|info|warning|error|critical]' ) parser.add_argument( '--idle_suicide_seconds', type = int, default = 0, help = 'num idle seconds before server shuts down') parser.add_argument( '--options_file', type = str, default = '', help = 'file with user options, in JSON format' ) parser.add_argument( '--stdout', type = str, default = None, help = 'optional file to use for stdout' ) parser.add_argument( '--stderr', type = str, default = None, help = 'optional file to use for stderr' ) parser.add_argument( '--keep_logfiles', action = 'store_true', default = None, help = 'retain logfiles after the server exits' ) args = parser.parse_args() if args.stdout is not None: sys.stdout = open(args.stdout, "w") if args.stderr is not None: sys.stderr = open(args.stderr, "w") numeric_level = getattr( logging, args.log.upper(), None ) if not isinstance( numeric_level, int ): raise ValueError( 'Invalid log level: %s' % args.log ) # Has to be called before any call to logging.getLogger() logging.basicConfig( format = '%(asctime)s - %(levelname)s - %(message)s', level = numeric_level ) options = ( json.load( open( args.options_file, 'r' ) ) if args.options_file else user_options_store.DefaultOptions() ) utils.RemoveIfExists( args.options_file ) options[ 'hmac_secret' ] = base64.b64decode( options[ 'hmac_secret' ] ) user_options_store.SetAll( options ) # This ensures that ycm_core is not loaded before extra conf # preload was run. YcmCoreSanityCheck() extra_conf_store.CallGlobalExtraConfYcmCorePreloadIfExists() # If not on windows, detach from controlling terminal to prevent # SIGINT from killing us. if not utils.OnWindows(): try: os.setsid() # setsid() can fail if the user started ycmd directly from a shell. except OSError: pass # This can't be a top-level import because it transitively imports # ycm_core which we want to be imported ONLY after extra conf # preload has executed. from ycm.server import handlers handlers.UpdateUserOptions( options ) SetUpSignalHandler(args.stdout, args.stderr, args.keep_logfiles) handlers.app.install( WatchdogPlugin( args.idle_suicide_seconds ) ) handlers.app.install( HmacPlugin( options[ 'hmac_secret' ] ) ) waitress.serve( handlers.app, host = args.host, port = args.port, threads = 30 )