parent
7f2abd1a46
commit
1fd386e57e
@ -391,13 +391,16 @@ class ConfigManager(QObject):
|
|||||||
lines = []
|
lines = []
|
||||||
if not getattr(sect, 'descriptions', None):
|
if not getattr(sect, 'descriptions', None):
|
||||||
return lines
|
return lines
|
||||||
|
|
||||||
for optname, option in sect.items():
|
for optname, option in sect.items():
|
||||||
|
|
||||||
lines.append('#')
|
lines.append('#')
|
||||||
if option.typ.typestr is None:
|
if option.typ.special:
|
||||||
typestr = ''
|
typestr = ''
|
||||||
else:
|
else:
|
||||||
typestr = ' ({})'.format(option.typ.typestr)
|
typestr = ' ({})'.format(option.typ.__class__.__name__)
|
||||||
lines.append("# {}{}:".format(optname, typestr))
|
lines.append("# {}{}:".format(optname, typestr))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
desc = self.sections[sectname].descriptions[optname]
|
desc = self.sections[sectname].descriptions[optname]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
@ -86,11 +86,12 @@ class BaseType:
|
|||||||
Class attributes:
|
Class attributes:
|
||||||
valid_values: Possible values if they can be expressed as a fixed
|
valid_values: Possible values if they can be expressed as a fixed
|
||||||
string. ValidValues instance.
|
string. ValidValues instance.
|
||||||
typestr: The name of the type to appear in the config.
|
special: If set, the type is only used for one option and isn't
|
||||||
|
mentioned in the config file.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typestr = None
|
|
||||||
valid_values = None
|
valid_values = None
|
||||||
|
special = False
|
||||||
|
|
||||||
def __init__(self, none_ok=False):
|
def __init__(self, none_ok=False):
|
||||||
self.none_ok = none_ok
|
self.none_ok = none_ok
|
||||||
@ -195,8 +196,6 @@ class String(BaseType):
|
|||||||
forbidden: Forbidden chars in the string.
|
forbidden: Forbidden chars in the string.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typestr = 'string'
|
|
||||||
|
|
||||||
def __init__(self, minlen=None, maxlen=None, forbidden=None,
|
def __init__(self, minlen=None, maxlen=None, forbidden=None,
|
||||||
none_ok=False):
|
none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
@ -233,8 +232,6 @@ class List(BaseType):
|
|||||||
|
|
||||||
"""Base class for a (string-)list setting."""
|
"""Base class for a (string-)list setting."""
|
||||||
|
|
||||||
typestr = 'string-list'
|
|
||||||
|
|
||||||
def transform(self, value):
|
def transform(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
return None
|
return None
|
||||||
@ -257,8 +254,6 @@ class Bool(BaseType):
|
|||||||
|
|
||||||
"""Base class for a boolean setting."""
|
"""Base class for a boolean setting."""
|
||||||
|
|
||||||
typestr = 'bool'
|
|
||||||
|
|
||||||
valid_values = ValidValues('true', 'false')
|
valid_values = ValidValues('true', 'false')
|
||||||
|
|
||||||
def transform(self, value):
|
def transform(self, value):
|
||||||
@ -305,8 +300,6 @@ class Int(BaseType):
|
|||||||
maxval: Maximum value (inclusive).
|
maxval: Maximum value (inclusive).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typestr = 'int'
|
|
||||||
|
|
||||||
def __init__(self, minval=None, maxval=None, none_ok=False):
|
def __init__(self, minval=None, maxval=None, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
if maxval is not None and minval is not None and maxval < minval:
|
if maxval is not None and minval is not None and maxval < minval:
|
||||||
@ -343,8 +336,6 @@ class IntList(List):
|
|||||||
|
|
||||||
"""Base class for an int-list setting."""
|
"""Base class for an int-list setting."""
|
||||||
|
|
||||||
typestr = 'int-list'
|
|
||||||
|
|
||||||
def transform(self, value):
|
def transform(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
return None
|
return None
|
||||||
@ -375,8 +366,6 @@ class Float(BaseType):
|
|||||||
maxval: Maximum value (inclusive).
|
maxval: Maximum value (inclusive).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typestr = 'float'
|
|
||||||
|
|
||||||
def __init__(self, minval=None, maxval=None, none_ok=False):
|
def __init__(self, minval=None, maxval=None, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
if maxval is not None and minval is not None and maxval < minval:
|
if maxval is not None and minval is not None and maxval < minval:
|
||||||
@ -418,8 +407,6 @@ class Perc(BaseType):
|
|||||||
maxval: Maximum value (inclusive).
|
maxval: Maximum value (inclusive).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typestr = 'percentage'
|
|
||||||
|
|
||||||
def __init__(self, minval=None, maxval=None, none_ok=False):
|
def __init__(self, minval=None, maxval=None, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
if maxval is not None and minval is not None and maxval < minval:
|
if maxval is not None and minval is not None and maxval < minval:
|
||||||
@ -463,8 +450,6 @@ class PercList(List):
|
|||||||
maxval: Maximum value (inclusive).
|
maxval: Maximum value (inclusive).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typestr = 'perc-list'
|
|
||||||
|
|
||||||
def __init__(self, minval=None, maxval=None, none_ok=False):
|
def __init__(self, minval=None, maxval=None, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
if maxval is not None and minval is not None and maxval < minval:
|
if maxval is not None and minval is not None and maxval < minval:
|
||||||
@ -513,8 +498,6 @@ class PercOrInt(BaseType):
|
|||||||
maxint: Maximum value for integer (inclusive).
|
maxint: Maximum value for integer (inclusive).
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typestr = 'percentage-or-int'
|
|
||||||
|
|
||||||
def __init__(self, minperc=None, maxperc=None, minint=None, maxint=None,
|
def __init__(self, minperc=None, maxperc=None, minint=None, maxint=None,
|
||||||
none_ok=False):
|
none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
@ -564,8 +547,6 @@ class Command(BaseType):
|
|||||||
|
|
||||||
"""Base class for a command value with arguments."""
|
"""Base class for a command value with arguments."""
|
||||||
|
|
||||||
typestr = 'command'
|
|
||||||
|
|
||||||
def validate(self, value):
|
def validate(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
if self.none_ok:
|
if self.none_ok:
|
||||||
@ -586,6 +567,7 @@ class ColorSystem(MappingType):
|
|||||||
|
|
||||||
"""Color systems for interpolation."""
|
"""Color systems for interpolation."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('rgb', "Interpolate in the RGB color system."),
|
valid_values = ValidValues(('rgb', "Interpolate in the RGB color system."),
|
||||||
('hsv', "Interpolate in the HSV color system."),
|
('hsv', "Interpolate in the HSV color system."),
|
||||||
('hsl', "Interpolate in the HSL color system."))
|
('hsl', "Interpolate in the HSL color system."))
|
||||||
@ -601,8 +583,6 @@ class QtColor(BaseType):
|
|||||||
|
|
||||||
"""Base class for QColor."""
|
"""Base class for QColor."""
|
||||||
|
|
||||||
typestr = 'qcolor'
|
|
||||||
|
|
||||||
def validate(self, value):
|
def validate(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
if self.none_ok:
|
if self.none_ok:
|
||||||
@ -625,8 +605,6 @@ class CssColor(BaseType):
|
|||||||
|
|
||||||
"""Base class for a CSS color value."""
|
"""Base class for a CSS color value."""
|
||||||
|
|
||||||
typestr = 'css-color'
|
|
||||||
|
|
||||||
def validate(self, value):
|
def validate(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
if self.none_ok:
|
if self.none_ok:
|
||||||
@ -650,8 +628,6 @@ class QssColor(CssColor):
|
|||||||
color_func_regexes: Valid function regexes.
|
color_func_regexes: Valid function regexes.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typestr = 'qss-color'
|
|
||||||
|
|
||||||
color_func_regexes = [
|
color_func_regexes = [
|
||||||
r'rgb\([0-9]{1,3}%?, [0-9]{1,3}%?, [0-9]{1,3}%?\)',
|
r'rgb\([0-9]{1,3}%?, [0-9]{1,3}%?, [0-9]{1,3}%?\)',
|
||||||
r'rgba\([0-9]{1,3}%?, [0-9]{1,3}%?, [0-9]{1,3}%?, [0-9]{1,3}%?\)',
|
r'rgba\([0-9]{1,3}%?, [0-9]{1,3}%?, [0-9]{1,3}%?, [0-9]{1,3}%?\)',
|
||||||
@ -681,7 +657,6 @@ class Font(BaseType):
|
|||||||
|
|
||||||
"""Base class for a font value."""
|
"""Base class for a font value."""
|
||||||
|
|
||||||
typestr = 'font'
|
|
||||||
font_regex = re.compile(r"""
|
font_regex = re.compile(r"""
|
||||||
^(
|
^(
|
||||||
(
|
(
|
||||||
@ -783,8 +758,6 @@ class Regex(BaseType):
|
|||||||
|
|
||||||
"""A regular expression."""
|
"""A regular expression."""
|
||||||
|
|
||||||
typestr = 'regex'
|
|
||||||
|
|
||||||
def __init__(self, flags=0, none_ok=False):
|
def __init__(self, flags=0, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
self.flags = flags
|
self.flags = flags
|
||||||
@ -812,8 +785,6 @@ class RegexList(List):
|
|||||||
|
|
||||||
"""A list of regexes."""
|
"""A list of regexes."""
|
||||||
|
|
||||||
typestr = 'regex-list'
|
|
||||||
|
|
||||||
def __init__(self, flags=0, none_ok=False):
|
def __init__(self, flags=0, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
self.flags = flags
|
self.flags = flags
|
||||||
@ -844,8 +815,6 @@ class File(BaseType):
|
|||||||
|
|
||||||
"""A file on the local filesystem."""
|
"""A file on the local filesystem."""
|
||||||
|
|
||||||
typestr = 'file'
|
|
||||||
|
|
||||||
def transform(self, value):
|
def transform(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
return None
|
return None
|
||||||
@ -889,8 +858,6 @@ class Directory(BaseType):
|
|||||||
|
|
||||||
"""A directory on the local filesystem."""
|
"""A directory on the local filesystem."""
|
||||||
|
|
||||||
typestr = 'directory'
|
|
||||||
|
|
||||||
def validate(self, value):
|
def validate(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
if self.none_ok:
|
if self.none_ok:
|
||||||
@ -920,8 +887,6 @@ class FormatString(BaseType):
|
|||||||
|
|
||||||
"""A string with '{foo}'-placeholders."""
|
"""A string with '{foo}'-placeholders."""
|
||||||
|
|
||||||
typestr = 'format-string'
|
|
||||||
|
|
||||||
def __init__(self, fields, none_ok=False):
|
def __init__(self, fields, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
self.fields = fields
|
self.fields = fields
|
||||||
@ -964,8 +929,6 @@ class WebKitBytes(BaseType):
|
|||||||
'y': 1024 ** 8,
|
'y': 1024 ** 8,
|
||||||
}
|
}
|
||||||
|
|
||||||
typestr = 'bytes'
|
|
||||||
|
|
||||||
def __init__(self, maxsize=None, none_ok=False):
|
def __init__(self, maxsize=None, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
self.maxsize = maxsize
|
self.maxsize = maxsize
|
||||||
@ -1007,8 +970,6 @@ class WebKitBytesList(List):
|
|||||||
bytestype: The webkit bytes type.
|
bytestype: The webkit bytes type.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typestr = 'bytes-list'
|
|
||||||
|
|
||||||
def __init__(self, maxsize=None, length=None, none_ok=False):
|
def __init__(self, maxsize=None, length=None, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
self.length = length
|
self.length = length
|
||||||
@ -1042,8 +1003,6 @@ class ShellCommand(BaseType):
|
|||||||
placeholder: If there should be a placeholder.
|
placeholder: If there should be a placeholder.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typestr = 'shell-command'
|
|
||||||
|
|
||||||
def __init__(self, placeholder=False, none_ok=False):
|
def __init__(self, placeholder=False, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
self.placeholder = placeholder
|
self.placeholder = placeholder
|
||||||
@ -1073,6 +1032,7 @@ class HintMode(BaseType):
|
|||||||
|
|
||||||
"""Base class for the hints -> mode setting."""
|
"""Base class for the hints -> mode setting."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('number', "Use numeric hints."),
|
valid_values = ValidValues(('number', "Use numeric hints."),
|
||||||
('letter', "Use the chars in the hints -> "
|
('letter', "Use the chars in the hints -> "
|
||||||
"chars setting."))
|
"chars setting."))
|
||||||
@ -1082,6 +1042,7 @@ class Proxy(BaseType):
|
|||||||
|
|
||||||
"""A proxy URL or special value."""
|
"""A proxy URL or special value."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('system', "Use the system wide proxy."),
|
valid_values = ValidValues(('system', "Use the system wide proxy."),
|
||||||
('none', "Don't use any proxy"))
|
('none', "Don't use any proxy"))
|
||||||
|
|
||||||
@ -1139,6 +1100,8 @@ class SearchEngineName(BaseType):
|
|||||||
|
|
||||||
"""A search engine name."""
|
"""A search engine name."""
|
||||||
|
|
||||||
|
special = True
|
||||||
|
|
||||||
def validate(self, value):
|
def validate(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
if self.none_ok:
|
if self.none_ok:
|
||||||
@ -1151,6 +1114,8 @@ class SearchEngineUrl(BaseType):
|
|||||||
|
|
||||||
"""A search engine URL."""
|
"""A search engine URL."""
|
||||||
|
|
||||||
|
special = True
|
||||||
|
|
||||||
def validate(self, value):
|
def validate(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
if self.none_ok:
|
if self.none_ok:
|
||||||
@ -1200,8 +1165,6 @@ class Encoding(BaseType):
|
|||||||
|
|
||||||
"""Setting for a python encoding."""
|
"""Setting for a python encoding."""
|
||||||
|
|
||||||
typestr = 'encoding'
|
|
||||||
|
|
||||||
def validate(self, value):
|
def validate(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
if self.none_ok:
|
if self.none_ok:
|
||||||
@ -1218,7 +1181,7 @@ class UserStyleSheet(File):
|
|||||||
|
|
||||||
"""QWebSettings UserStyleSheet."""
|
"""QWebSettings UserStyleSheet."""
|
||||||
|
|
||||||
typestr = 'user-stylesheet'
|
special = True
|
||||||
|
|
||||||
def transform(self, value):
|
def transform(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
@ -1256,6 +1219,7 @@ class AutoSearch(BaseType):
|
|||||||
|
|
||||||
"""Whether to start a search when something else than a URL is entered."""
|
"""Whether to start a search when something else than a URL is entered."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('naive', "Use simple/naive check."),
|
valid_values = ValidValues(('naive', "Use simple/naive check."),
|
||||||
('dns', "Use DNS requests (might be slow!)."),
|
('dns', "Use DNS requests (might be slow!)."),
|
||||||
('false', "Never search automatically."))
|
('false', "Never search automatically."))
|
||||||
@ -1307,8 +1271,6 @@ class UrlList(List):
|
|||||||
|
|
||||||
"""A list of URLs."""
|
"""A list of URLs."""
|
||||||
|
|
||||||
typestr = 'url-list'
|
|
||||||
|
|
||||||
def transform(self, value):
|
def transform(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
return None
|
return None
|
||||||
@ -1337,7 +1299,7 @@ class SessionName(BaseType):
|
|||||||
|
|
||||||
"""The name of a session."""
|
"""The name of a session."""
|
||||||
|
|
||||||
typestr = 'session'
|
special = True
|
||||||
|
|
||||||
def validate(self, value):
|
def validate(self, value):
|
||||||
if not value:
|
if not value:
|
||||||
@ -1353,6 +1315,7 @@ class SelectOnRemove(MappingType):
|
|||||||
|
|
||||||
"""Which tab to select when the focused tab is removed."""
|
"""Which tab to select when the focused tab is removed."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(
|
valid_values = ValidValues(
|
||||||
('left', "Select the tab on the left."),
|
('left', "Select the tab on the left."),
|
||||||
('right', "Select the tab on the right."),
|
('right', "Select the tab on the right."),
|
||||||
@ -1369,6 +1332,7 @@ class LastClose(BaseType):
|
|||||||
|
|
||||||
"""Behavior when the last tab is closed."""
|
"""Behavior when the last tab is closed."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('ignore', "Don't do anything."),
|
valid_values = ValidValues(('ignore', "Don't do anything."),
|
||||||
('blank', "Load a blank page."),
|
('blank', "Load a blank page."),
|
||||||
('startpage', "Load the start page."),
|
('startpage', "Load the start page."),
|
||||||
@ -1380,6 +1344,7 @@ class AcceptCookies(BaseType):
|
|||||||
|
|
||||||
"""Control which cookies to accept."""
|
"""Control which cookies to accept."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('all', "Accept all cookies."),
|
valid_values = ValidValues(('all', "Accept all cookies."),
|
||||||
('no-3rdparty', "Accept cookies from the same"
|
('no-3rdparty', "Accept cookies from the same"
|
||||||
" origin only."),
|
" origin only."),
|
||||||
@ -1393,8 +1358,7 @@ class ConfirmQuit(List):
|
|||||||
|
|
||||||
"""Whether to display a confirmation when the window is closed."""
|
"""Whether to display a confirmation when the window is closed."""
|
||||||
|
|
||||||
typestr = 'string-list'
|
special = True
|
||||||
|
|
||||||
valid_values = ValidValues(('always', "Always show a confirmation."),
|
valid_values = ValidValues(('always', "Always show a confirmation."),
|
||||||
('multiple-tabs', "Show a confirmation if "
|
('multiple-tabs', "Show a confirmation if "
|
||||||
"multiple tabs are opened."),
|
"multiple tabs are opened."),
|
||||||
@ -1459,6 +1423,7 @@ class ForwardUnboundKeys(BaseType):
|
|||||||
|
|
||||||
"""Whether to forward unbound keys."""
|
"""Whether to forward unbound keys."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('all', "Forward all unbound keys."),
|
valid_values = ValidValues(('all', "Forward all unbound keys."),
|
||||||
('auto', "Forward unbound non-alphanumeric "
|
('auto', "Forward unbound non-alphanumeric "
|
||||||
"keys."),
|
"keys."),
|
||||||
@ -1469,6 +1434,7 @@ class CloseButton(BaseType):
|
|||||||
|
|
||||||
"""Mouse button used to close tabs."""
|
"""Mouse button used to close tabs."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('right', "Close tabs on right-click."),
|
valid_values = ValidValues(('right', "Close tabs on right-click."),
|
||||||
('middle', "Close tabs on middle-click."),
|
('middle', "Close tabs on middle-click."),
|
||||||
('none', "Don't close tabs using the mouse."))
|
('none', "Don't close tabs using the mouse."))
|
||||||
@ -1478,6 +1444,7 @@ class NewTabPosition(BaseType):
|
|||||||
|
|
||||||
"""How new tabs are positioned."""
|
"""How new tabs are positioned."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('left', "On the left of the current tab."),
|
valid_values = ValidValues(('left', "On the left of the current tab."),
|
||||||
('right', "On the right of the current tab."),
|
('right', "On the right of the current tab."),
|
||||||
('first', "At the left end."),
|
('first', "At the left end."),
|
||||||
@ -1488,6 +1455,7 @@ class IgnoreCase(Bool):
|
|||||||
|
|
||||||
"""Whether to ignore case when searching."""
|
"""Whether to ignore case when searching."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('true', "Search case-insensitively"),
|
valid_values = ValidValues(('true', "Search case-insensitively"),
|
||||||
('false', "Search case-sensitively"),
|
('false', "Search case-sensitively"),
|
||||||
('smart', "Search case-sensitively if there "
|
('smart', "Search case-sensitively if there "
|
||||||
@ -1510,6 +1478,7 @@ class NewInstanceOpenTarget(BaseType):
|
|||||||
|
|
||||||
"""How to open links in an existing instance if a new one is launched."""
|
"""How to open links in an existing instance if a new one is launched."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('tab', "Open a new tab in the existing "
|
valid_values = ValidValues(('tab', "Open a new tab in the existing "
|
||||||
"window and activate the window."),
|
"window and activate the window."),
|
||||||
('tab-bg', "Open a new background tab in the "
|
('tab-bg', "Open a new background tab in the "
|
||||||
@ -1529,6 +1498,7 @@ class DownloadPathSuggestion(BaseType):
|
|||||||
|
|
||||||
"""How to format the question when downloading."""
|
"""How to format the question when downloading."""
|
||||||
|
|
||||||
|
special = True
|
||||||
valid_values = ValidValues(('path', "Show only the download path."),
|
valid_values = ValidValues(('path', "Show only the download path."),
|
||||||
('filename', "Show only download filename."),
|
('filename', "Show only download filename."),
|
||||||
('both', "Show download path and filename."))
|
('both', "Show download path and filename."))
|
||||||
@ -1538,7 +1508,7 @@ class UserAgent(BaseType):
|
|||||||
|
|
||||||
"""The user agent to use."""
|
"""The user agent to use."""
|
||||||
|
|
||||||
typestr = 'user-agent'
|
special = True
|
||||||
|
|
||||||
def __init__(self, none_ok=False):
|
def __init__(self, none_ok=False):
|
||||||
super().__init__(none_ok)
|
super().__init__(none_ok)
|
||||||
|
Loading…
Reference in New Issue
Block a user