diff options
author | Maximilian Hils <git@maximilianhils.com> | 2017-07-30 02:14:44 +0200 |
---|---|---|
committer | Maximilian Hils <git@maximilianhils.com> | 2017-07-30 02:14:44 +0200 |
commit | 6a41122990017491222602753441de8ac438b735 (patch) | |
tree | 290f49a024c69ab562ecdcbc7e5bef21382148d8 | |
parent | ecc01b0f02b60cfce00f36057a78354780278aca (diff) | |
download | mitmproxy-6a41122990017491222602753441de8ac438b735.tar.gz mitmproxy-6a41122990017491222602753441de8ac438b735.tar.bz2 mitmproxy-6a41122990017491222602753441de8ac438b735.zip |
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 5bff61d1..67b766fa 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" |