summaryrefslogtreecommitdiff
path: root/qutebrowser/config/configtypes.py
diff options
context:
space:
mode:
Diffstat (limited to 'qutebrowser/config/configtypes.py')
-rw-r--r--qutebrowser/config/configtypes.py118
1 files changed, 90 insertions, 28 deletions
diff --git a/qutebrowser/config/configtypes.py b/qutebrowser/config/configtypes.py
index 1c3bff8fb..f4857fc36 100644
--- a/qutebrowser/config/configtypes.py
+++ b/qutebrowser/config/configtypes.py
@@ -60,7 +60,7 @@ from PyQt5.QtGui import QColor, QFont
from PyQt5.QtWidgets import QTabWidget, QTabBar
from qutebrowser.commands import cmdutils
-from qutebrowser.config import configexc
+from qutebrowser.config import configexc, configutils
from qutebrowser.utils import standarddir, utils, qtutils, urlutils, urlmatch
from qutebrowser.keyinput import keyutils
@@ -149,6 +149,9 @@ class BaseType:
value: The value to check.
pytype: A Python type to check the value against.
"""
+ if value is configutils.UNSET:
+ return
+
if (value is None or (pytype == list and value == []) or
(pytype == dict and value == {})):
if not self.none_ok:
@@ -309,7 +312,9 @@ class MappingType(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
self._validate_valid_values(value.lower())
return self.MAPPING[value.lower()]
@@ -367,7 +372,9 @@ class String(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
self._validate_encoding(value)
@@ -399,7 +406,9 @@ class UniqueCharString(String):
def to_py(self, value):
value = super().to_py(value)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
# Check for duplicate values
@@ -455,7 +464,9 @@ class List(BaseType):
def to_py(self, value):
self._basic_py_validation(value, list)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return []
for val in value:
@@ -534,6 +545,9 @@ class ListOrValue(BaseType):
return value
def to_py(self, value):
+ if value is configutils.UNSET:
+ return value
+
try:
return [self.valtype.to_py(value)]
except configexc.ValidationError:
@@ -577,7 +591,8 @@ class FlagList(List):
def to_py(self, value):
vals = super().to_py(value)
- self._check_duplicates(vals)
+ if vals is not configutils.UNSET:
+ self._check_duplicates(vals)
return vals
def complete(self):
@@ -764,7 +779,9 @@ class Perc(_Numeric):
def to_py(self, value):
self._basic_py_validation(value, (float, int, str))
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
if isinstance(value, str):
@@ -907,7 +924,9 @@ class QtColor(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
color = QColor(value)
@@ -936,7 +955,9 @@ class QssColor(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
functions = ['rgb', 'rgba', 'hsv', 'hsva', 'qlineargradient',
@@ -981,7 +1002,9 @@ class Font(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
if not self.font_regex.fullmatch(value): # pragma: no cover
@@ -1000,7 +1023,9 @@ class FontFamily(Font):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
match = self.font_regex.fullmatch(value)
@@ -1024,7 +1049,9 @@ class QtFont(Font):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
style_map = {
@@ -1136,7 +1163,9 @@ class Regex(BaseType):
def to_py(self, value):
"""Get a compiled regex from either a string or a regex object."""
self._basic_py_validation(value, (str, self._regex_type))
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
elif isinstance(value, str):
return self._compile_regex(value)
@@ -1214,7 +1243,9 @@ class Dict(BaseType):
def to_py(self, value):
self._basic_py_validation(value, dict)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return self._fill_fixed_keys({})
self._validate_keys(value)
@@ -1256,7 +1287,9 @@ class File(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
value = os.path.expanduser(value)
@@ -1282,7 +1315,9 @@ class Directory(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
value = os.path.expandvars(value)
value = os.path.expanduser(value)
@@ -1309,7 +1344,9 @@ class FormatString(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
try:
@@ -1341,8 +1378,10 @@ class ShellCommand(List):
def to_py(self, value):
value = super().to_py(value)
- if not value:
+ if value is configutils.UNSET:
return value
+ elif not value:
+ return []
if (self.placeholder and
'{}' not in ' '.join(value) and
@@ -1365,7 +1404,9 @@ class Proxy(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
try:
@@ -1401,7 +1442,9 @@ class SearchEngineUrl(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
if not ('{}' in value or '{0}' in value):
@@ -1429,7 +1472,9 @@ class FuzzyUrl(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
try:
@@ -1463,6 +1508,9 @@ class Padding(Dict):
def to_py(self, value):
d = super().to_py(value)
+ if d is configutils.UNSET:
+ return d
+
return PaddingValues(**d)
@@ -1472,7 +1520,9 @@ class Encoding(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
try:
codecs.lookup(value)
@@ -1529,7 +1579,9 @@ class Url(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
qurl = QUrl.fromUserInput(value)
@@ -1545,7 +1597,9 @@ class SessionName(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
if value.startswith('_'):
raise configexc.ValidationError(value, "may not start with '_'!")
@@ -1593,8 +1647,10 @@ class ConfirmQuit(FlagList):
def to_py(self, value):
values = super().to_py(value)
- if not values:
+ if values is configutils.UNSET:
return values
+ elif not values:
+ return []
# Never can't be set with other options
if 'never' in values and len(values) > 1:
@@ -1630,7 +1686,9 @@ class TimestampTemplate(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
try:
@@ -1654,7 +1712,9 @@ class Key(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
try:
@@ -1673,7 +1733,9 @@ class UrlPattern(BaseType):
def to_py(self, value):
self._basic_py_validation(value, str)
- if not value:
+ if value is configutils.UNSET:
+ return value
+ elif not value:
return None
try: