Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1744)

Unified Diff: Tools/Scripts/webkitpy/thirdparty/mechanize/_gzip.py

Issue 18418010: Check in the thirdparty libs needed for webkitpy. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Tools/Scripts/webkitpy/thirdparty/mechanize/_gzip.py
diff --git a/Tools/Scripts/webkitpy/thirdparty/mechanize/_gzip.py b/Tools/Scripts/webkitpy/thirdparty/mechanize/_gzip.py
new file mode 100644
index 0000000000000000000000000000000000000000..7e9d6a0ce7de0fe11f5333e6fedefee2c9c1e95f
--- /dev/null
+++ b/Tools/Scripts/webkitpy/thirdparty/mechanize/_gzip.py
@@ -0,0 +1,105 @@
+from cStringIO import StringIO
+
+import _response
+import _urllib2_fork
+
+
+# GzipConsumer was taken from Fredrik Lundh's effbot.org-0.1-20041009 library
+class GzipConsumer:
+
+ def __init__(self, consumer):
+ self.__consumer = consumer
+ self.__decoder = None
+ self.__data = ""
+
+ def __getattr__(self, key):
+ return getattr(self.__consumer, key)
+
+ def feed(self, data):
+ if self.__decoder is None:
+ # check if we have a full gzip header
+ data = self.__data + data
+ try:
+ i = 10
+ flag = ord(data[3])
+ if flag & 4: # extra
+ x = ord(data[i]) + 256*ord(data[i+1])
+ i = i + 2 + x
+ if flag & 8: # filename
+ while ord(data[i]):
+ i = i + 1
+ i = i + 1
+ if flag & 16: # comment
+ while ord(data[i]):
+ i = i + 1
+ i = i + 1
+ if flag & 2: # crc
+ i = i + 2
+ if len(data) < i:
+ raise IndexError("not enough data")
+ if data[:3] != "\x1f\x8b\x08":
+ raise IOError("invalid gzip data")
+ data = data[i:]
+ except IndexError:
+ self.__data = data
+ return # need more data
+ import zlib
+ self.__data = ""
+ self.__decoder = zlib.decompressobj(-zlib.MAX_WBITS)
+ data = self.__decoder.decompress(data)
+ if data:
+ self.__consumer.feed(data)
+
+ def close(self):
+ if self.__decoder:
+ data = self.__decoder.flush()
+ if data:
+ self.__consumer.feed(data)
+ self.__consumer.close()
+
+
+# --------------------------------------------------------------------
+
+# the rest of this module is John Lee's stupid code, not
+# Fredrik's nice code :-)
+
+class stupid_gzip_consumer:
+ def __init__(self): self.data = []
+ def feed(self, data): self.data.append(data)
+
+class stupid_gzip_wrapper(_response.closeable_response):
+ def __init__(self, response):
+ self._response = response
+
+ c = stupid_gzip_consumer()
+ gzc = GzipConsumer(c)
+ gzc.feed(response.read())
+ self.__data = StringIO("".join(c.data))
+
+ def read(self, size=-1):
+ return self.__data.read(size)
+ def readline(self, size=-1):
+ return self.__data.readline(size)
+ def readlines(self, sizehint=-1):
+ return self.__data.readlines(sizehint)
+
+ def __getattr__(self, name):
+ # delegate unknown methods/attributes
+ return getattr(self._response, name)
+
+class HTTPGzipProcessor(_urllib2_fork.BaseHandler):
+ handler_order = 200 # response processing before HTTPEquivProcessor
+
+ def http_request(self, request):
+ request.add_header("Accept-Encoding", "gzip")
+ return request
+
+ def http_response(self, request, response):
+ # post-process response
+ enc_hdrs = response.info().getheaders("Content-encoding")
+ for enc_hdr in enc_hdrs:
+ if ("gzip" in enc_hdr) or ("compress" in enc_hdr):
+ return stupid_gzip_wrapper(response)
+ return response
+
+ https_response = http_response
« no previous file with comments | « Tools/Scripts/webkitpy/thirdparty/mechanize/_form.py ('k') | Tools/Scripts/webkitpy/thirdparty/mechanize/_headersutil.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698