parent
9b22480b07
commit
7f8ae531aa
@ -225,6 +225,23 @@ that via `import utils` as well.
|
|||||||
While it's in some cases possible to import code from the qutebrowser
|
While it's in some cases possible to import code from the qutebrowser
|
||||||
installation, doing so is unsupported and discouraged.
|
installation, doing so is unsupported and discouraged.
|
||||||
|
|
||||||
|
Getting the config directory
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If you need to get the qutebrowser config directory, you can do so by reading
|
||||||
|
`config.configdir`. Similarily, you can get the qutebrowser data directory via
|
||||||
|
`config.datadir`.
|
||||||
|
|
||||||
|
This gives you a https://docs.python.org/3/library/pathlib.html[`pathlib.Path`
|
||||||
|
object], on which you can use `/` to add more directory parts, or `str(...)` to
|
||||||
|
get a string:
|
||||||
|
|
||||||
|
.config.py:
|
||||||
|
[source,python]
|
||||||
|
----
|
||||||
|
print(str(config.configdir / 'config.py')
|
||||||
|
----
|
||||||
|
|
||||||
Handling errors
|
Handling errors
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
"""Configuration files residing on disk."""
|
"""Configuration files residing on disk."""
|
||||||
|
|
||||||
|
import pathlib
|
||||||
import types
|
import types
|
||||||
import os.path
|
import os.path
|
||||||
import sys
|
import sys
|
||||||
@ -177,6 +178,8 @@ class ConfigAPI:
|
|||||||
_keyconfig: The KeyConfig object.
|
_keyconfig: The KeyConfig object.
|
||||||
load_autoconfig: Whether autoconfig.yml should be loaded.
|
load_autoconfig: Whether autoconfig.yml should be loaded.
|
||||||
errors: Errors which occurred while setting options.
|
errors: Errors which occurred while setting options.
|
||||||
|
configdir: The qutebrowser config directory, as pathlib.Path.
|
||||||
|
datadir: The qutebrowser data directory, as pathlib.Path.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, conf, keyconfig):
|
def __init__(self, conf, keyconfig):
|
||||||
@ -184,6 +187,8 @@ class ConfigAPI:
|
|||||||
self._keyconfig = keyconfig
|
self._keyconfig = keyconfig
|
||||||
self.load_autoconfig = True
|
self.load_autoconfig = True
|
||||||
self.errors = []
|
self.errors = []
|
||||||
|
self.configdir = pathlib.Path(standarddir.config())
|
||||||
|
self.datadir = pathlib.Path(standarddir.data())
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def _handle_error(self, action, name):
|
def _handle_error(self, action, name):
|
||||||
|
@ -236,7 +236,7 @@ class TestConfigPyModules:
|
|||||||
pytestmark = pytest.mark.usefixtures('config_stub', 'key_config_stub')
|
pytestmark = pytest.mark.usefixtures('config_stub', 'key_config_stub')
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def confpy(self, tmpdir):
|
def confpy(self, tmpdir, config_tmpdir, data_tmpdir):
|
||||||
return ConfPy(tmpdir)
|
return ConfPy(tmpdir)
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
@ -303,7 +303,7 @@ class TestConfigPy:
|
|||||||
pytestmark = pytest.mark.usefixtures('config_stub', 'key_config_stub')
|
pytestmark = pytest.mark.usefixtures('config_stub', 'key_config_stub')
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def confpy(self, tmpdir):
|
def confpy(self, tmpdir, config_tmpdir, data_tmpdir):
|
||||||
return ConfPy(tmpdir)
|
return ConfPy(tmpdir)
|
||||||
|
|
||||||
def test_assertions(self, confpy):
|
def test_assertions(self, confpy):
|
||||||
@ -312,6 +312,14 @@ class TestConfigPy:
|
|||||||
with pytest.raises(AssertionError):
|
with pytest.raises(AssertionError):
|
||||||
confpy.read() # no errors=True so it gets raised
|
confpy.read() # no errors=True so it gets raised
|
||||||
|
|
||||||
|
@pytest.mark.parametrize('what', ['configdir', 'datadir'])
|
||||||
|
def test_getting_dirs(self, confpy, what):
|
||||||
|
confpy.write('import pathlib',
|
||||||
|
'directory = config.{}'.format(what),
|
||||||
|
'assert isinstance(directory, pathlib.Path)',
|
||||||
|
'assert directory.exists()')
|
||||||
|
confpy.read()
|
||||||
|
|
||||||
@pytest.mark.parametrize('line', [
|
@pytest.mark.parametrize('line', [
|
||||||
'c.colors.hints.bg = "red"',
|
'c.colors.hints.bg = "red"',
|
||||||
'config.set("colors.hints.bg", "red")',
|
'config.set("colors.hints.bg", "red")',
|
||||||
@ -373,17 +381,18 @@ class TestConfigPy:
|
|||||||
assert config.instance._values['aliases']['foo'] == 'message-info foo'
|
assert config.instance._values['aliases']['foo'] == 'message-info foo'
|
||||||
assert config.instance._values['aliases']['bar'] == 'message-info bar'
|
assert config.instance._values['aliases']['bar'] == 'message-info bar'
|
||||||
|
|
||||||
def test_reading_default_location(self, config_tmpdir):
|
def test_reading_default_location(self, config_tmpdir, data_tmpdir):
|
||||||
(config_tmpdir / 'config.py').write_text(
|
(config_tmpdir / 'config.py').write_text(
|
||||||
'c.colors.hints.bg = "red"', 'utf-8')
|
'c.colors.hints.bg = "red"', 'utf-8')
|
||||||
configfiles.read_config_py()
|
configfiles.read_config_py()
|
||||||
assert config.instance._values['colors.hints.bg'] == 'red'
|
assert config.instance._values['colors.hints.bg'] == 'red'
|
||||||
|
|
||||||
def test_reading_missing_default_location(self, config_tmpdir):
|
def test_reading_missing_default_location(self, config_tmpdir,
|
||||||
|
data_tmpdir):
|
||||||
assert not (config_tmpdir / 'config.py').exists()
|
assert not (config_tmpdir / 'config.py').exists()
|
||||||
configfiles.read_config_py() # Should not crash
|
configfiles.read_config_py() # Should not crash
|
||||||
|
|
||||||
def test_oserror(self, tmpdir):
|
def test_oserror(self, tmpdir, data_tmpdir, config_tmpdir):
|
||||||
with pytest.raises(configexc.ConfigFileErrors) as excinfo:
|
with pytest.raises(configexc.ConfigFileErrors) as excinfo:
|
||||||
configfiles.read_config_py(str(tmpdir / 'foo'))
|
configfiles.read_config_py(str(tmpdir / 'foo'))
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user