mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			56 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								"""Python 'hex_codec' Codec - 2-digit hex content transfer 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 binascii
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Codec APIs
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def hex_encode(input, errors='strict'):
							 | 
						||
| 
								 | 
							
								    assert errors == 'strict'
							 | 
						||
| 
								 | 
							
								    return (binascii.b2a_hex(input), len(input))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def hex_decode(input, errors='strict'):
							 | 
						||
| 
								 | 
							
								    assert errors == 'strict'
							 | 
						||
| 
								 | 
							
								    return (binascii.a2b_hex(input), len(input))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class Codec(codecs.Codec):
							 | 
						||
| 
								 | 
							
								    def encode(self, input, errors='strict'):
							 | 
						||
| 
								 | 
							
								        return hex_encode(input, errors)
							 | 
						||
| 
								 | 
							
								    def decode(self, input, errors='strict'):
							 | 
						||
| 
								 | 
							
								        return hex_decode(input, errors)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class IncrementalEncoder(codecs.IncrementalEncoder):
							 | 
						||
| 
								 | 
							
								    def encode(self, input, final=False):
							 | 
						||
| 
								 | 
							
								        assert self.errors == 'strict'
							 | 
						||
| 
								 | 
							
								        return binascii.b2a_hex(input)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class IncrementalDecoder(codecs.IncrementalDecoder):
							 | 
						||
| 
								 | 
							
								    def decode(self, input, final=False):
							 | 
						||
| 
								 | 
							
								        assert self.errors == 'strict'
							 | 
						||
| 
								 | 
							
								        return binascii.a2b_hex(input)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class StreamWriter(Codec, codecs.StreamWriter):
							 | 
						||
| 
								 | 
							
								    charbuffertype = bytes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class StreamReader(Codec, codecs.StreamReader):
							 | 
						||
| 
								 | 
							
								    charbuffertype = bytes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### encodings module API
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def getregentry():
							 | 
						||
| 
								 | 
							
								    return codecs.CodecInfo(
							 | 
						||
| 
								 | 
							
								        name='hex',
							 | 
						||
| 
								 | 
							
								        encode=hex_encode,
							 | 
						||
| 
								 | 
							
								        decode=hex_decode,
							 | 
						||
| 
								 | 
							
								        incrementalencoder=IncrementalEncoder,
							 | 
						||
| 
								 | 
							
								        incrementaldecoder=IncrementalDecoder,
							 | 
						||
| 
								 | 
							
								        streamwriter=StreamWriter,
							 | 
						||
| 
								 | 
							
								        streamreader=StreamReader,
							 | 
						||
| 
								 | 
							
								    )
							 |