- Notifications
You must be signed in to change notification settings - Fork 31.7k
/
Copy pathhex_codec.py
55 lines (42 loc) · 1.47 KB
/
hex_codec.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
"""Python 'hex_codec' Codec - 2-digit hex content transfer encoding.
This codec de/encodes from bytes to bytes.
Written by Marc-Andre Lemburg (mal@lemburg.com).
"""
importcodecs
importbinascii
### Codec APIs
defhex_encode(input, errors='strict'):
asserterrors=='strict'
return (binascii.b2a_hex(input), len(input))
defhex_decode(input, errors='strict'):
asserterrors=='strict'
return (binascii.a2b_hex(input), len(input))
classCodec(codecs.Codec):
defencode(self, input, errors='strict'):
returnhex_encode(input, errors)
defdecode(self, input, errors='strict'):
returnhex_decode(input, errors)
classIncrementalEncoder(codecs.IncrementalEncoder):
defencode(self, input, final=False):
assertself.errors=='strict'
returnbinascii.b2a_hex(input)
classIncrementalDecoder(codecs.IncrementalDecoder):
defdecode(self, input, final=False):
assertself.errors=='strict'
returnbinascii.a2b_hex(input)
classStreamWriter(Codec, codecs.StreamWriter):
charbuffertype=bytes
classStreamReader(Codec, codecs.StreamReader):
charbuffertype=bytes
### encodings module API
defgetregentry():
returncodecs.CodecInfo(
name='hex',
encode=hex_encode,
decode=hex_decode,
incrementalencoder=IncrementalEncoder,
incrementaldecoder=IncrementalDecoder,
streamwriter=StreamWriter,
streamreader=StreamReader,
_is_text_encoding=False,
)