diff options
Diffstat (limited to 'mitmproxy/optmanager.py')
| -rw-r--r-- | mitmproxy/optmanager.py | 13 |
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) |
