mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			78 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			78 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								"""Python 'zlib_codec' Codec - zlib compression encoding.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This codec de/encodes from bytes to bytes and is therefore usable with
							 | 
						||
| 
								 | 
							
								bytes.transform() and bytes.untransform().
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Written by Marc-Andre Lemburg (mal@lemburg.com).
							 | 
						||
| 
								 | 
							
								"""
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import codecs
							 | 
						||
| 
								 | 
							
								import zlib # this codec needs the optional zlib module !
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Codec APIs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def zlib_encode(input, errors='strict'):
							 | 
						||
| 
								 | 
							
								    assert errors == 'strict'
							 | 
						||
| 
								 | 
							
								    return (zlib.compress(input), len(input))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def zlib_decode(input, errors='strict'):
							 | 
						||
| 
								 | 
							
								    assert errors == 'strict'
							 | 
						||
| 
								 | 
							
								    return (zlib.decompress(input), len(input))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Codec(codecs.Codec):
							 | 
						||
| 
								 | 
							
								    def encode(self, input, errors='strict'):
							 | 
						||
| 
								 | 
							
								        return zlib_encode(input, errors)
							 | 
						||
| 
								 | 
							
								    def decode(self, input, errors='strict'):
							 | 
						||
| 
								 | 
							
								        return zlib_decode(input, errors)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class IncrementalEncoder(codecs.IncrementalEncoder):
							 | 
						||
| 
								 | 
							
								    def __init__(self, errors='strict'):
							 | 
						||
| 
								 | 
							
								        assert errors == 'strict'
							 | 
						||
| 
								 | 
							
								        self.errors = errors
							 | 
						||
| 
								 | 
							
								        self.compressobj = zlib.compressobj()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def encode(self, input, final=False):
							 | 
						||
| 
								 | 
							
								        if final:
							 | 
						||
| 
								 | 
							
								            c = self.compressobj.compress(input)
							 | 
						||
| 
								 | 
							
								            return c + self.compressobj.flush()
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            return self.compressobj.compress(input)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def reset(self):
							 | 
						||
| 
								 | 
							
								        self.compressobj = zlib.compressobj()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class IncrementalDecoder(codecs.IncrementalDecoder):
							 | 
						||
| 
								 | 
							
								    def __init__(self, errors='strict'):
							 | 
						||
| 
								 | 
							
								        assert errors == 'strict'
							 | 
						||
| 
								 | 
							
								        self.errors = errors
							 | 
						||
| 
								 | 
							
								        self.decompressobj = zlib.decompressobj()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def decode(self, input, final=False):
							 | 
						||
| 
								 | 
							
								        if final:
							 | 
						||
| 
								 | 
							
								            c = self.decompressobj.decompress(input)
							 | 
						||
| 
								 | 
							
								            return c + self.decompressobj.flush()
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            return self.decompressobj.decompress(input)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    def reset(self):
							 | 
						||
| 
								 | 
							
								        self.decompressobj = zlib.decompressobj()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class StreamWriter(Codec, codecs.StreamWriter):
							 | 
						||
| 
								 | 
							
								    charbuffertype = bytes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class StreamReader(Codec, codecs.StreamReader):
							 | 
						||
| 
								 | 
							
								    charbuffertype = bytes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### encodings module API
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def getregentry():
							 | 
						||
| 
								 | 
							
								    return codecs.CodecInfo(
							 | 
						||
| 
								 | 
							
								        name='zlib',
							 | 
						||
| 
								 | 
							
								        encode=zlib_encode,
							 | 
						||
| 
								 | 
							
								        decode=zlib_decode,
							 | 
						||
| 
								 | 
							
								        incrementalencoder=IncrementalEncoder,
							 | 
						||
| 
								 | 
							
								        incrementaldecoder=IncrementalDecoder,
							 | 
						||
| 
								 | 
							
								        streamreader=StreamReader,
							 | 
						||
| 
								 | 
							
								        streamwriter=StreamWriter,
							 | 
						||
| 
								 | 
							
								    )
							 |