MCPcopy Index your code
hub / github.com/mitmproxy/mitmproxy / Command

Class Command

mitmproxy/command.py:65–158  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

63
64
65class Command:
66 name: str
67 manager: "CommandManager"
68 signature: inspect.Signature
69 help: str | None
70
71 def __init__(self, manager: "CommandManager", name: str, func: Callable) -> None:
72 self.name = name
73 self.manager = manager
74 self.func = func
75 self.signature = inspect.signature(self.func, eval_str=True)
76
77 if func.__doc__:
78 txt = func.__doc__.strip()
79 self.help = "\n".join(textwrap.wrap(txt))
80 else:
81 self.help = None
82
83 # This fails with a CommandException if types are invalid
84 for name, parameter in self.signature.parameters.items():
85 t = parameter.annotation
86 if not mitmproxy.types.CommandTypes.get(parameter.annotation, None):
87 raise exceptions.CommandError(
88 f"Argument {name} has an unknown type {t} in {func}."
89 )
90 if self.return_type and not mitmproxy.types.CommandTypes.get(
91 self.return_type, None
92 ):
93 raise exceptions.CommandError(
94 f"Return type has an unknown type ({self.return_type}) in {func}."
95 )
96
97 @property
98 def return_type(self) -> type | None:
99 return _empty_as_none(self.signature.return_annotation)
100
101 @property
102 def parameters(self) -> list[CommandParameter]:
103 """Returns a list of CommandParameters."""
104 ret = []
105 for name, param in self.signature.parameters.items():
106 ret.append(CommandParameter(name, param.annotation, param.kind))
107 return ret
108
109 def signature_help(self) -> str:
110 params = " ".join(str(param) for param in self.parameters)
111 if self.return_type:
112 ret = f" -> {typename(self.return_type)}"
113 else:
114 ret = ""
115 return f"{self.name} {params}{ret}"
116
117 def prepare_args(self, args: Sequence[str]) -> inspect.BoundArguments:
118 try:
119 bound_arguments = self.signature.bind(*args)
120 except TypeError:
121 expected = f"Expected: {self.signature.parameters}"
122 received = f"Received: {args}"

Callers 1

addMethod · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…