Home | History | Annotate | Download | only in encodings
      1 """Python 'base64_codec' Codec - base64 content transfer encoding.
      2 
      3 This codec de/encodes from bytes to bytes.
      4 
      5 Written by Marc-Andre Lemburg (mal (at] lemburg.com).
      6 """
      7 
      8 import codecs
      9 import base64
     10 
     11 ### Codec APIs
     12 
     13 def base64_encode(input, errors='strict'):
     14     assert errors == 'strict'
     15     return (base64.encodebytes(input), len(input))
     16 
     17 def base64_decode(input, errors='strict'):
     18     assert errors == 'strict'
     19     return (base64.decodebytes(input), len(input))
     20 
     21 class 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 
     27 class IncrementalEncoder(codecs.IncrementalEncoder):
     28     def encode(self, input, final=False):
     29         assert self.errors == 'strict'
     30         return base64.encodebytes(input)
     31 
     32 class IncrementalDecoder(codecs.IncrementalDecoder):
     33     def decode(self, input, final=False):
     34         assert self.errors == 'strict'
     35         return base64.decodebytes(input)
     36 
     37 class StreamWriter(Codec, codecs.StreamWriter):
     38     charbuffertype = bytes
     39 
     40 class StreamReader(Codec, codecs.StreamReader):
     41     charbuffertype = bytes
     42 
     43 ### encodings module API
     44 
     45 def 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