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
Exemple #5
0
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
Exemple #8
0
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
Exemple #11
0
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'
Exemple #12
0
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
Exemple #13
0
def yaml_config_stub(config_tmpdir):
    """Fixture which provides a YamlConfig object."""
    return configfiles.YamlConfig()
def yaml(config_tmpdir):
    return configfiles.YamlConfig()
Exemple #15
0
 def conf(self, config_tmpdir):
     yaml_config = configfiles.YamlConfig()
     return config.Config(yaml_config)
 def yaml(self):
     return configfiles.YamlConfig()