def test_bind(): with taddons.context() as tctx: km = keymap.Keymap(tctx.master) km.executor = mock.Mock() with pytest.raises(ValueError): km.add("foo", "bar", ["unsupported"]) km.add("key", "str", ["options", "commands"]) assert km.get("options", "key") assert km.get("commands", "key") assert not km.get("flowlist", "key") assert len(km.list("commands")) == 1 km.handle("unknown", "unknown") assert not km.executor.called km.handle("options", "key") assert km.executor.called km.add("glob", "str", ["global"]) km.executor = mock.Mock() km.handle("options", "glob") assert km.executor.called assert len(km.list("global")) == 1
def __init__(self, opts): super().__init__(opts) self.start_err: typing.Optional[log.LogEntry] = None self.view: view.View = view.View() self.events = eventstore.EventStore() self.events.sig_add.connect(self.sig_add_log) self.stream_path = None self.keymap = keymap.Keymap(self) defaultkeys.map(self.keymap) self.options.errored.connect(self.options_error) self.view_stack = [] self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, self.events, readfile.ReadFile(), consoleaddons.ConsoleAddon(self), keymap.KeymapConfig(), ) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler) self.window = None
def __init__(self, opts): super().__init__(opts) self.view = view.View() # type: view.View self.stream_path = None self.keymap = keymap.Keymap(self) defaultkeys.map(self.keymap) self.options.errored.connect(self.options_error) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(consoleaddons.Logger()) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, consoleaddons.UnsupportedLog(), readfile.ReadFile(), consoleaddons.ConsoleAddon(self), ) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler) self.window = None
def __init__(self, options, server): super().__init__(options, server) self.view = view.View() # type: view.View self.view.sig_view_update.connect(signals.flow_change.send) self.stream_path = None # This line is just for type hinting self.options = self.options # type: Options self.keymap = keymap.Keymap(self) default_keymap(self.keymap) self.options.errored.connect(self.options_error) self.logbuffer = urwid.SimpleListWalker([]) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.pop_view_state.connect(self.sig_pop_view_state) signals.replace_view_state.connect(self.sig_replace_view_state) signals.push_view_state.connect(self.sig_push_view_state) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(Logger()) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, UnsupportedLog(), readfile.ReadFile(), ConsoleCommands(self), ) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler)
def __init__(self, opts): super().__init__(opts) self.view: view.View = view.View() self.events = eventstore.EventStore() self.events.sig_add.connect(self.sig_add_log) self.stream_path = None self.keymap = keymap.Keymap(self) defaultkeys.map(self.keymap) self.options.errored.connect(self.options_error) self.view_stack = [] self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, self.events, readfile.ReadFile(), consoleaddons.ConsoleAddon(self), keymap.KeymapConfig(), errorcheck.ErrorCheck(log_to_stderr=True), ) self.window = None
def test_load_path(tmpdir): dst = str(tmpdir.join("conf")) kmc = keymap.KeymapConfig() with taddons.context(kmc) as tctx: km = keymap.Keymap(tctx.master) tctx.master.keymap = km with open(dst, 'wb') as f: f.write(b"\xff\xff\xff") with pytest.raises(keymap.KeyBindingError, match="expected UTF8"): kmc.load_path(km, dst) with open(dst, 'w') as f: f.write("'''") with pytest.raises(keymap.KeyBindingError): kmc.load_path(km, dst) with open(dst, 'w') as f: f.write(""" - key: key1 ctx: [unknown] cmd: > foo bar foo bar """) with pytest.raises(keymap.KeyBindingError): kmc.load_path(km, dst) with open(dst, 'w') as f: f.write(""" - key: key1 ctx: [chooser] help: one cmd: > foo bar foo bar """) kmc.load_path(km, dst) assert (km.get("chooser", "key1")) km.add("key123", "str", ["flowlist", "flowview"]) with open(dst, 'w') as f: f.write(""" - key: key123 ctx: [options] cmd: foo """) kmc.load_path(km, dst) for b in km.bindings: if b.key == "key123": assert b.contexts == ["options"] break
def test_remove(): with taddons.context() as tctx: km = keymap.Keymap(tctx.master) km.add("key", "str", ["options", "commands"], "help1") assert len(km.bindings) == 1 assert "options" in km.bindings[0].contexts km.remove("key", ["options"]) assert len(km.bindings) == 1 assert "options" not in km.bindings[0].contexts km.remove("key", ["commands"]) assert len(km.bindings) == 0
def test_commands_exist(): km = keymap.Keymap(None) defaultkeys.map(km) assert km.bindings m = master.ConsoleMaster(None) m.load_flow(tflow()) for binding in km.bindings: cmd, *args = command.lexer(binding.command) assert cmd in m.commands.commands cmd_obj = m.commands.commands[cmd] try: cmd_obj.prepare_args(args) except Exception as e: raise ValueError("Invalid command: {}".format( binding.command)) from e
def test_join(): with taddons.context() as tctx: km = keymap.Keymap(tctx.master) km.add("key", "str", ["options"], "help1") km.add("key", "str", ["commands"]) assert len(km.bindings) == 1 assert len(km.bindings[0].contexts) == 2 assert km.bindings[0].help == "help1" km.add("key", "str", ["commands"], "help2") assert len(km.bindings) == 1 assert len(km.bindings[0].contexts) == 2 assert km.bindings[0].help == "help2" assert km.get("commands", "key") km.unbind(km.bindings[0]) assert len(km.bindings) == 0 assert not km.get("commands", "key")
def test_load_path(tmpdir): dst = str(tmpdir.join("conf")) kmc = keymap.KeymapConfig() with taddons.context(kmc) as tctx: km = keymap.Keymap(tctx.master) tctx.master.keymap = km with open(dst, 'wb') as f: f.write(b"\xff\xff\xff") with pytest.raises(keymap.KeyBindingError, match="expected UTF8"): kmc.load_path(km, dst) with open(dst, 'w') as f: f.write("'''") with pytest.raises(keymap.KeyBindingError): kmc.load_path(km, dst) with open(dst, 'w') as f: f.write(""" - key: key1 ctx: [unknown] cmd: > foo bar foo bar """) with pytest.raises(keymap.KeyBindingError): kmc.load_path(km, dst) with open(dst, 'w') as f: f.write(""" - key: key1 ctx: [chooser] help: one cmd: > foo bar foo bar """) kmc.load_path(km, dst) assert (km.get("chooser", "key1"))
async def test_commands_exist(): command_manager = command.CommandManager(ctx) km = keymap.Keymap(None) defaultkeys.map(km) assert km.bindings m = master.ConsoleMaster(None) await m.load_flow(tflow()) for binding in km.bindings: parsed, _ = command_manager.parse_partial(binding.command.strip()) cmd = parsed[0].value args = [a.value for a in parsed[1:] if a.type != mitmproxy.types.Space] assert cmd in m.commands.commands cmd_obj = m.commands.commands[cmd] try: cmd_obj.prepare_args(args) except Exception as e: raise ValueError(f"Invalid command: {binding.command}") from e
def __init__(self, options, server): super().__init__(options, server) if not sys.stdout.isatty(): print( "Error: mitmproxy's console interface requires a tty. " "Please run mitmproxy in an interactive shell environment.", file=sys.stderr) sys.exit(1) self.view = view.View() # type: view.View self.stream_path = None # This line is just for type hinting self.options = self.options # type: Options self.keymap = keymap.Keymap(self) defaultkeys.map(self.keymap) self.options.errored.connect(self.options_error) self.view_stack = [] signals.call_in.connect(self.sig_call_in) signals.sig_add_log.connect(self.sig_add_log) self.addons.add(consoleaddons.Logger()) self.addons.add(*addons.default_addons()) self.addons.add( intercept.Intercept(), self.view, consoleaddons.UnsupportedLog(), readfile.ReadFile(), consoleaddons.ConsoleAddon(self), ) def sigint_handler(*args, **kwargs): self.prompt_for_exit() signal.signal(signal.SIGINT, sigint_handler) self.window = None