[Python-checkins] python/dist/src/Lib/plat-mac plistlib.py, 1.14, 1.15

jvr at users.sourceforge.net jvr at users.sourceforge.net
Tue Oct 26 12:30:58 CEST 2004


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__):


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /