python/dist/src/Lib/plat-mac plistlib.py, 1.14, 1.15
![](https://secure.gravatar.com/avatar/cc6b54da59a6d8b3dbc2c04a49ed1f1f.jpg?s=120&d=mm&r=g)
Update of /cvsroot/python/python/dist/src/Lib/plat-mac In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3138 Modified Files: plistlib.py Log Message: Made <data> output match Apple's exactly. To do that I had to add a custom version of base64.encodestring() so I could control the line length of the base64 output. Index: plistlib.py =================================================================== RCS file: /cvsroot/python/python/dist/src/Lib/plat-mac/plistlib.py,v retrieving revision 1.14 retrieving revision 1.15 diff -u -d -r1.14 -r1.15 --- plistlib.py 26 Oct 2004 10:11:00 -0000 1.14 +++ plistlib.py 26 Oct 2004 10:30:55 -0000 1.15 @@ -58,7 +58,7 @@ ] # Note: the Plist and Dict classes have been deprecated. -import base64 +import binascii import datetime from cStringIO import StringIO @@ -252,9 +252,13 @@ def writeData(self, data): self.beginElement("data") - for line in data.asBase64().split("\n"): + self.indentLevel -= 1 + maxlinelength = 76 - len(self.indent.replace("\t", " " * 8) * + self.indentLevel) + for line in data.asBase64(maxlinelength).split("\n"): if line: self.writeln(line) + self.indentLevel += 1 self.endElement("data") def writeDict(self, d): @@ -317,7 +321,7 @@ class Plist(_InternalDict): - """This class has been deprecated. Use readPlist() and writePlist() + """This class has been deprecated. Use readPlist() and writePlist() functions instead, together with regular dict objects. """ @@ -340,6 +344,15 @@ writePlist(self, pathOrFile) +def _encodeBase64(s, maxlinelength=76): + # copied from base64.encodestring(), with added maxlinelength argument + maxbinsize = (maxlinelength//4)*3 + pieces = [] + for i in range(0, len(s), maxbinsize): + chunk = s[i : i + maxbinsize] + pieces.append(binascii.b2a_base64(chunk)) + return "".join(pieces) + class Data: """Wrapper for binary data.""" @@ -348,11 +361,13 @@ self.data = data def fromBase64(cls, data): - return cls(base64.decodestring(data)) + # base64.decodestring just calls binascii.a2b_base64; + # it seems overkill to use both base64 and binascii. + return cls(binascii.a2b_base64(data)) fromBase64 = classmethod(fromBase64) - def asBase64(self): - return base64.encodestring(self.data) + def asBase64(self, maxlinelength=76): + return _encodeBase64(self.data, maxlinelength) def __cmp__(self, other): if isinstance(other, self.__class__):
participants (1)
-
jvr@users.sourceforge.net