Esempio n. 1
0
    def keypress(self, size, key):
        key = super(self.__class__, self).keypress(size, key)

        if key == " ":
            self.view_next_flow(self.flow)
            return

        key = common.shortcuts(key)
        if self.tab_offset == TAB_REQ:
            conn = self.flow.request
        elif self.tab_offset == TAB_RESP:
            conn = self.flow.response
        else:
            conn = None

        if key in ("up", "down", "page up", "page down"):
            # Why doesn't this just work??
            self._w.keypress(size, key)
        elif key == "a":
            self.flow.accept_intercept(self.master)
            signals.flow_change.send(self, flow=self.flow)
        elif key == "A":
            self.master.accept_all()
            signals.flow_change.send(self, flow=self.flow)
        elif key == "d":
            if self.state.flow_count() == 1:
                self.master.view_flowlist()
            elif self.state.view.index(self.flow) == len(self.state.view) - 1:
                self.view_prev_flow(self.flow)
            else:
                self.view_next_flow(self.flow)
            f = self.flow
            f.kill(self.master)
            self.state.delete_flow(f)
        elif key == "D":
            f = self.master.duplicate_flow(self.flow)
            self.master.view_flow(f)
            signals.status_message.send(message="Duplicated.")
        elif key == "p":
            self.view_prev_flow(self.flow)
        elif key == "r":
            r = self.master.replay_request(self.flow)
            if r:
                signals.status_message.send(message=r)
            signals.flow_change.send(self, flow=self.flow)
        elif key == "V":
            if not self.flow.modified():
                signals.status_message.send(message="Flow not modified.")
                return
            self.state.revert(self.flow)
            signals.flow_change.send(self, flow=self.flow)
            signals.status_message.send(message="Reverted.")
        elif key == "W":
            signals.status_prompt_path.send(prompt="Save this flow",
                                            callback=self.master.save_one_flow,
                                            args=(self.flow, ))
        elif key == "E":
            signals.status_prompt_onekey.send(self,
                                              prompt="Export",
                                              keys=(
                                                  ("as curl command", "c"),
                                                  ("as python code", "p"),
                                                  ("as raw request", "r"),
                                                  ("as locust code", "l"),
                                                  ("as locust task", "t"),
                                              ),
                                              callback=common.export_prompt,
                                              args=(self.flow, ))
        elif key == "|":
            signals.status_prompt_path.send(
                prompt="Send flow to script",
                callback=self.master.run_script_once,
                args=(self.flow, ))

        if not conn and key in set(list("befgmxvz")):
            signals.status_message.send(
                message="Tab to the request or response", expire=1)
        elif conn:
            if key == "b":
                if self.tab_offset == TAB_REQ:
                    common.ask_save_body("q", self.master, self.state,
                                         self.flow)
                else:
                    common.ask_save_body("s", self.master, self.state,
                                         self.flow)
            elif key == "e":
                if self.tab_offset == TAB_REQ:
                    signals.status_prompt_onekey.send(prompt="Edit request",
                                                      keys=(
                                                          ("cookies", "c"),
                                                          ("query", "q"),
                                                          ("path", "p"),
                                                          ("url", "u"),
                                                          ("header", "h"),
                                                          ("form", "f"),
                                                          ("raw body", "r"),
                                                          ("method", "m"),
                                                      ),
                                                      callback=self.edit)
                else:
                    signals.status_prompt_onekey.send(prompt="Edit response",
                                                      keys=(
                                                          ("cookies", "c"),
                                                          ("code", "o"),
                                                          ("message", "m"),
                                                          ("header", "h"),
                                                          ("raw body", "r"),
                                                      ),
                                                      callback=self.edit)
                key = None
            elif key == "f":
                signals.status_message.send(message="Loading all body data...")
                self.state.add_flow_setting(self.flow,
                                            (self.tab_offset, "fullcontents"),
                                            True)
                signals.flow_change.send(self, flow=self.flow)
                signals.status_message.send(message="")
            elif key == "P":
                if self.tab_offset == TAB_REQ:
                    scope = "q"
                else:
                    scope = "s"
                common.ask_copy_part(scope, self.flow, self.master, self.state)
            elif key == "m":
                p = list(contentviews.view_prompts)
                p.insert(0, ("Clear", "C"))
                signals.status_prompt_onekey.send(
                    self,
                    prompt="Display mode",
                    keys=p,
                    callback=self.change_this_display_mode)
                key = None
            elif key == "x":
                signals.status_prompt_onekey.send(prompt="Delete body",
                                                  keys=(
                                                      ("completely", "c"),
                                                      ("mark as missing", "m"),
                                                  ),
                                                  callback=self.delete_body)
                key = None
            elif key == "v":
                if conn.content:
                    t = conn.headers.get("content-type")
                    if "EDITOR" in os.environ or "PAGER" in os.environ:
                        self.master.spawn_external_viewer(conn.content, t)
                    else:
                        signals.status_message.send(
                            message="Error! Set $EDITOR or $PAGER.")
            elif key == "z":
                self.flow.backup()
                e = conn.headers.get("content-encoding", "identity")
                if e != "identity":
                    if not conn.decode():
                        signals.status_message.send(
                            message="Could not decode - invalid data?")
                else:
                    signals.status_prompt_onekey.send(
                        prompt="Select encoding: ",
                        keys=(
                            ("gzip", "z"),
                            ("deflate", "d"),
                        ),
                        callback=self.encode_callback,
                        args=(conn, ))
                signals.flow_change.send(self, flow=self.flow)
        return key
Esempio n. 2
0
    def keypress(self, size, key):
        key = super(self.__class__, self).keypress(size, key)

        if key == " ":
            self.view_next_flow(self.flow)
            return

        key = common.shortcuts(key)
        if self.tab_offset == TAB_REQ:
            conn = self.flow.request
        elif self.tab_offset == TAB_RESP:
            conn = self.flow.response
        else:
            conn = None

        if key in ("up", "down", "page up", "page down"):
            # Why doesn't this just work??
            self._w.keypress(size, key)
        elif key == "a":
            self.flow.accept_intercept(self.master)
            signals.flow_change.send(self, flow = self.flow)
        elif key == "A":
            self.master.accept_all()
            signals.flow_change.send(self, flow = self.flow)
        elif key == "d":
            if self.state.flow_count() == 1:
                self.master.view_flowlist()
            elif self.state.view.index(self.flow) == len(self.state.view) - 1:
                self.view_prev_flow(self.flow)
            else:
                self.view_next_flow(self.flow)
            f = self.flow
            f.kill(self.master)
            self.state.delete_flow(f)
        elif key == "D":
            f = self.master.duplicate_flow(self.flow)
            self.master.view_flow(f)
            signals.status_message.send(message="Duplicated.")
        elif key == "p":
            self.view_prev_flow(self.flow)
        elif key == "r":
            r = self.master.replay_request(self.flow)
            if r:
                signals.status_message.send(message=r)
            signals.flow_change.send(self, flow = self.flow)
        elif key == "V":
            if not self.flow.modified():
                signals.status_message.send(message="Flow not modified.")
                return
            self.state.revert(self.flow)
            signals.flow_change.send(self, flow = self.flow)
            signals.status_message.send(message="Reverted.")
        elif key == "W":
            signals.status_prompt_path.send(
                prompt = "Save this flow",
                callback = self.master.save_one_flow,
                args = (self.flow,)
            )
        elif key == "E":
            signals.status_prompt_onekey.send(
                self,
                prompt = "Export",
                keys = (
                    ("as curl command", "c"),
                    ("as python code", "p"),
                    ("as raw request", "r"),
                    ("as locust code", "l"),
                    ("as locust task", "t"),
                ),
                callback = common.export_prompt,
                args = (self.flow,)
            )
        elif key == "|":
            signals.status_prompt_path.send(
                prompt = "Send flow to script",
                callback = self.master.run_script_once,
                args = (self.flow,)
            )

        if not conn and key in set(list("befgmxvz")):
            signals.status_message.send(
                message = "Tab to the request or response",
                expire = 1
            )
        elif conn:
            if key == "b":
                if self.tab_offset == TAB_REQ:
                    common.ask_save_body(
                        "q", self.master, self.state, self.flow
                    )
                else:
                    common.ask_save_body(
                        "s", self.master, self.state, self.flow
                    )
            elif key == "e":
                if self.tab_offset == TAB_REQ:
                    signals.status_prompt_onekey.send(
                        prompt = "Edit request",
                        keys = (
                            ("cookies", "c"),
                            ("query", "q"),
                            ("path", "p"),
                            ("url", "u"),
                            ("header", "h"),
                            ("form", "f"),
                            ("raw body", "r"),
                            ("method", "m"),
                        ),
                        callback = self.edit
                    )
                else:
                    signals.status_prompt_onekey.send(
                        prompt = "Edit response",
                        keys = (
                            ("cookies", "c"),
                            ("code", "o"),
                            ("message", "m"),
                            ("header", "h"),
                            ("raw body", "r"),
                        ),
                        callback = self.edit
                    )
                key = None
            elif key == "f":
                signals.status_message.send(message="Loading all body data...")
                self.state.add_flow_setting(
                    self.flow,
                    (self.tab_offset, "fullcontents"),
                    True
                )
                signals.flow_change.send(self, flow = self.flow)
                signals.status_message.send(message="")
            elif key == "P":
                if self.tab_offset == TAB_REQ:
                    scope = "q"
                else:
                    scope = "s"
                common.ask_copy_part(scope, self.flow, self.master, self.state)
            elif key == "m":
                p = list(contentviews.view_prompts)
                p.insert(0, ("Clear", "C"))
                signals.status_prompt_onekey.send(
                    self,
                    prompt = "Display mode",
                    keys = p,
                    callback = self.change_this_display_mode
                )
                key = None
            elif key == "x":
                signals.status_prompt_onekey.send(
                    prompt = "Delete body",
                    keys = (
                        ("completely", "c"),
                        ("mark as missing", "m"),
                    ),
                    callback = self.delete_body
                )
                key = None
            elif key == "v":
                if conn.content:
                    t = conn.headers.get("content-type")
                    if "EDITOR" in os.environ or "PAGER" in os.environ:
                        self.master.spawn_external_viewer(conn.content, t)
                    else:
                        signals.status_message.send(
                            message = "Error! Set $EDITOR or $PAGER."
                        )
            elif key == "z":
                self.flow.backup()
                e = conn.headers.get("content-encoding", "identity")
                if e != "identity":
                    if not conn.decode():
                        signals.status_message.send(
                            message = "Could not decode - invalid data?"
                        )
                else:
                    signals.status_prompt_onekey.send(
                        prompt = "Select encoding: ",
                        keys = (
                            ("gzip", "z"),
                            ("deflate", "d"),
                        ),
                        callback = self.encode_callback,
                        args = (conn,)
                    )
                signals.flow_change.send(self, flow = self.flow)
        return key
