Add a config.source() method
This commit is contained in:
parent
34787edf4e
commit
5a9042ab3e
@ -29,6 +29,7 @@ Added
|
||||
command in the completion.
|
||||
- New `:tab-give` and `:tab-take` commands, to give tabs to another window, or
|
||||
take them from another window.
|
||||
- New `config.source(...)` method for `config.py` to source another file.
|
||||
|
||||
Fixed
|
||||
~~~~~
|
||||
|
@ -238,6 +238,9 @@ that via `import utils` as well.
|
||||
While it's in some cases possible to import code from the qutebrowser
|
||||
installation, doing so is unsupported and discouraged.
|
||||
|
||||
To read config data from a different file with `c` and `config` available, you
|
||||
can use `config.source('otherfile.py')` in your `config.py`.
|
||||
|
||||
Getting the config directory
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
@ -259,6 +259,15 @@ class ConfigAPI:
|
||||
with self._handle_error('unbinding', key):
|
||||
self._keyconfig.unbind(key, mode=mode)
|
||||
|
||||
def source(self, filename):
|
||||
if not os.path.isabs(filename):
|
||||
filename = str(self.configdir / filename)
|
||||
|
||||
try:
|
||||
read_config_py(filename)
|
||||
except configexc.ConfigFileErrors as e:
|
||||
self.errors += e.errors
|
||||
|
||||
|
||||
class ConfigPyWriter:
|
||||
|
||||
|
@ -580,6 +580,38 @@ class TestConfigPy:
|
||||
assert isinstance(error.exception, ZeroDivisionError)
|
||||
assert error.traceback is not None
|
||||
|
||||
@pytest.mark.parametrize('location', ['abs', 'rel'])
|
||||
def test_source(self, tmpdir, confpy, location):
|
||||
if location == 'abs':
|
||||
subfile = tmpdir / 'subfile.py'
|
||||
arg = str(subfile)
|
||||
else:
|
||||
subfile = tmpdir / 'config' / 'subfile.py'
|
||||
arg = 'subfile.py'
|
||||
|
||||
subfile.write_text("c.content.javascript.enabled = False",
|
||||
encoding='utf-8')
|
||||
confpy.write("config.source('{}')".format(arg))
|
||||
confpy.read()
|
||||
|
||||
assert not config.instance._values['content.javascript.enabled']
|
||||
|
||||
def test_source_errors(self, tmpdir, confpy):
|
||||
subfile = tmpdir / 'config' / 'subfile.py'
|
||||
subfile.write_text("c.foo = 42", encoding='utf-8')
|
||||
confpy.write("config.source('subfile.py')")
|
||||
error = confpy.read(error=True)
|
||||
|
||||
assert error.text == "While setting 'foo'"
|
||||
assert isinstance(error.exception, configexc.NoOptionError)
|
||||
|
||||
def test_source_not_found(self, confpy):
|
||||
confpy.write("config.source('doesnotexist.py')")
|
||||
error = confpy.read(error=True)
|
||||
|
||||
assert error.text == "Error while reading doesnotexist.py"
|
||||
assert isinstance(error.exception, FileNotFoundError)
|
||||
|
||||
|
||||
class TestConfigPyWriter:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user