Fix initializing without a config.py

This commit is contained in:
Florian Bruhin 2017-09-15 14:08:25 +02:00
parent 7c39600508
commit e0621c6eda
2 changed files with 21 additions and 17 deletions

View File

@ -149,22 +149,21 @@ class ConfigAPI:
def read_config_py(filename=None):
"""Read a config.py file."""
from qutebrowser.config import config
api = ConfigAPI(config.instance, config.key_instance)
if filename is None:
filename = os.path.join(standarddir.config(), 'config.py')
if not os.path.exists(filename):
return None
return api
api = ConfigAPI(config.instance, config.key_instance)
container = config.ConfigContainer(config.instance, configapi=api)
basename = os.path.basename(filename)
module = types.ModuleType('config')
module.config = api
module.c = container
module.__file__ = filename
basename = os.path.basename(filename)
try:
with open(filename, mode='rb') as f:
source = f.read()

View File

@ -877,25 +877,26 @@ def init_patch(qapp, fake_save_manager, monkeypatch, config_tmpdir,
@pytest.mark.parametrize('load_autoconfig', [True, False])
@pytest.mark.parametrize('config_py_errors', [True, False])
@pytest.mark.parametrize('config_py', [True, 'error', False])
def test_init(qtbot, init_patch, fake_save_manager, config_tmpdir,
load_autoconfig, config_py_errors):
load_autoconfig, config_py):
autoconfig_file = config_tmpdir / 'autoconfig.yml'
config_py_file = config_tmpdir / 'config.py'
autoconfig_file.write_text('global:\n colors.hints.fg: magenta\n',
'utf-8', ensure=True)
config_py_lines = ['c.colors.hints.bg = "red"']
if not load_autoconfig:
config_py_lines.append('config.load_autoconfig = False')
if config_py_errors:
config_py_lines.append('c.foo = 42')
config_py_file.write_text('\n'.join(config_py_lines), 'utf-8', ensure=True)
if config_py:
config_py_lines = ['c.colors.hints.bg = "red"']
if not load_autoconfig:
config_py_lines.append('config.load_autoconfig = False')
if config_py == 'error':
config_py_lines.append('c.foo = 42')
config_py_file.write_text('\n'.join(config_py_lines), 'utf-8', ensure=True)
config.init()
if config_py_errors:
if config_py == 'error':
qtbot.add_widget(config._errbox)
expected = "Errors occurred while reading config.py:"
assert config._errbox.text().strip().startswith(expected)
@ -912,11 +913,15 @@ def test_init(qtbot, init_patch, fake_save_manager, config_tmpdir,
fake_save_manager.add_saveable.assert_any_call(
'yaml-config', unittest.mock.ANY)
assert config.instance._values['colors.hints.bg'] == 'red'
if load_autoconfig:
assert config.instance._values['colors.hints.fg'] == 'magenta'
if config_py and load_autoconfig:
assert config.instance._values == {
'colors.hints.bg': 'red',
'colors.hints.fg': 'magenta',
}
elif config_py:
assert config.instance._values == {'colors.hints.bg': 'red'}
else:
assert 'colors.hints.fg' not in config.instance._values
assert config.instance._values == {'colors.hints.fg': 'magenta'}
def test_init_invalid_change_filter(init_patch):