diff options
| author | Maximilian Hils <git@maximilianhils.com> | 2018-01-04 12:12:03 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-01-04 12:12:03 +0100 | 
| commit | c6cd0872ea743f43df1a321547d4b421b98a877f (patch) | |
| tree | 9edb886b0ead127008f686334f1cf6be84b88ee8 | |
| parent | 3858048c6df3cb46f384c97367feb850fc57f3bd (diff) | |
| parent | 11429bf229b5bec3dab1b83968c3403e8812b3cc (diff) | |
| download | mitmproxy-c6cd0872ea743f43df1a321547d4b421b98a877f.tar.gz mitmproxy-c6cd0872ea743f43df1a321547d4b421b98a877f.tar.bz2 mitmproxy-c6cd0872ea743f43df1a321547d4b421b98a877f.zip  | |
Merge pull request #2742 from mhils/dataviewer-fix-edit
Dataviewer: disable (broken) edit
| -rw-r--r-- | mitmproxy/tools/console/grideditor/col.py | 67 | ||||
| -rw-r--r-- | mitmproxy/tools/console/grideditor/col_text.py | 2 | ||||
| -rw-r--r-- | mitmproxy/tools/console/grideditor/col_viewany.py | 33 | ||||
| -rw-r--r-- | mitmproxy/tools/console/grideditor/editors.py | 25 | 
4 files changed, 52 insertions, 75 deletions
diff --git a/mitmproxy/tools/console/grideditor/col.py b/mitmproxy/tools/console/grideditor/col.py deleted file mode 100644 index 3331f3e7..00000000 --- a/mitmproxy/tools/console/grideditor/col.py +++ /dev/null @@ -1,67 +0,0 @@ -import typing - -import urwid - -from mitmproxy.tools.console import signals -from mitmproxy.tools.console.grideditor import base -from mitmproxy.utils import strutils - -strbytes = typing.Union[str, bytes] - - -class Column(base.Column): -    def Display(self, data): -        return Display(data) - -    def Edit(self, data): -        return Edit(data) - -    def blank(self): -        return "" - -    def keypress(self, key, editor): -        if key in ["m_select"]: -            editor.walker.start_edit() -        else: -            return key - - -class Display(base.Cell): -    def __init__(self, data: strbytes) -> None: -        self.data = data -        if isinstance(data, bytes): -            escaped = strutils.bytes_to_escaped_str(data) -        else: -            escaped = data.encode() -        w = urwid.Text(escaped, wrap="any") -        super().__init__(w) - -    def get_data(self) -> strbytes: -        return self.data - - -class Edit(base.Cell): -    def __init__(self, data: strbytes) -> None: -        if isinstance(data, bytes): -            escaped = strutils.bytes_to_escaped_str(data) -        else: -            escaped = data.encode() -        self.type = type(data)  # type: typing.Type -        w = urwid.Edit(edit_text=escaped, wrap="any", multiline=True) -        w = urwid.AttrWrap(w, "editfield") -        super().__init__(w) - -    def get_data(self) -> strbytes: -        txt = self._w.get_text()[0].strip() -        try: -            if self.type == bytes: -                return strutils.escaped_str_to_bytes(txt) -            else: -                return txt.decode() -        except ValueError: -            signals.status_message.send( -                self, -                message="Invalid Python-style string encoding.", -                expire=1000 -            ) -            raise diff --git a/mitmproxy/tools/console/grideditor/col_text.py b/mitmproxy/tools/console/grideditor/col_text.py index f0ac06f8..32518670 100644 --- a/mitmproxy/tools/console/grideditor/col_text.py +++ b/mitmproxy/tools/console/grideditor/col_text.py @@ -21,7 +21,7 @@ class Column(col_bytes.Column):          return TEdit(data, self.encoding_args)      def blank(self): -        return u"" +        return ""  # This is the same for both edit and display. diff --git a/mitmproxy/tools/console/grideditor/col_viewany.py b/mitmproxy/tools/console/grideditor/col_viewany.py new file mode 100644 index 00000000..f5d35eee --- /dev/null +++ b/mitmproxy/tools/console/grideditor/col_viewany.py @@ -0,0 +1,33 @@ +""" +A display-only column that displays any data type. +""" + +import typing + +import urwid +from mitmproxy.tools.console.grideditor import base +from mitmproxy.utils import strutils + + +class Column(base.Column): +    def Display(self, data): +        return Display(data) + +    Edit = Display + +    def blank(self): +        return "" + + +class Display(base.Cell): +    def __init__(self, data: typing.Any) -> None: +        self.data = data +        if isinstance(data, bytes): +            data = strutils.bytes_to_escaped_str(data) +        if not isinstance(data, str): +            data = repr(data) +        w = urwid.Text(data, wrap="any") +        super().__init__(w) + +    def get_data(self) -> typing.Any: +        return self.data diff --git a/mitmproxy/tools/console/grideditor/editors.py b/mitmproxy/tools/console/grideditor/editors.py index b5d16737..fbe48a1a 100644 --- a/mitmproxy/tools/console/grideditor/editors.py +++ b/mitmproxy/tools/console/grideditor/editors.py @@ -1,13 +1,14 @@ +import typing  from mitmproxy import exceptions +from mitmproxy.net.http import Headers  from mitmproxy.tools.console import layoutwidget +from mitmproxy.tools.console import signals  from mitmproxy.tools.console.grideditor import base -from mitmproxy.tools.console.grideditor import col -from mitmproxy.tools.console.grideditor import col_text  from mitmproxy.tools.console.grideditor import col_bytes  from mitmproxy.tools.console.grideditor import col_subgrid -from mitmproxy.tools.console import signals -from mitmproxy.net.http import Headers +from mitmproxy.tools.console.grideditor import col_text +from mitmproxy.tools.console.grideditor import col_viewany  class QueryEditor(base.FocusEditor): @@ -67,7 +68,6 @@ class RequestFormEditor(base.FocusEditor):  class PathEditor(base.FocusEditor):      # TODO: Next row on enter? -      title = "Edit Path Components"      columns = [          col_text.Column("Component"), @@ -175,11 +175,22 @@ class OptionsEditor(base.GridEditor, layoutwidget.LayoutWidget):  class DataViewer(base.GridEditor, layoutwidget.LayoutWidget):      title = None  # type: str -    def __init__(self, master, vals): +    def __init__( +            self, +            master, +            vals: typing.Union[ +                typing.List[typing.List[typing.Any]], +                typing.List[typing.Any], +                str, +            ]) -> None:          if vals: +            # Whatever vals is, make it a list of rows containing lists of column values. +            if isinstance(vals, str): +                vals = [vals]              if not isinstance(vals[0], list):                  vals = [[i] for i in vals] -            self.columns = [col.Column("")] * len(vals[0]) + +            self.columns = [col_viewany.Column("")] * len(vals[0])          super().__init__(master, vals, self.callback)      def callback(self, vals):  | 
