aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/optmanager.py2
-rw-r--r--mitmproxy/tools/console/grideditor/editors.py5
-rw-r--r--mitmproxy/tools/console/options.py3
-rw-r--r--test/mitmproxy/test_optmanager.py8
4 files changed, 12 insertions, 6 deletions
diff --git a/mitmproxy/optmanager.py b/mitmproxy/optmanager.py
index f1d6461d..c58bc7d0 100644
--- a/mitmproxy/optmanager.py
+++ b/mitmproxy/optmanager.py
@@ -196,7 +196,7 @@ class OptManager:
unknown[k] = v
updated = set(known.keys())
if updated:
- with self.rollback(updated):
+ with self.rollback(updated, reraise=True):
for k, v in known.items():
self._options[k].set(v)
self.changed.send(self, updated=updated)
diff --git a/mitmproxy/tools/console/grideditor/editors.py b/mitmproxy/tools/console/grideditor/editors.py
index 39e51b2b..313495e4 100644
--- a/mitmproxy/tools/console/grideditor/editors.py
+++ b/mitmproxy/tools/console/grideditor/editors.py
@@ -258,7 +258,10 @@ class OptionsEditor(base.GridEditor):
super().__init__(master, [[i] for i in vals], self.callback)
def callback(self, vals):
- setattr(self.master.options, self.name, [i[0] for i in vals])
+ try:
+ setattr(self.master.options, self.name, [i[0] for i in vals])
+ except exceptions.OptionsError as v:
+ signals.status_message.send(message=str(v))
def is_error(self, col, val):
pass
diff --git a/mitmproxy/tools/console/options.py b/mitmproxy/tools/console/options.py
index 20f53f81..56d22715 100644
--- a/mitmproxy/tools/console/options.py
+++ b/mitmproxy/tools/console/options.py
@@ -186,10 +186,9 @@ class OptionsList(urwid.ListBox):
v = self.walker.get_edit_text()
try:
d = self.master.options.parse_setval(foc.opt.name, v)
+ self.master.options.update(**{foc.opt.name: d})
except exceptions.OptionsError as v:
signals.status_message.send(message=str(v))
- else:
- self.master.options.update(**{foc.opt.name: d})
self.walker.stop_editing()
elif key == "esc":
self.walker.stop_editing()
diff --git a/test/mitmproxy/test_optmanager.py b/test/mitmproxy/test_optmanager.py
index ef5ebd27..01636640 100644
--- a/test/mitmproxy/test_optmanager.py
+++ b/test/mitmproxy/test_optmanager.py
@@ -210,8 +210,12 @@ def test_rollback():
o.errored.connect(errsub)
assert o.one is None
- o.one = 10
- o.bool = True
+ with pytest.raises(exceptions.OptionsError):
+ o.one = 10
+ assert o.one is None
+ with pytest.raises(exceptions.OptionsError):
+ o.bool = True
+ assert o.bool is False
assert isinstance(recerr[0]["exc"], exceptions.OptionsError)
assert o.one is None
assert o.bool is False