diff options
author | Aldo Cortesi <aldo@corte.si> | 2017-03-19 14:28:29 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@corte.si> | 2017-03-19 14:36:23 +1300 |
commit | 04f1a4443d2a01b66046d83f919c7e7ba4478b74 (patch) | |
tree | fe2b9b479573707737b5d5c155022bb2ef97f6f9 | |
parent | 8d68196fd04e6e7239c49141603d9385a017d808 (diff) | |
download | mitmproxy-04f1a4443d2a01b66046d83f919c7e7ba4478b74.tar.gz mitmproxy-04f1a4443d2a01b66046d83f919c7e7ba4478b74.tar.bz2 mitmproxy-04f1a4443d2a01b66046d83f919c7e7ba4478b74.zip |
options: reraise when there's an error with a partial update
Fixes #2174
-rw-r--r-- | mitmproxy/optmanager.py | 2 | ||||
-rw-r--r-- | mitmproxy/tools/console/grideditor/editors.py | 5 | ||||
-rw-r--r-- | mitmproxy/tools/console/options.py | 3 | ||||
-rw-r--r-- | test/mitmproxy/test_optmanager.py | 8 |
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 |