aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/optmanager.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/optmanager.py')
-rw-r--r--mitmproxy/optmanager.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/mitmproxy/optmanager.py b/mitmproxy/optmanager.py
index cbf656f5..713a0b62 100644
--- a/mitmproxy/optmanager.py
+++ b/mitmproxy/optmanager.py
@@ -53,6 +53,15 @@ class OptManager(metaclass=_DefaultsMeta):
# ._initialized = True as the final operation.
instance = super().__new__(cls)
instance.__dict__["_opts"] = {}
+
+ defaults = {}
+ for klass in reversed(inspect.getmro(cls)):
+ for p in inspect.signature(klass.__init__).parameters.values():
+ if p.kind in (p.KEYWORD_ONLY, p.POSITIONAL_OR_KEYWORD):
+ if not p.default == p.empty:
+ defaults[p.name] = p.default
+ instance.__dict__["_defaults"] = defaults
+
return instance
def __init__(self):
@@ -123,16 +132,16 @@ class OptManager(metaclass=_DefaultsMeta):
def keys(self):
return set(self._opts.keys())
+ @classmethod
+ def default(klass, opt):
+ return copy.deepcopy(klass._defaults[opt])
+
def reset(self):
"""
Restore defaults for all options.
"""
self.update(**self._defaults)
- @classmethod
- def default(klass, opt):
- return copy.deepcopy(klass._defaults[opt])
-
def update(self, **kwargs):
updated = set(kwargs.keys())
for k, v in kwargs.items():
@@ -215,7 +224,7 @@ class OptManager(metaclass=_DefaultsMeta):
snip = v.problem_mark.get_snippet()
raise exceptions.OptionsError(
"Config error at line %s:\n%s\n%s" %
- (v.problem_mark.line+1, snip, v.problem)
+ (v.problem_mark.line + 1, snip, v.problem)
)
if isinstance(data, str):
raise exceptions.OptionsError("Config error - no keys found.")