Move from gzip to zlib to decompress data
Faster on incomplete files
This commit is contained in:
		@@ -3,7 +3,7 @@ import sys
 | 
				
			|||||||
import ssl
 | 
					import ssl
 | 
				
			||||||
import socket
 | 
					import socket
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from gzip import GzipFile
 | 
					import zlib
 | 
				
			||||||
from io import BytesIO, StringIO
 | 
					from io import BytesIO, StringIO
 | 
				
			||||||
import re
 | 
					import re
 | 
				
			||||||
import chardet
 | 
					import chardet
 | 
				
			||||||
@@ -100,22 +100,9 @@ class SizeLimitHandler(BaseHandler):
 | 
				
			|||||||
    https_response = http_response
 | 
					    https_response = http_response
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def UnGzip(cprss, CHUNKSIZE=64*1024): # the bigger the CHUNKSIZE, the faster
 | 
					def UnGzip(data):
 | 
				
			||||||
    " Supports truncated files "
 | 
					    " Supports truncated files "
 | 
				
			||||||
    gz = GzipFile(fileobj=cprss, mode='rb')
 | 
					    return zlib.decompressobj(zlib.MAX_WBITS | 32).decompress(data)
 | 
				
			||||||
 | 
					 | 
				
			||||||
    data = b''
 | 
					 | 
				
			||||||
    chunk = gz.read(CHUNKSIZE)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    try:
 | 
					 | 
				
			||||||
        while chunk:
 | 
					 | 
				
			||||||
            data += chunk
 | 
					 | 
				
			||||||
            chunk = gz.read(CHUNKSIZE)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    except (IOError, EOFError):
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return data
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GZIPHandler(BaseHandler):
 | 
					class GZIPHandler(BaseHandler):
 | 
				
			||||||
@@ -128,7 +115,7 @@ class GZIPHandler(BaseHandler):
 | 
				
			|||||||
            if resp.headers.get('Content-Encoding') == 'gzip':
 | 
					            if resp.headers.get('Content-Encoding') == 'gzip':
 | 
				
			||||||
                data = resp.read()
 | 
					                data = resp.read()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                data = UnGzip(BytesIO(data))
 | 
					                data = UnGzip(data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                resp.headers['Content-Encoding'] = 'identity'
 | 
					                resp.headers['Content-Encoding'] = 'identity'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user