diff options
author | Maximilian Hils <git@maximilianhils.com> | 2017-07-30 03:47:25 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-30 03:47:25 +0200 |
commit | f844c68e2ec6b9daedc376f75ae0a4e09a4ac22c (patch) | |
tree | 008202efed288aeb2a189f6597d1718ced59c851 | |
parent | 7594dac94bede4b03660c76af9e353d8646cdf39 (diff) | |
parent | 6a41122990017491222602753441de8ac438b735 (diff) | |
download | mitmproxy-f844c68e2ec6b9daedc376f75ae0a4e09a4ac22c.tar.gz mitmproxy-f844c68e2ec6b9daedc376f75ae0a4e09a4ac22c.tar.bz2 mitmproxy-f844c68e2ec6b9daedc376f75ae0a4e09a4ac22c.zip |
Merge pull request #2485 from mhils/silent-option-redeclaration
Make option redeclaration silent if signature is the same
-rw-r--r-- | mitmproxy/addonmanager.py | 13 | ||||
-rw-r--r-- | test/mitmproxy/test_addonmanager.py | 8 |
2 files changed, 20 insertions, 1 deletions
diff --git a/mitmproxy/addonmanager.py b/mitmproxy/addonmanager.py index 9094288b..857ed530 100644 --- a/mitmproxy/addonmanager.py +++ b/mitmproxy/addonmanager.py @@ -86,7 +86,18 @@ class Loader: choices: typing.Optional[typing.Sequence[str]] = None ) -> None: if name in self.master.options: - ctx.log.warn("Over-riding existing option %s" % name) + existing = self.master.options._options[name] + same_signature = ( + existing.name == name and + existing.typespec == typespec and + existing.default == default and + existing.help == help and + existing.choices == choices + ) + if same_signature: + return + else: + ctx.log.warn("Over-riding existing option %s" % name) self.master.options.add_option( name, typespec, diff --git a/test/mitmproxy/test_addonmanager.py b/test/mitmproxy/test_addonmanager.py index 722d108b..fc048571 100644 --- a/test/mitmproxy/test_addonmanager.py +++ b/test/mitmproxy/test_addonmanager.py @@ -91,7 +91,15 @@ def test_loader(): with taddons.context() as tctx: l = addonmanager.Loader(tctx.master) l.add_option("custom_option", bool, False, "help") + assert "custom_option" in l.master.options + + # calling this again with the same signature is a no-op. l.add_option("custom_option", bool, False, "help") + assert not tctx.master.has_log("Over-riding existing option") + + # a different signature should emit a warning though. + l.add_option("custom_option", bool, True, "help") + assert tctx.master.has_log("Over-riding existing option") def cmd(a: str) -> str: return "foo" |