1"""Python 'hex_codec' Codec - 2-digit hex content transfer encoding. 2 3This codec de/encodes from bytes to bytes. 4 5Written by Marc-Andre Lemburg (mal@lemburg.com). 6""" 7 8import codecs 9import binascii 10 11### Codec APIs 12 13def hex_encode(input, errors='strict'): 14 assert errors == 'strict' 15 return (binascii.b2a_hex(input), len(input)) 16 17def hex_decode(input, errors='strict'): 18 assert errors == 'strict' 19 return (binascii.a2b_hex(input), len(input)) 20 21class Codec(codecs.Codec): 22 def encode(self, input, errors='strict'): 23 return hex_encode(input, errors) 24 def decode(self, input, errors='strict'): 25 return hex_decode(input, errors) 26 27class IncrementalEncoder(codecs.IncrementalEncoder): 28 def encode(self, input, final=False): 29 assert self.errors == 'strict' 30 return binascii.b2a_hex(input) 31 32class IncrementalDecoder(codecs.IncrementalDecoder): 33 def decode(self, input, final=False): 34 assert self.errors == 'strict' 35 return binascii.a2b_hex(input) 36 37class StreamWriter(Codec, codecs.StreamWriter): 38 charbuffertype = bytes 39 40class StreamReader(Codec, codecs.StreamReader): 41 charbuffertype = bytes 42 43### encodings module API 44 45def getregentry(): 46 return codecs.CodecInfo( 47 name='hex', 48 encode=hex_encode, 49 decode=hex_decode, 50 incrementalencoder=IncrementalEncoder, 51 incrementaldecoder=IncrementalDecoder, 52 streamwriter=StreamWriter, 53 streamreader=StreamReader, 54 _is_text_encoding=False, 55 ) 56