diff options
| author | Aldo Cortesi <aldo@corte.si> | 2017-12-20 09:09:40 +1300 | 
|---|---|---|
| committer | Aldo Cortesi <aldo@corte.si> | 2017-12-20 09:09:40 +1300 | 
| commit | d7ee5d8f85044c93f5982756f49be8315d148e4c (patch) | |
| tree | a7711babc31a37636de136d44ef6f359d9a00cc0 | |
| parent | 3341edc9fa8e70306e91cf911e4b2b19ef60ba84 (diff) | |
| download | mitmproxy-d7ee5d8f85044c93f5982756f49be8315d148e4c.tar.gz mitmproxy-d7ee5d8f85044c93f5982756f49be8315d148e4c.tar.bz2 mitmproxy-d7ee5d8f85044c93f5982756f49be8315d148e4c.zip | |
commander: palette entries, highlight errors
- Add palette entries specific to commander
- Highlight errors
- Introduce an Unknown type to keep track of extra unknown arguments to
commands
| -rw-r--r-- | mitmproxy/command.py | 2 | ||||
| -rw-r--r-- | mitmproxy/tools/console/commander/commander.py | 9 | ||||
| -rw-r--r-- | mitmproxy/tools/console/palettes.py | 16 | ||||
| -rw-r--r-- | mitmproxy/types.py | 18 | ||||
| -rw-r--r-- | test/mitmproxy/test_command.py | 8 | ||||
| -rw-r--r-- | test/mitmproxy/test_types.py | 9 | 
6 files changed, 56 insertions, 6 deletions
| diff --git a/mitmproxy/command.py b/mitmproxy/command.py index e01c767c..e1e56d3a 100644 --- a/mitmproxy/command.py +++ b/mitmproxy/command.py @@ -172,7 +172,7 @@ class CommandManager(mitmproxy.types._CommandBase):                      if parts[i] in self.commands:                          params[:] = self.commands[parts[i]].paramtypes              else: -                typ = str +                typ = mitmproxy.types.Unknown              to = mitmproxy.types.CommandTypes.get(typ, None)              valid = False diff --git a/mitmproxy/tools/console/commander/commander.py b/mitmproxy/tools/console/commander/commander.py index 125bb76f..cfe00356 100644 --- a/mitmproxy/tools/console/commander/commander.py +++ b/mitmproxy/tools/console/commander/commander.py @@ -72,10 +72,13 @@ class CommandBuffer():          parts, _ = self.master.commands.parse_partial(self.text)          ret = []          for p in parts: -            if p.type == mitmproxy.types.Cmd and p.valid: -                ret.append(("title", p.value)) +            if p.valid: +                if p.type == mitmproxy.types.Cmd: +                    ret.append(("commander_command", p.value)) +                else: +                    ret.append(("text", p.value))              else: -                ret.append(("text", p.value)) +                ret.append(("commander_invalid", p.value))              ret.append(("text", " "))          return ret diff --git a/mitmproxy/tools/console/palettes.py b/mitmproxy/tools/console/palettes.py index 7fbdcfd8..1ff8a438 100644 --- a/mitmproxy/tools/console/palettes.py +++ b/mitmproxy/tools/console/palettes.py @@ -32,6 +32,9 @@ class Palette:          # Grid Editor          'focusfield', 'focusfield_error', 'field_error', 'editfield', + +        # Commander +        'commander_command', 'commander_invalid'      ]      high = None  # type: typing.Mapping[str, typing.Sequence[str]] @@ -117,6 +120,10 @@ class LowDark(Palette):          focusfield_error = ('dark red', 'light gray'),          field_error = ('dark red', 'default'),          editfield = ('white', 'default'), + + +        commander_command = ('white,bold', 'default'), +        commander_invalid = ('light red', 'default'),      ) @@ -183,6 +190,9 @@ class LowLight(Palette):          focusfield_error = ('dark red', 'light gray'),          field_error = ('dark red', 'black'),          editfield = ('black', 'default'), + +        commander_command = ('dark magenta', 'default'), +        commander_invalid = ('light red', 'default'),      ) @@ -267,6 +277,9 @@ class SolarizedLight(LowLight):          focusfield_error = (sol_red, sol_base2),          field_error = (sol_red, 'default'),          editfield = (sol_base01, 'default'), + +        commander_command = (sol_cyan, 'default'), +        commander_invalid = (sol_orange, 'default'),      ) @@ -317,6 +330,9 @@ class SolarizedDark(LowDark):          focusfield_error = (sol_red, sol_base02),          field_error = (sol_red, 'default'),          editfield = (sol_base1, 'default'), + +        commander_command = (sol_blue, 'default'), +        commander_invalid = (sol_orange, 'default'),      ) diff --git a/mitmproxy/types.py b/mitmproxy/types.py index bdbd3924..8ae8b309 100644 --- a/mitmproxy/types.py +++ b/mitmproxy/types.py @@ -18,6 +18,10 @@ class Arg(str):      pass +class Unknown(str): +    pass + +  class CutSpec(typing.Sequence[str]):      pass @@ -116,6 +120,20 @@ class _StrType(_BaseType):          return isinstance(val, str) +class _UnknownType(_BaseType): +    typ = Unknown +    display = "unknown" + +    def completion(self, manager: _CommandBase, t: type, s: str) -> typing.Sequence[str]: +        return [] + +    def parse(self, manager: _CommandBase, t: type, s: str) -> str: +        return s + +    def is_valid(self, manager: _CommandBase, typ: typing.Any, val: typing.Any) -> bool: +        return False + +  class _IntType(_BaseType):      typ = int      display = "int" diff --git a/test/mitmproxy/test_command.py b/test/mitmproxy/test_command.py index 25df2e61..a989995c 100644 --- a/test/mitmproxy/test_command.py +++ b/test/mitmproxy/test_command.py @@ -78,8 +78,12 @@ class TestCommand:              [                  "foo bar",                  [ -                    command.ParseResult(value = "foo", type = mitmproxy.types.Cmd, valid = False), -                    command.ParseResult(value = "bar", type = str, valid = True) +                    command.ParseResult( +                        value = "foo", type = mitmproxy.types.Cmd, valid = False +                    ), +                    command.ParseResult( +                        value = "bar", type = mitmproxy.types.Unknown, valid = False +                    )                  ],                  [],              ], diff --git a/test/mitmproxy/test_types.py b/test/mitmproxy/test_types.py index 29e86203..72492fa9 100644 --- a/test/mitmproxy/test_types.py +++ b/test/mitmproxy/test_types.py @@ -43,6 +43,15 @@ def test_str():          assert b.parse(tctx.master.commands, str, "foo") == "foo" +def test_unknown(): +    with taddons.context() as tctx: +        b = mitmproxy.types._UnknownType() +        assert b.is_valid(tctx.master.commands, mitmproxy.types.Unknown, "foo") is False +        assert b.is_valid(tctx.master.commands, mitmproxy.types.Unknown, 1) is False +        assert b.completion(tctx.master.commands, mitmproxy.types.Unknown, "") == [] +        assert b.parse(tctx.master.commands, mitmproxy.types.Unknown, "foo") == "foo" + +  def test_int():      with taddons.context() as tctx:          b = mitmproxy.types._IntType() | 
