aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2017-07-30 03:47:25 +0200
committerGitHub <noreply@github.com>2017-07-30 03:47:25 +0200
commitf844c68e2ec6b9daedc376f75ae0a4e09a4ac22c (patch)
tree008202efed288aeb2a189f6597d1718ced59c851
parent7594dac94bede4b03660c76af9e353d8646cdf39 (diff)
parent6a41122990017491222602753441de8ac438b735 (diff)
downloadmitmproxy-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.py13
-rw-r--r--test/mitmproxy/test_addonmanager.py8
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"