Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | """Codec for quoted-printable encoding. |
2 | ||
3 | Like base64 and rot13, this returns Python strings, not Unicode. | |
4 | """ | |
5 | ||
6 | import codecs, quopri | |
7 | try: | |
8 | from cStringIO import StringIO | |
9 | except ImportError: | |
10 | from StringIO import StringIO | |
11 | ||
12 | def quopri_encode(input, errors='strict'): | |
13 | """Encode the input, returning a tuple (output object, length consumed). | |
14 | ||
15 | errors defines the error handling to apply. It defaults to | |
16 | 'strict' handling which is the only currently supported | |
17 | error handling for this codec. | |
18 | ||
19 | """ | |
20 | assert errors == 'strict' | |
21 | f = StringIO(input) | |
22 | g = StringIO() | |
23 | quopri.encode(f, g, 1) | |
24 | output = g.getvalue() | |
25 | return (output, len(input)) | |
26 | ||
27 | def quopri_decode(input, errors='strict'): | |
28 | """Decode the input, returning a tuple (output object, length consumed). | |
29 | ||
30 | errors defines the error handling to apply. It defaults to | |
31 | 'strict' handling which is the only currently supported | |
32 | error handling for this codec. | |
33 | ||
34 | """ | |
35 | assert errors == 'strict' | |
36 | f = StringIO(input) | |
37 | g = StringIO() | |
38 | quopri.decode(f, g) | |
39 | output = g.getvalue() | |
40 | return (output, len(input)) | |
41 | ||
42 | class Codec(codecs.Codec): | |
43 | ||
44 | def encode(self, input,errors='strict'): | |
45 | return quopri_encode(input,errors) | |
46 | def decode(self, input,errors='strict'): | |
47 | return quopri_decode(input,errors) | |
48 | ||
49 | class StreamWriter(Codec, codecs.StreamWriter): | |
50 | pass | |
51 | ||
52 | class StreamReader(Codec,codecs.StreamReader): | |
53 | pass | |
54 | ||
55 | # encodings module API | |
56 | ||
57 | def getregentry(): | |
58 | return (quopri_encode, quopri_decode, StreamReader, StreamWriter) |