• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""Python 'base64_codec' Codec - base64 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 base64
10
11### Codec APIs
12
13def base64_encode(input, errors='strict'):
14    assert errors == 'strict'
15    return (base64.encodebytes(input), len(input))
16
17def base64_decode(input, errors='strict'):
18    assert errors == 'strict'
19    return (base64.decodebytes(input), len(input))
20
21class Codec(codecs.Codec):
22    def encode(self, input, errors='strict'):
23        return base64_encode(input, errors)
24    def decode(self, input, errors='strict'):
25        return base64_decode(input, errors)
26
27class IncrementalEncoder(codecs.IncrementalEncoder):
28    def encode(self, input, final=False):
29        assert self.errors == 'strict'
30        return base64.encodebytes(input)
31
32class IncrementalDecoder(codecs.IncrementalDecoder):
33    def decode(self, input, final=False):
34        assert self.errors == 'strict'
35        return base64.decodebytes(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='base64',
48        encode=base64_encode,
49        decode=base64_decode,
50        incrementalencoder=IncrementalEncoder,
51        incrementaldecoder=IncrementalDecoder,
52        streamwriter=StreamWriter,
53        streamreader=StreamReader,
54        _is_text_encoding=False,
55    )
56