commands: teach parser correct annotations for variable args

We should annotate with the base type, not the resulting sequence.
This commit is contained in:
Aldo Cortesi 2017-06-13 10:26:03 +12:00
parent 0fc24857e1
commit 56eb0441da
4 changed files with 13 additions and 9 deletions

View File

@ -10,7 +10,7 @@ from mitmproxy.net.http import status_codes
class Core: class Core:
@command.command("set") @command.command("set")
def set(self, *spec: typing.Sequence[str]) -> None: def set(self, *spec: str) -> None:
""" """
Set an option of the form "key[=value]". When the value is omitted, Set an option of the form "key[=value]". When the value is omitted,
booleans are set to true, strings and integers are set to None (if booleans are set to true, strings and integers are set to None (if
@ -18,9 +18,9 @@ class Core:
false or toggle. If multiple specs are passed, they are joined false or toggle. If multiple specs are passed, they are joined
into one separated by spaces. into one separated by spaces.
""" """
spec = " ".join(spec) strspec = " ".join(spec)
try: try:
ctx.options.set(spec) ctx.options.set(strspec)
except exceptions.OptionsError as e: except exceptions.OptionsError as e:
raise exceptions.CommandError(e) from e raise exceptions.CommandError(e) from e

View File

@ -59,7 +59,7 @@ class Command:
def paramnames(self) -> typing.Sequence[str]: def paramnames(self) -> typing.Sequence[str]:
v = [typename(i, False) for i in self.paramtypes] v = [typename(i, False) for i in self.paramtypes]
if self.has_positional: if self.has_positional:
v[-1] = "*" + v[-1][1:-1] v[-1] = "*" + v[-1]
return v return v
def retname(self) -> str: def retname(self) -> str:
@ -92,7 +92,11 @@ class Command:
pargs.append(parsearg(self.manager, args[i], self.paramtypes[i])) pargs.append(parsearg(self.manager, args[i], self.paramtypes[i]))
if remainder: if remainder:
if typecheck.check_command_type(remainder, self.paramtypes[-1]): chk = typecheck.check_command_type(
remainder,
typing.Sequence[self.paramtypes[-1]] # type: ignore
)
if chk:
pargs.extend(remainder) pargs.extend(remainder)
else: else:
raise exceptions.CommandError("Invalid value type.") raise exceptions.CommandError("Invalid value type.")

View File

@ -189,7 +189,7 @@ class ConsoleAddon:
@command.command("console.choose") @command.command("console.choose")
def console_choose( def console_choose(
self, prompt: str, choices: typing.Sequence[str], *cmd: typing.Sequence[str] self, prompt: str, choices: typing.Sequence[str], *cmd: str
) -> None: ) -> None:
""" """
Prompt the user to choose from a specified list of strings, then Prompt the user to choose from a specified list of strings, then
@ -211,7 +211,7 @@ class ConsoleAddon:
@command.command("console.choose.cmd") @command.command("console.choose.cmd")
def console_choose_cmd( def console_choose_cmd(
self, prompt: str, choicecmd: str, *cmd: typing.Sequence[str] self, prompt: str, choicecmd: str, *cmd: str
) -> None: ) -> None:
""" """
Prompt the user to choose from a list of strings returned by a Prompt the user to choose from a list of strings returned by a
@ -234,7 +234,7 @@ class ConsoleAddon:
) )
@command.command("console.command") @command.command("console.command")
def console_command(self, *partial: typing.Sequence[str]) -> None: def console_command(self, *partial: str) -> None:
""" """
Prompt the user to edit a command with a (possilby empty) starting value. Prompt the user to edit a command with a (possilby empty) starting value.
""" """

View File

@ -22,7 +22,7 @@ class TAddon:
def empty(self) -> None: def empty(self) -> None:
pass pass
def varargs(self, one: str, *var: typing.Sequence[str]) -> typing.Sequence[str]: def varargs(self, one: str, *var: str) -> typing.Sequence[str]:
return list(var) return list(var)