aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2018-01-01 18:12:07 +0100
committerMaximilian Hils <git@maximilianhils.com>2018-01-02 16:42:59 +0100
commit11429bf229b5bec3dab1b83968c3403e8812b3cc (patch)
tree60c346babdc574c36b35f313cb2651cd80866738
parenteb53cc7ed26f451855755164f061ea9f49014f8d (diff)
downloadmitmproxy-11429bf229b5bec3dab1b83968c3403e8812b3cc.tar.gz
mitmproxy-11429bf229b5bec3dab1b83968c3403e8812b3cc.tar.bz2
mitmproxy-11429bf229b5bec3dab1b83968c3403e8812b3cc.zip
dataviewer: disable (broken) edit
The edit functionality was previously broken due to encoding issues, so we just replace the column type with a generic read-only variant.
-rw-r--r--mitmproxy/tools/console/grideditor/col.py67
-rw-r--r--mitmproxy/tools/console/grideditor/col_text.py2
-rw-r--r--mitmproxy/tools/console/grideditor/col_viewany.py33
-rw-r--r--mitmproxy/tools/console/grideditor/editors.py25
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):