MimeWriter.py (1654B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\stdlib\MimeWriter.py 2 import mimetools 3 __all__ = ['MimeWriter'] 4 5 class MimeWriter: 6 7 def __init__(self, fp): 8 self._fp = fp 9 self._headers = [] 10 11 def addheader(self, key, value, prefix = 0): 12 lines = value.split('\n') 13 while lines and not lines[-1]: 14 del lines[-1] 15 16 while lines and not lines[0]: 17 del lines[0] 18 19 for i in range(1, len(lines)): 20 lines[i] = ' ' + lines[i].strip() 21 22 value = '\n'.join(lines) + '\n' 23 line = key + ': ' + value 24 if prefix: 25 self._headers.insert(0, line) 26 else: 27 self._headers.append(line) 28 29 def flushheaders(self): 30 self._fp.writelines(self._headers) 31 self._headers = [] 32 33 def startbody(self, ctype, plist = [], prefix = 1): 34 for name, value in plist: 35 ctype = ctype + ';\n %s="%s"' % (name, value) 36 37 self.addheader('Content-Type', ctype, prefix=prefix) 38 self.flushheaders() 39 self._fp.write('\n') 40 return self._fp 41 42 def startmultipartbody(self, subtype, boundary = None, plist = [], prefix = 1): 43 self._boundary = boundary or mimetools.choose_boundary() 44 return self.startbody('multipart/' + subtype, [('boundary', self._boundary)] + plist, prefix=prefix) 45 46 def nextpart(self): 47 self._fp.write('\n--' + self._boundary + '\n') 48 return self.__class__(self._fp) 49 50 def lastpart(self): 51 self._fp.write('\n--' + self._boundary + '--\n') 52 53 54 if __name__ == '__main__': 55 import test.test_MimeWriter