aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2011-01-28 12:07:27 +1300
committerAldo Cortesi <aldo@nullcube.com>2011-01-28 12:08:25 +1300
commitdfefe3cdda9acd94032e100d0507f9c73ed8cd36 (patch)
treeab6b24ac8efff50571d3ac7f5fc14a515e3ebcf6
parent93ef691badcdaa1b7a5801eb40982c69f9b89534 (diff)
downloadmitmproxy-dfefe3cdda9acd94032e100d0507f9c73ed8cd36.tar.gz
mitmproxy-dfefe3cdda9acd94032e100d0507f9c73ed8cd36.tar.bz2
mitmproxy-dfefe3cdda9acd94032e100d0507f9c73ed8cd36.zip
Make pretty-printing more robust.
Also, since BeautifulSoup is so damn slow, print a statusbar message saying that we're calculating a pretty version of the response. Maybe I should add hangman or something, becuase on a 200k document this can take ages.
-rw-r--r--libmproxy/console.py13
-rw-r--r--libmproxy/utils.py5
-rw-r--r--test/test_utils.py5
3 files changed, 16 insertions, 7 deletions
diff --git a/libmproxy/console.py b/libmproxy/console.py
index e863816a..11f86744 100644
--- a/libmproxy/console.py
+++ b/libmproxy/console.py
@@ -244,14 +244,17 @@ class ConnectionView(WWrap):
)
txt.append("\n\n")
if conn.content:
- if utils.isBin(conn.content):
- self._view_binary(conn, txt)
- elif self.state.viewmode == VIEW_BINARY:
+ if self.state.viewmode == VIEW_BINARY:
self._view_binary(conn, txt)
elif self.state.viewmode == VIEW_PRETTY:
+ self.master.statusbar.update("Calculating pretty mode...")
self._view_pretty(conn, txt)
+ self.master.statusbar.update("")
else:
- self._view_normal(conn, txt)
+ if utils.isBin(conn.content):
+ self._view_binary(conn, txt)
+ else:
+ self._view_normal(conn, txt)
return urwid.ListBox([urwid.Text(txt)])
def view_request(self):
@@ -528,7 +531,6 @@ class StatusBar(WWrap):
self.ab = ActionBar()
self.ib = urwid.AttrWrap(urwid.Text(""), 'foot')
self.w = urwid.Pile([self.ib, self.ab])
- self.redraw()
def redraw(self):
status = urwid.Columns([
@@ -541,6 +543,7 @@ class StatusBar(WWrap):
align="right"),
])
self.ib.set_w(status)
+ self.master.drawscreen()
def update(self, text):
self.text = text
diff --git a/libmproxy/utils.py b/libmproxy/utils.py
index a02ac840..7b9d0e32 100644
--- a/libmproxy/utils.py
+++ b/libmproxy/utils.py
@@ -47,8 +47,9 @@ def prettybody(s):
Return a list of pretty-printed lines.
"""
s = BeautifulSoup.BeautifulStoneSoup(s)
- s = s.prettify()
- return s.split("\n")
+ s = s.prettify().strip()
+ parts = s.split("\n")
+ return [repr(i)[1:-1] for i in parts]
def hexdump(s):
diff --git a/test/test_utils.py b/test/test_utils.py
index 1c1e62e2..4880cc89 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -228,6 +228,11 @@ class uprettybody(libpry.AutoTree):
s = "<html><p></p></html>"
assert utils.prettybody(s)
+ s = "".join([chr(i) for i in range(256)])
+ print utils.prettybody(s)
+
+
+
tests = [
umake_bogus_cert(),