Merge remote-tracking branch 'alts/encoding'

This commit is contained in:
Aldo Cortesi 2011-07-28 11:19:07 +12:00
commit c89c4361c3
3 changed files with 48 additions and 7 deletions

View File

@ -543,8 +543,7 @@ class ConnectionView(WWrap):
conn = self.flow.response conn = self.flow.response
e = conn.headers["content-encoding"] or ["identity"] e = conn.headers["content-encoding"] or ["identity"]
if e[0] != "identity": if e[0] != "identity":
conn.content = encoding.decode(e[0], conn.content) conn.decode()
conn.headers["content-encoding"] = ["identity"]
else: else:
self.master.prompt_onekey( self.master.prompt_onekey(
"Select encoding: ", "Select encoding: ",
@ -563,11 +562,7 @@ class ConnectionView(WWrap):
"z": "gzip", "z": "gzip",
"d": "deflate", "d": "deflate",
} }
conn.content = encoding.encode( conn.encode(encoding_map[key])
encoding_map[key],
conn.content
)
conn.headers["content-encoding"] = [encoding_map[key]]
self.master.refresh_connection(self.flow) self.master.refresh_connection(self.flow)

View File

@ -428,6 +428,27 @@ class Response(controller.Msg):
c += self.headers.replace(pattern, repl, *args, **kwargs) c += self.headers.replace(pattern, repl, *args, **kwargs)
return c return c
def decode(self):
"""
Alters Response object, decoding its content based on the current
Content-Encoding header and changing Content-Encoding header to
'identity'.
"""
self.content = encoding.decode(
(self.headers["content-encoding"] or ["identity"])[0],
self.content
)
self.headers["content-encoding"] = ["identity"]
def encode(self, e):
"""
Alters Response object, encoding its content with the specified
coding. This method should only be called on Responses with
Content-Encoding headers of 'identity'.
"""
self.content = encoding.encode(e, self.content)
self.headers["content-encoding"] = [e]
class ClientDisconnect(controller.Msg): class ClientDisconnect(controller.Msg):
def __init__(self, client_conn): def __init__(self, client_conn):

View File

@ -203,6 +203,31 @@ class uResponse(libpry.AutoTree):
assert not "foo" in r.content assert not "foo" in r.content
assert r.headers["boo"] == ["boo"] assert r.headers["boo"] == ["boo"]
def test_decodeencode(self):
r = tutils.tresp()
r.headers["content-encoding"] = ["identity"]
r.content = "falafel"
r.decode()
assert r.headers["content-encoding"] == ["identity"]
assert r.content == "falafel"
r = tutils.tresp()
r.headers["content-encoding"] = ["identity"]
r.content = "falafel"
r.encode("identity")
assert r.headers["content-encoding"] == ["identity"]
assert r.content == "falafel"
r = tutils.tresp()
r.headers["content-encoding"] = ["identity"]
r.content = "falafel"
r.encode("gzip")
assert r.headers["content-encoding"] == ["gzip"]
assert r.content != "falafel"
r.decode()
assert r.headers["content-encoding"] == ["identity"]
assert r.content == "falafel"
class uError(libpry.AutoTree): class uError(libpry.AutoTree):
def test_getset_state(self): def test_getset_state(self):