aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/tools/console/consoleaddons.py15
-rw-r--r--mitmproxy/tools/console/defaultkeys.py6
2 files changed, 21 insertions, 0 deletions
diff --git a/mitmproxy/tools/console/consoleaddons.py b/mitmproxy/tools/console/consoleaddons.py
index 95100fbf..453e9e1c 100644
--- a/mitmproxy/tools/console/consoleaddons.py
+++ b/mitmproxy/tools/console/consoleaddons.py
@@ -1,3 +1,4 @@
+import csv
import typing
from mitmproxy import ctx
@@ -417,6 +418,20 @@ class ConsoleAddon:
"""
self._grideditor().cmd_read_file_escaped(path)
+ @command.command("console.grideditor.save")
+ def grideditor_save(self, path: command.Path) -> None:
+ """
+ Save data to file as a CSV.
+ """
+ rows = self._grideditor().value
+ with open(path, "w", newline='', encoding="utf8") as fp:
+ writer = csv.writer(fp)
+ for row in rows:
+ writer.writerow(
+ [strutils.always_str(x) or "" for x in row] # type: ignore
+ )
+ ctx.log.alert("Saved %s rows as CSV." % (len(rows)))
+
@command.command("console.grideditor.editor")
def grideditor_editor(self) -> None:
"""
diff --git a/mitmproxy/tools/console/defaultkeys.py b/mitmproxy/tools/console/defaultkeys.py
index 69c6e49f..0fdec10c 100644
--- a/mitmproxy/tools/console/defaultkeys.py
+++ b/mitmproxy/tools/console/defaultkeys.py
@@ -156,6 +156,12 @@ def map(km):
"Load a Python-style escaped string into the current cell from file"
)
km.add("e", "console.grideditor.editor", ["grideditor"], "Edit in external editor")
+ km.add(
+ "w",
+ "console.command console.grideditor.save ",
+ ["grideditor"],
+ "Save data to file as CSV"
+ )
km.add("z", "eventstore.clear", ["eventlog"], "Clear")