uu_codec.py (2238B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\encodings\uu_codec.py 2 import codecs, binascii 3 4 def uu_encode(input, errors = 'strict', filename = '<data>', mode = 438): 5 from cStringIO import StringIO 6 from binascii import b2a_uu 7 infile = StringIO(str(input)) 8 outfile = StringIO() 9 read = infile.read 10 write = outfile.write 11 write('begin %o %s\n' % (mode & 511, filename)) 12 chunk = read(45) 13 while chunk: 14 write(b2a_uu(chunk)) 15 chunk = read(45) 16 17 write(' \nend\n') 18 return (outfile.getvalue(), len(input)) 19 20 21 def uu_decode(input, errors = 'strict'): 22 from cStringIO import StringIO 23 from binascii import a2b_uu 24 infile = StringIO(str(input)) 25 outfile = StringIO() 26 readline = infile.readline 27 write = outfile.write 28 while 1: 29 s = readline() 30 if not s: 31 raise ValueError, 'Missing "begin" line in input data' 32 if s[:5] == 'begin': 33 break 34 35 while 1: 36 s = readline() 37 if not s or s == 'end\n': 38 break 39 try: 40 data = a2b_uu(s) 41 except binascii.Error as v: 42 nbytes = ((ord(s[0]) - 32 & 63) * 4 + 5) / 3 43 data = a2b_uu(s[:nbytes]) 44 45 write(data) 46 47 if not s: 48 raise ValueError, 'Truncated input data' 49 return (outfile.getvalue(), len(input)) 50 51 52 class Codec(codecs.Codec): 53 54 def encode(self, input, errors = 'strict'): 55 return uu_encode(input, errors) 56 57 def decode(self, input, errors = 'strict'): 58 return uu_decode(input, errors) 59 60 61 class IncrementalEncoder(codecs.IncrementalEncoder): 62 63 def encode(self, input, final = False): 64 return uu_encode(input, self.errors)[0] 65 66 67 class IncrementalDecoder(codecs.IncrementalDecoder): 68 69 def decode(self, input, final = False): 70 return uu_decode(input, self.errors)[0] 71 72 73 class StreamWriter(Codec, codecs.StreamWriter): 74 pass 75 76 77 class StreamReader(Codec, codecs.StreamReader): 78 pass 79 80 81 def getregentry(): 82 return codecs.CodecInfo(name='uu', encode=uu_encode, decode=uu_decode, incrementalencoder=IncrementalEncoder, incrementaldecoder=IncrementalDecoder, streamreader=StreamReader, streamwriter=StreamWriter)