Esempio n. 3
0
 def keypress(self, xxx_todo_changeme, key):
     (maxcol,) = xxx_todo_changeme
     key = common.shortcuts(key)
     if key == "a":
         self.flow.accept_intercept(self.master)
         signals.flowlist_change.send(self)
     elif key == "d":
         self.flow.kill(self.master)
         self.state.delete_flow(self.flow)
         signals.flowlist_change.send(self)
     elif key == "D":
         f = self.master.duplicate_flow(self.flow)
         self.master.view_flow(f)
     elif key == "m":
         if self.state.flow_marked(self.flow):
             self.state.set_flow_marked(self.flow, False)
         else:
             self.state.set_flow_marked(self.flow, True)
         signals.flowlist_change.send(self)
     elif key == "r":
         r = self.master.replay_request(self.flow)
         if r:
             signals.status_message.send(message=r)
         signals.flowlist_change.send(self)
     elif key == "S":
         if not self.master.server_playback:
             signals.status_prompt_onekey.send(
                 prompt = "Server Replay",
                 keys = (
                     ("all flows", "a"),
                     ("this flow", "t"),
                     ("file", "f"),
                 ),
                 callback = self.server_replay_prompt,
             )
         else:
             signals.status_prompt_onekey.send(
                 prompt = "Stop current server replay?",
                 keys = (
                     ("yes", "y"),
                     ("no", "n"),
                 ),
                 callback = self.stop_server_playback_prompt,
             )
     elif key == "U":
         for f in self.state.flows:
             self.state.set_flow_marked(f, False)
         signals.flowlist_change.send(self)
     elif key == "V":
         if not self.flow.modified():
             signals.status_message.send(message="Flow not modified.")
             return
         self.state.revert(self.flow)
         signals.flowlist_change.send(self)
         signals.status_message.send(message="Reverted.")
     elif key == "w":
         signals.status_prompt_onekey.send(
             self,
             prompt = "Save",
             keys = (
                 ("all flows", "a"),
                 ("this flow", "t"),
                 ("marked flows", "m"),
             ),
             callback = self.save_flows_prompt,
         )
     elif key == "X":
         self.flow.kill(self.master)
     elif key == "enter":
         if self.flow.request:
             self.master.view_flow(self.flow)
     elif key == "|":
         signals.status_prompt_path.send(
             prompt = "Send flow to script",
             callback = self.master.run_script_once,
             args = (self.flow,)
         )
     elif key == "P":
         common.ask_copy_part("a", self.flow, self.master, self.state)
     elif key == "E":
         signals.status_prompt_onekey.send(
             self,
             prompt = "Export",
             keys = (
                 ("as curl command", "c"),
                 ("as python code", "p"),
                 ("as raw request", "r"),
                 ("as locust code", "l"),
                 ("as locust task", "t"),
             ),
             callback = common.export_prompt,
             args = (self.flow,)
         )
     elif key == "b":
         common.ask_save_body(None, self.master, self.state, self.flow)
     else:
         return key
