diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py
index c968fb1ca..9bac5773c 100644
--- a/libmproxy/console/__init__.py
+++ b/libmproxy/console/__init__.py
@@ -255,7 +255,7 @@ class ConsoleState(flow.State):
flow.State.__init__(self)
self.focus = None
self.follow_focus = None
- self.default_body_view = contentview.ViewAuto
+ self.default_body_view = contentview.get("Auto")
self.view_flow_mode = common.VIEW_FLOW_REQUEST
self.last_script = ""
self.last_saveload = ""
diff --git a/libmproxy/console/contentview.py b/libmproxy/console/contentview.py
index ddc82540e..763baab14 100644
--- a/libmproxy/console/contentview.py
+++ b/libmproxy/console/contentview.py
@@ -42,6 +42,18 @@ class ViewAuto:
name = "Auto"
prompt = ("auto", "a")
content_types = []
+ def __call__(self, hdrs, content, limit):
+ ctype = hdrs.get("content-type")
+ if ctype:
+ ctype = ctype[0]
+ ct = utils.parse_content_type(ctype) if ctype else None
+ if ct:
+ ct = "%s/%s"%(ct[0], ct[1])
+ if ct in content_types_map:
+ return content_types_map[ct][0](hdrs, content, limit)
+ elif utils.isXML(content):
+ return get("XML")(hdrs, content, limit)
+ return get("Raw")(hdrs, content, limit)
class ViewRaw:
@@ -324,26 +336,6 @@ def get(name):
return i
-def get_view_func(viewmode, hdrs, content):
- """
- Returns a function object.
- """
- if viewmode.name == "Auto":
- ctype = hdrs.get("content-type")
- if ctype:
- ctype = ctype[0]
- ct = utils.parse_content_type(ctype) if ctype else None
- if ct:
- ct = "%s/%s"%(ct[0], ct[1])
- if ct in content_types_map:
- return content_types_map[ct][0]
- elif utils.isXML(content):
- return ViewXML
- return ViewRaw
- else:
- return viewmode
-
-
def get_content_view(viewmode, hdrItems, content, limit):
"""
Returns a (msg, body) tuple.
@@ -358,13 +350,12 @@ def get_content_view(viewmode, hdrItems, content, limit):
if decoded:
content = decoded
msg.append("[decoded %s]"%enc[0])
- func = get_view_func(viewmode, hdrs, content)
try:
- ret = func(hdrs, content, limit)
+ ret = viewmode(hdrs, content, limit)
# Third-party viewers can fail in unexpected ways...
except Exception, e:
- #s = traceback.format_exc()
- #return "", _view_text(s, len(s), len(s))
+ s = traceback.format_exc()
+ return "", _view_text(s, len(s), len(s))
ret = None
if not ret:
ret = get("Raw")(hdrs, content, limit)
@@ -372,5 +363,3 @@ def get_content_view(viewmode, hdrItems, content, limit):
else:
msg.append(ret[0])
return " ".join(msg), ret[1]
-
-
diff --git a/test/test_console_contentview.py b/test/test_console_contentview.py
index 04f72a17f..d2ab72dc3 100644
--- a/test/test_console_contentview.py
+++ b/test/test_console_contentview.py
@@ -11,61 +11,42 @@ class TestContentView:
cv.trailer(cv.VIEW_CUTOFF + 10, txt, cv.VIEW_CUTOFF)
assert txt
- def test_get_view_func(self):
- f = cv.get_view_func(
- cv.get("Hex"),
+ def test_view_auto(self):
+ v = cv.ViewAuto()
+ f = v(
flow.ODictCaseless(),
- "foo"
+ "foo",
+ 1000
)
- assert f.name == "Hex"
+ assert f[0] == "Raw"
- f = cv.get_view_func(
- cv.get("Auto"),
- flow.ODictCaseless(),
- "foo"
- )
- assert f.name == "Raw"
-
- f = cv.get_view_func(
- cv.get("Auto"),
+ f = v(
flow.ODictCaseless(
[["content-type", "text/html"]],
),
- "foo"
+ "",
+ 1000
)
- assert f.name == "HTML"
+ assert f[0] == "HTML"
- f = cv.get_view_func(
- cv.get("Auto"),
+ f = v(
flow.ODictCaseless(
[["content-type", "text/flibble"]],
),
- "foo"
+ "foo",
+ 1000
)
- assert f.name == "Raw"
+ assert f[0] == "Raw"
- f = cv.get_view_func(
- cv.get("Auto"),
+ f = v(
flow.ODictCaseless(
[["content-type", "text/flibble"]],
),
- ""
+ "",
+ 1000
)
- assert f.name == "XML"
+ assert f[0].startswith("XML")
- try:
- import pyamf
-
- f = cv.get_view_func(
- cv.get("Auto"),
- flow.ODictCaseless(
- [["content-type", "application/x-amf"]],
- ),
- ""
- )
- assert f.name == "AMF"
- except ImportError:
- pass
def test_view_urlencoded(self):
d = utils.urlencode([("one", "two"), ("three", "four")])
@@ -223,3 +204,6 @@ Larry
assert "decoded gzip" in r[0]
assert "Raw" in r[0]
+
+def test_get_by_shortcut():
+ assert cv.get_by_shortcut("h")