From 6dff8c58adbcb9da9b7bdeb088148c3f0d364c02 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 12 May 2018 10:15:08 +1200 Subject: [PATCH] commands: if no explicit return type is specified, assume None This is going to be a super common error for addon authors, so we might as well handle it. --- mitmproxy/command.py | 5 ++++- test/mitmproxy/test_command.py | 13 +++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/mitmproxy/command.py b/mitmproxy/command.py index 8f0755254..cba2673c2 100644 --- a/mitmproxy/command.py +++ b/mitmproxy/command.py @@ -58,7 +58,10 @@ class Command: if i.kind == i.VAR_POSITIONAL: self.has_positional = True self.paramtypes = [v.annotation for v in sig.parameters.values()] - self.returntype = sig.return_annotation + if sig.return_annotation == inspect._empty: + self.returntype = None + else: + self.returntype = sig.return_annotation def paramnames(self) -> typing.Sequence[str]: v = [typename(i) for i in self.paramtypes] diff --git a/test/mitmproxy/test_command.py b/test/mitmproxy/test_command.py index ea1017e7c..22ebcc210 100644 --- a/test/mitmproxy/test_command.py +++ b/test/mitmproxy/test_command.py @@ -55,7 +55,20 @@ class TAddon: pass +class TypeErrAddon: + @command.command("noret") + def noret(self): + pass + + class TestCommand: + def test_typecheck(self): + with taddons.context(loadcore=False) as tctx: + cm = command.CommandManager(tctx.master) + a = TypeErrAddon() + c = command.Command(cm, "noret", a.noret) + print(c.signature_help()) + def test_varargs(self): with taddons.context() as tctx: cm = command.CommandManager(tctx.master)