def test_yaml_config(self, config_tmpdir, old_config, insert): autoconfig = config_tmpdir / 'autoconfig.yml' if old_config is not None: autoconfig.write_text(old_config, 'utf-8') yaml = configfiles.YamlConfig() yaml.load() if insert: yaml['tabs.show'] = 'never' yaml._save() if not insert and old_config is None: lines = [] else: text = autoconfig.read_text('utf-8') lines = text.splitlines() if insert: assert lines[0].startswith('# DO NOT edit this file by hand,') assert 'config_version: {}'.format(yaml.VERSION) in lines assert 'global:' in lines print(lines) # WORKAROUND for https://github.com/PyCQA/pylint/issues/574 # pylint: disable=superfluous-parens if 'magenta' in (old_config or ''): assert ' colors.hints.fg: magenta' in lines if insert: assert ' tabs.show: never' in lines
def early_init(args: argparse.Namespace) -> None: """Initialize the part of the config which works without a QApplication.""" configdata.init() yaml_config = configfiles.YamlConfig() config.instance = config.Config(yaml_config=yaml_config) config.val = config.ConfigContainer(config.instance) configapi.val = config.ConfigContainer(config.instance) config.key_instance = config.KeyConfig(config.instance) config.cache = configcache.ConfigCache() yaml_config.setParent(config.instance) for cf in config.change_filters: cf.validate() config_commands = configcommands.ConfigCommands( config.instance, config.key_instance) objreg.register('config-commands', config_commands, command_only=True) config_file = standarddir.config_py() custom_config_py = args.config_py is not None global _init_errors try: if os.path.exists(config_file) or custom_config_py: # If we have a custom --config-py flag, we want it to be fatal if it doesn't # exist, so we don't silently fall back to autoconfig.yml in that case. configfiles.read_config_py( config_file, warn_autoconfig=not custom_config_py, ) else: configfiles.read_autoconfig() except configexc.ConfigFileErrors as e: log.config.error("Error while loading {}".format(e.basename)) _init_errors = e try: configfiles.init() except configexc.ConfigFileErrors as e: _init_errors = e for opt, val in args.temp_settings: try: config.instance.set_str(opt, val) except configexc.Error as e: message.error("set: {} - {}".format(e.__class__.__name__, e)) objects.backend = get_backend(args) objects.debug_flags = set(args.debug_flags) stylesheet.init() qtargs.init_envvars()
def test_changed(self, config_tmpdir, old_config, key, value): autoconfig = config_tmpdir / 'autoconfig.yml' if old_config is not None: autoconfig.write_text(old_config, 'utf-8') yaml = configfiles.YamlConfig() yaml.load() yaml[key] = value assert key in yaml assert yaml[key] == value yaml._save() yaml = configfiles.YamlConfig() yaml.load() assert key in yaml assert yaml[key] == value
def test_unknown_key(self, config_tmpdir): """An unknown setting should be deleted.""" autoconfig = config_tmpdir / 'autoconfig.yml' autoconfig.write_text('global:\n hello: world', encoding='utf-8') yaml = configfiles.YamlConfig() yaml.load() yaml._save() lines = autoconfig.read_text('utf-8').splitlines() assert ' hello:' not in lines
def early_init(args: argparse.Namespace) -> None: """Initialize the part of the config which works without a QApplication.""" configdata.init() yaml_config = configfiles.YamlConfig() config.instance = config.Config(yaml_config=yaml_config) config.val = config.ConfigContainer(config.instance) configapi.val = config.ConfigContainer(config.instance) config.key_instance = config.KeyConfig(config.instance) config.cache = configcache.ConfigCache() yaml_config.setParent(config.instance) for cf in config.change_filters: cf.validate() config_commands = configcommands.ConfigCommands(config.instance, config.key_instance) objreg.register('config-commands', config_commands, command_only=True) config_file = standarddir.config_py() global _init_errors try: if os.path.exists(config_file): configfiles.read_config_py(config_file) else: configfiles.read_autoconfig() except configexc.ConfigFileErrors as e: log.config.exception("Error while loading {}".format(e.basename)) _init_errors = e try: configfiles.init() except configexc.ConfigFileErrors as e: _init_errors = e for opt, val in args.temp_settings: try: config.instance.set_str(opt, val) except configexc.Error as e: message.error("set: {} - {}".format(e.__class__.__name__, e)) objects.backend = get_backend(args) objects.debug_flags = set(args.debug_flags) configtypes.Font.monospace_fonts = config.val.fonts.monospace config.instance.changed.connect(_update_monospace_fonts) stylesheet.init() _init_envvars()
def test_invalid(self, config_tmpdir, line, text, exception): autoconfig = config_tmpdir / 'autoconfig.yml' autoconfig.write_text(line, 'utf-8', ensure=True) yaml = configfiles.YamlConfig() with pytest.raises(configexc.ConfigFileErrors) as excinfo: yaml.load() assert len(excinfo.value.errors) == 1 error = excinfo.value.errors[0] assert error.text == text assert str(error.exception).splitlines()[0] == exception assert error.traceback is None
def test_unchanged(self, config_tmpdir, old_config): autoconfig = config_tmpdir / 'autoconfig.yml' mtime = None if old_config is not None: autoconfig.write_text(old_config, 'utf-8') mtime = autoconfig.stat().mtime yaml = configfiles.YamlConfig() yaml.load() yaml._save() if old_config is None: assert not autoconfig.exists() else: assert autoconfig.stat().mtime == mtime
def early_init(args): """Initialize the part of the config which works without a QApplication.""" configdata.init() yaml_config = configfiles.YamlConfig() global val, instance, key_instance instance = Config(yaml_config=yaml_config) val = ConfigContainer(instance) key_instance = KeyConfig(instance) for cf in _change_filters: cf.validate() configtypes.Font.monospace_fonts = val.fonts.monospace config_commands = ConfigCommands(instance, key_instance) objreg.register('config-commands', config_commands) config_api = None try: config_api = configfiles.read_config_py() # Raised here so we get the config_api back. if config_api.errors: raise configexc.ConfigFileErrors('config.py', config_api.errors) except configexc.ConfigFileErrors as e: log.config.exception("Error while loading config.py") _init_errors.append(e) try: if getattr(config_api, 'load_autoconfig', True): try: instance.read_yaml() except configexc.ConfigFileErrors as e: raise # caught in outer block except configexc.Error as e: desc = configexc.ConfigErrorDesc("Error", e) raise configexc.ConfigFileErrors('autoconfig.yml', [desc]) except configexc.ConfigFileErrors as e: log.config.exception("Error while loading config.py") _init_errors.append(e) configfiles.init() objects.backend = get_backend(args) earlyinit.init_with_backend(objects.backend)
def test_changed(self, yaml, qtbot, autoconfig, old_config, key, value): if old_config is not None: autoconfig.write(old_config) yaml.load() with qtbot.wait_signal(yaml.changed): yaml.set_obj(key, value) assert yaml._values[key].get_for_url(fallback=False) == value yaml._save() yaml = configfiles.YamlConfig() yaml.load() assert yaml._values[key].get_for_url(fallback=False) == value
def test_oserror(self, config_tmpdir): autoconfig = config_tmpdir / 'autoconfig.yml' autoconfig.ensure() autoconfig.chmod(0) if os.access(str(autoconfig), os.R_OK): # Docker container or similar pytest.skip("File was still readable") yaml = configfiles.YamlConfig() with pytest.raises(configexc.ConfigFileErrors) as excinfo: yaml.load() assert len(excinfo.value.errors) == 1 error = excinfo.value.errors[0] assert error.text == "While reading" assert isinstance(error.exception, OSError) assert error.traceback is None
def early_init(args): """Initialize the part of the config which works without a QApplication.""" configdata.init() yaml_config = configfiles.YamlConfig() config.instance = config.Config(yaml_config=yaml_config) config.val = config.ConfigContainer(config.instance) config.key_instance = config.KeyConfig(config.instance) yaml_config.setParent(config.instance) for cf in config.change_filters: cf.validate() configtypes.Font.monospace_fonts = config.val.fonts.monospace config_commands = configcommands.ConfigCommands(config.instance, config.key_instance) objreg.register('config-commands', config_commands) config_file = os.path.join(standarddir.config(), 'config.py') try: if os.path.exists(config_file): configfiles.read_config_py(config_file) else: configfiles.read_autoconfig() except configexc.ConfigFileErrors as e: log.config.exception("Error while loading {}".format(e.basename)) global _init_errors _init_errors = e configfiles.init() objects.backend = get_backend(args) for opt, val in args.temp_settings: try: config.instance.set_str(opt, val) except configexc.Error as e: message.error("set: {} - {}".format(e.__class__.__name__, e)) if (objects.backend == usertypes.Backend.QtWebEngine and config.val.force_software_rendering): os.environ['QT_XCB_FORCE_SOFTWARE_OPENGL'] = '1'
def config_stub(stubs, monkeypatch, configdata_init, config_tmpdir): """Fixture which provides a fake config object.""" yaml_config = configfiles.YamlConfig() conf = config.Config(yaml_config=yaml_config) monkeypatch.setattr(config, 'instance', conf) container = config.ConfigContainer(conf) monkeypatch.setattr(config, 'val', container) try: configtypes.Font.monospace_fonts = container.fonts.monospace except configexc.NoOptionError: # Completion tests patch configdata so fonts.monospace is unavailable. pass conf.val = container # For easier use in tests return conf
def yaml_config_stub(config_tmpdir): """Fixture which provides a YamlConfig object.""" return configfiles.YamlConfig()
def yaml(config_tmpdir): return configfiles.YamlConfig()
def conf(self, config_tmpdir): yaml_config = configfiles.YamlConfig() return config.Config(yaml_config)
def yaml(self): return configfiles.YamlConfig()