Esempio n. 4
0
 def keypress(self, xxx_todo_changeme, key):
     (maxcol, ) = xxx_todo_changeme
     key = common.shortcuts(key)
     if key == "a":
         self.flow.accept_intercept(self.master)
         signals.flowlist_change.send(self)
     elif key == "d":
         self.flow.kill(self.master)
         self.state.delete_flow(self.flow)
         signals.flowlist_change.send(self)
     elif key == "D":
         f = self.master.duplicate_flow(self.flow)
         self.master.view_flow(f)
     elif key == "m":
         if self.state.flow_marked(self.flow):
             self.state.set_flow_marked(self.flow, False)
         else:
             self.state.set_flow_marked(self.flow, True)
         signals.flowlist_change.send(self)
     elif key == "M":
         if self.state.mark_filter:
             self.state.disable_marked_filter()
         else:
             self.state.enable_marked_filter()
         signals.flowlist_change.send(self)
     elif key == "r":
         r = self.master.replay_request(self.flow)
         if r:
             signals.status_message.send(message=r)
         signals.flowlist_change.send(self)
     elif key == "S":
         if not self.master.server_playback:
             signals.status_prompt_onekey.send(
                 prompt="Server Replay",
                 keys=(
                     ("all flows", "a"),
                     ("this flow", "t"),
                     ("file", "f"),
                 ),
                 callback=self.server_replay_prompt,
             )
         else:
             signals.status_prompt_onekey.send(
                 prompt="Stop current server replay?",
                 keys=(
                     ("yes", "y"),
                     ("no", "n"),
                 ),
                 callback=self.stop_server_playback_prompt,
             )
     elif key == "U":
         for f in self.state.flows:
             self.state.set_flow_marked(f, False)
         signals.flowlist_change.send(self)
     elif key == "V":
         if not self.flow.modified():
             signals.status_message.send(message="Flow not modified.")
             return
         self.state.revert(self.flow)
         signals.flowlist_change.send(self)
         signals.status_message.send(message="Reverted.")
     elif key == "w":
         signals.status_prompt_onekey.send(
             self,
             prompt="Save",
             keys=(
                 ("all flows", "a"),
                 ("this flow", "t"),
                 ("marked flows", "m"),
             ),
             callback=self.save_flows_prompt,
         )
     elif key == "X":
         self.flow.kill(self.master)
     elif key == "enter":
         if self.flow.request:
             self.master.view_flow(self.flow)
     elif key == "|":
         signals.status_prompt_path.send(
             prompt="Send flow to script",
             callback=self.master.run_script_once,
             args=(self.flow, ))
     elif key == "P":
         common.ask_copy_part("a", self.flow, self.master, self.state)
     elif key == "E":
         signals.status_prompt_onekey.send(self,
                                           prompt="Export",
                                           keys=(
                                               ("as curl command", "c"),
                                               ("as python code", "p"),
                                               ("as raw request", "r"),
                                               ("as locust code", "l"),
                                               ("as locust task", "t"),
                                           ),
                                           callback=common.export_prompt,
                                           args=(self.flow, ))
     elif key == "b":
         common.ask_save_body(None, self.master, self.state, self.flow)
     else:
         return key