aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/optmanager.py19
-rw-r--r--test/mitmproxy/test_optmanager.py5
2 files changed, 14 insertions, 10 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.")
diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py
index 0c98daea..97124368 100644
--- a/test/mitmproxy/test_optmanager.py
+++ b/test/mitmproxy/test_optmanager.py
@@ -30,11 +30,6 @@ class TD2(TD):
def test_defaults():
- assert TD2.default("one") == "done"
- assert TD2.default("two") == "dtwo"
- assert TD2.default("three") == "dthree"
- assert TD2.default("four") == "dfour"
-
o = TD2()
assert o._defaults == {
"one": "done",