xref: /aosp_15_r20/prebuilts/build-tools/common/py3-stdlib/encodings/quopri_codec.py (revision cda5da8d549138a6648c5ee6d7a49cf8f4a657be)
1*cda5da8dSAndroid Build Coastguard Worker"""Codec for quoted-printable encoding.
2*cda5da8dSAndroid Build Coastguard Worker
3*cda5da8dSAndroid Build Coastguard WorkerThis codec de/encodes from bytes to bytes.
4*cda5da8dSAndroid Build Coastguard Worker"""
5*cda5da8dSAndroid Build Coastguard Worker
6*cda5da8dSAndroid Build Coastguard Workerimport codecs
7*cda5da8dSAndroid Build Coastguard Workerimport quopri
8*cda5da8dSAndroid Build Coastguard Workerfrom io import BytesIO
9*cda5da8dSAndroid Build Coastguard Worker
10*cda5da8dSAndroid Build Coastguard Workerdef quopri_encode(input, errors='strict'):
11*cda5da8dSAndroid Build Coastguard Worker    assert errors == 'strict'
12*cda5da8dSAndroid Build Coastguard Worker    f = BytesIO(input)
13*cda5da8dSAndroid Build Coastguard Worker    g = BytesIO()
14*cda5da8dSAndroid Build Coastguard Worker    quopri.encode(f, g, quotetabs=True)
15*cda5da8dSAndroid Build Coastguard Worker    return (g.getvalue(), len(input))
16*cda5da8dSAndroid Build Coastguard Worker
17*cda5da8dSAndroid Build Coastguard Workerdef quopri_decode(input, errors='strict'):
18*cda5da8dSAndroid Build Coastguard Worker    assert errors == 'strict'
19*cda5da8dSAndroid Build Coastguard Worker    f = BytesIO(input)
20*cda5da8dSAndroid Build Coastguard Worker    g = BytesIO()
21*cda5da8dSAndroid Build Coastguard Worker    quopri.decode(f, g)
22*cda5da8dSAndroid Build Coastguard Worker    return (g.getvalue(), len(input))
23*cda5da8dSAndroid Build Coastguard Worker
24*cda5da8dSAndroid Build Coastguard Workerclass Codec(codecs.Codec):
25*cda5da8dSAndroid Build Coastguard Worker    def encode(self, input, errors='strict'):
26*cda5da8dSAndroid Build Coastguard Worker        return quopri_encode(input, errors)
27*cda5da8dSAndroid Build Coastguard Worker    def decode(self, input, errors='strict'):
28*cda5da8dSAndroid Build Coastguard Worker        return quopri_decode(input, errors)
29*cda5da8dSAndroid Build Coastguard Worker
30*cda5da8dSAndroid Build Coastguard Workerclass IncrementalEncoder(codecs.IncrementalEncoder):
31*cda5da8dSAndroid Build Coastguard Worker    def encode(self, input, final=False):
32*cda5da8dSAndroid Build Coastguard Worker        return quopri_encode(input, self.errors)[0]
33*cda5da8dSAndroid Build Coastguard Worker
34*cda5da8dSAndroid Build Coastguard Workerclass IncrementalDecoder(codecs.IncrementalDecoder):
35*cda5da8dSAndroid Build Coastguard Worker    def decode(self, input, final=False):
36*cda5da8dSAndroid Build Coastguard Worker        return quopri_decode(input, self.errors)[0]
37*cda5da8dSAndroid Build Coastguard Worker
38*cda5da8dSAndroid Build Coastguard Workerclass StreamWriter(Codec, codecs.StreamWriter):
39*cda5da8dSAndroid Build Coastguard Worker    charbuffertype = bytes
40*cda5da8dSAndroid Build Coastguard Worker
41*cda5da8dSAndroid Build Coastguard Workerclass StreamReader(Codec, codecs.StreamReader):
42*cda5da8dSAndroid Build Coastguard Worker    charbuffertype = bytes
43*cda5da8dSAndroid Build Coastguard Worker
44*cda5da8dSAndroid Build Coastguard Worker# encodings module API
45*cda5da8dSAndroid Build Coastguard Worker
46*cda5da8dSAndroid Build Coastguard Workerdef getregentry():
47*cda5da8dSAndroid Build Coastguard Worker    return codecs.CodecInfo(
48*cda5da8dSAndroid Build Coastguard Worker        name='quopri',
49*cda5da8dSAndroid Build Coastguard Worker        encode=quopri_encode,
50*cda5da8dSAndroid Build Coastguard Worker        decode=quopri_decode,
51*cda5da8dSAndroid Build Coastguard Worker        incrementalencoder=IncrementalEncoder,
52*cda5da8dSAndroid Build Coastguard Worker        incrementaldecoder=IncrementalDecoder,
53*cda5da8dSAndroid Build Coastguard Worker        streamwriter=StreamWriter,
54*cda5da8dSAndroid Build Coastguard Worker        streamreader=StreamReader,
55*cda5da8dSAndroid Build Coastguard Worker        _is_text_encoding=False,
56*cda5da8dSAndroid Build Coastguard Worker    )
57