def SetupOptions(options_file): options = (json.load(open(options_file, 'r')) if options_file else user_options_store.DefaultOptions()) utils.RemoveIfExists(options_file) options['hmac_secret'] = base64.b64decode(options['hmac_secret']) user_options_store.SetAll(options) return options
def setUp(self): options = dict(user_options_store.DefaultOptions()) options.update(DEFAULT_CLIENT_OPTIONS) user_options_store.SetAll(options) self.server_state = YouCompleteMe(user_options_store.GetAll()) pass
def _SetUpServer(self): self._available_completers = {} self._user_notified_about_crash = False self._filetypes_with_keywords_loaded = set() self._server_is_ready_with_cache = False self._message_poll_request = None base.LoadJsonDefaultsIntoVim() user_options_store.SetAll(base.BuildServerConf()) self._user_options = user_options_store.GetAll() self._omnicomp = OmniCompleter(self._user_options) self._buffers = BufferDict(self._user_options) self._SetLogLevel() hmac_secret = os.urandom(HMAC_SECRET_LENGTH) options_dict = dict(self._user_options) options_dict['hmac_secret'] = utils.ToUnicode( base64.b64encode(hmac_secret)) options_dict['server_keep_logfiles'] = self._user_options[ 'keep_logfiles'] # The temp options file is deleted by ycmd during startup. with NamedTemporaryFile(delete=False, mode='w+') as options_file: json.dump(options_dict, options_file) server_port = utils.GetUnusedLocalhostPort() BaseRequest.server_location = 'http://127.0.0.1:' + str(server_port) BaseRequest.hmac_secret = hmac_secret this_file_path = os.path.dirname(os.path.realpath(__file__)) tabnine_binary_path = os.path.join(this_file_path, '../../binaries/') args = [ '--client=vim', '--port={0}'.format(server_port), '--options_file={0}'.format(options_file.name), '--log={0}'.format(self._user_options['log_level']), '--idle_suicide_seconds={0}'.format(SERVER_IDLE_SUICIDE_SECONDS) ] self._server_stdout = utils.CreateLogfile( SERVER_LOGFILE_FORMAT.format(port=server_port, std='stdout')) self._server_stderr = utils.CreateLogfile( SERVER_LOGFILE_FORMAT.format(port=server_port, std='stderr')) args.append('--stdout={0}'.format(self._server_stdout)) args.append('--stderr={0}'.format(self._server_stderr)) if self._user_options['keep_logfiles']: args.append('--keep_logfiles') try: self._server_popen = start_tabnine_proc( cmd_args=args, binary_dir=tabnine_binary_path) except RuntimeError as error: error_message = str(error) self._logger.exception(error_message) vimsupport.PostVimMessage(error_message) return
def UpdateUserOptions( options ): global SERVER_STATE if not options: return user_options_store.SetAll( options ) SERVER_STATE = server_state.ServerState( options )
def UpdateUserOptions( options ): global _server_state if not options: return user_options_store.SetAll( options ) _server_state = server_state.ServerState( options )
def SetupOptions(options_file): options = user_options_store.DefaultOptions() if options_file is not None: user_options = json.loads(ReadFile(options_file)) options.update(user_options) utils.RemoveIfExists(options_file) user_options_store.SetAll(options) return options
def SetupOptions( options_file ): options = user_options_store.DefaultOptions() user_options = json.loads( ReadFile( options_file ) ) options.update( user_options ) utils.RemoveIfExists( options_file ) hmac_secret = ToBytes( base64.b64decode( options[ 'hmac_secret' ] ) ) del options[ 'hmac_secret' ] user_options_store.SetAll( options ) return options, hmac_secret
def IsolatedApp(custom_options={}): old_server_state = handlers._server_state old_extra_conf_store_state = extra_conf_store.Get() old_options = user_options_store.GetAll() try: yield SetUpApp(custom_options) finally: handlers._server_state = old_server_state extra_conf_store.Set(old_extra_conf_store_state) user_options_store.SetAll(old_options)
def UpdateUserOptions( options ): global _server_state if not options: return # This should never be passed in, but let's try to remove it just in case. options.pop( 'hmac_secret', None ) user_options_store.SetAll( options ) _server_state = server_state.ServerState( options )
def SetUpYCM(): from ycm import base from ycmd import user_options_store from ycm.youcompleteme import YouCompleteMe base.LoadJsonDefaultsIntoVim() user_options_store.SetAll(base.BuildServerConf()) return YouCompleteMe(user_options_store.GetAll())
def SetupOptions(options_file): options = user_options_store.DefaultOptions() if options_file: user_options = json.load(open(options_file, 'r')) options.update(user_options) utils.RemoveIfExists(options_file) hmac_secret = base64.b64decode(options['hmac_secret']) del options['hmac_secret'] user_options_store.SetAll(options) return options, hmac_secret
def IsolatedApp( custom_options = {} ): old_server_state = handlers._server_state old_extra_conf_store_state = extra_conf_store.Get() old_options = user_options_store.GetAll() try: with IgnoreExtraConfOutsideTestsFolder(): yield SetUpApp( custom_options ) finally: handlers._server_state = old_server_state extra_conf_store.Set( old_extra_conf_store_state ) user_options_store.SetAll( old_options )
def SetUpYCM(): from ycm import base, paths from ycmd import user_options_store, utils from ycm.youcompleteme import YouCompleteMe base.LoadJsonDefaultsIntoVim() user_options_store.SetAll(base.BuildServerConf()) popen_args = [ paths.PathToPythonInterpreter(), paths.PathToCheckCoreVersion() ] if utils.SafePopen(popen_args).wait() == 2: raise RuntimeError('YCM support libs too old, PLEASE RECOMPILE.') return YouCompleteMe(user_options_store.GetAll())
def setUp(self): with patch('vim.eval', side_effect=self.VimEval): user_options_store.SetAll(base.BuildServerConf()) self.ycm = YouCompleteMe(user_options_store.GetAll())
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 ycmd 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)
def _SetUpServer(self): self._available_completers = {} self._user_notified_about_crash = False self._filetypes_with_keywords_loaded = set() self._server_is_ready_with_cache = False self._message_poll_request = None base.LoadJsonDefaultsIntoVim() user_options_store.SetAll(base.BuildServerConf()) self._user_options = user_options_store.GetAll() self._omnicomp = OmniCompleter(self._user_options) self._buffers = BufferDict(self._user_options) self._SetLogLevel() hmac_secret = os.urandom(HMAC_SECRET_LENGTH) options_dict = dict(self._user_options) options_dict['hmac_secret'] = utils.ToUnicode( base64.b64encode(hmac_secret)) options_dict['server_keep_logfiles'] = self._user_options[ 'keep_logfiles'] # The temp options file is deleted by ycmd during startup. with NamedTemporaryFile(delete=False, mode='w+') as options_file: json.dump(options_dict, options_file) server_port = utils.GetUnusedLocalhostPort() BaseRequest.server_location = 'http://127.0.0.1:' + str(server_port) BaseRequest.hmac_secret = hmac_secret try: python_interpreter = paths.PathToPythonInterpreter() except RuntimeError as error: error_message = ("Unable to start the ycmd server. {0}. " "Correct the error then restart the server " "with ':YcmRestartServer'.".format( str(error).rstrip('.'))) self._logger.exception(error_message) vimsupport.PostVimMessage(error_message) return args = [ python_interpreter, paths.PathToServerScript(), '--port={0}'.format(server_port), '--options_file={0}'.format(options_file.name), '--log={0}'.format(self._user_options['log_level']), '--idle_suicide_seconds={0}'.format(SERVER_IDLE_SUICIDE_SECONDS) ] self._server_stdout = utils.CreateLogfile( SERVER_LOGFILE_FORMAT.format(port=server_port, std='stdout')) self._server_stderr = utils.CreateLogfile( SERVER_LOGFILE_FORMAT.format(port=server_port, std='stderr')) args.append('--stdout={0}'.format(self._server_stdout)) args.append('--stderr={0}'.format(self._server_stderr)) if self._user_options['keep_logfiles']: args.append('--keep_logfiles') self._server_popen = utils.SafePopen(args, stdin_windows=PIPE, stdout=PIPE, stderr=PIPE)
def _SetupOptions(user_options): options = user_options_store.DefaultOptions() options.update(user_options) user_options_store.SetAll(options) return options