aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/optmanager.py
diff options
context:
space:
mode:
Diffstat (limited to 'mitmproxy/optmanager.py')
-rw-r--r--mitmproxy/optmanager.py13
1 files changed, 12 insertions, 1 deletions
diff --git a/mitmproxy/optmanager.py b/mitmproxy/optmanager.py
index 6683e41d..20492f82 100644
--- a/mitmproxy/optmanager.py
+++ b/mitmproxy/optmanager.py
@@ -3,6 +3,7 @@ import blinker
import pprint
from mitmproxy import exceptions
+from mitmproxy.utils import typecheck
"""
The base implementation for Options.
@@ -58,10 +59,19 @@ class OptManager:
def __setattr__(self, attr, value):
if not self._initialized:
+ self._typecheck(attr, value)
self._opts[attr] = value
return
self.update(**{attr: value})
+ def _typecheck(self, attr, value):
+ expected_type = typecheck.get_arg_type_from_constructor_annotation(
+ type(self), attr
+ )
+ if expected_type is None:
+ return # no type info :(
+ typecheck.check_type(attr, value, expected_type)
+
def keys(self):
return set(self._opts.keys())
@@ -70,9 +80,10 @@ class OptManager:
def update(self, **kwargs):
updated = set(kwargs.keys())
- for k in kwargs:
+ for k, v in kwargs.items():
if k not in self._opts:
raise KeyError("No such option: %s" % k)
+ self._typecheck(k, v)
with self.rollback(updated):
self._opts.update(kwargs)
self.changed.send(self, updated=updated)