summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2002-09-22 09:01:08 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2002-09-22 09:01:08 (GMT)
commita6026c6a0ff6835fb2bdd0c904cb4be8b4b5c19f (patch)
tree565a8e8db5c165414c57ae4fcd4f876926549d7f
parent4a385834562645bbd34c3cc3d91769b89f86f1c6 (diff)
downloadcpython-a6026c6a0ff6835fb2bdd0c904cb4be8b4b5c19f.zip
cpython-a6026c6a0ff6835fb2bdd0c904cb4be8b4b5c19f.tar.gz
cpython-a6026c6a0ff6835fb2bdd0c904cb4be8b4b5c19f.tar.bz2
Back out multifile.py 1.19 and 1.20. Fixes #514676.
-rw-r--r--Lib/multifile.py17
-rw-r--r--Lib/test/test_multifile.py66
2 files changed, 67 insertions, 16 deletions
diff --git a/Lib/multifile.py b/Lib/multifile.py
index 4ef3644..23d9d31 100644
--- a/Lib/multifile.py
+++ b/Lib/multifile.py
@@ -41,7 +41,6 @@ class MultiFile:
self.stack = [] # Grows down
self.level = 0
self.last = 0
- self.readahead = ""
if seekable:
self.seekable = 1
self.start = self.fp.tell()
@@ -50,7 +49,7 @@ class MultiFile:
def tell(self):
if self.level > 0:
return self.lastpos
- return self.fp.tell() - len(self.readahead) - self.start
+ return self.fp.tell() - self.start
def seek(self, pos, whence=0):
here = self.tell()
@@ -68,22 +67,8 @@ class MultiFile:
self.fp.seek(pos + self.start)
self.level = 0
self.last = 0
- self.readahead = ""
def readline(self):
- if not self.readahead:
- self.readahead = self._readline()
- line = self.readahead
- if line:
- self.readahead = self._readline()
- if not self.readahead:
- if line[-2:] == "\r\n":
- line = line[:-2]
- elif line[-1:] == "\n":
- line = line[:-1]
- return line
-
- def _readline(self):
if self.level > 0:
return ''
line = self.fp.readline()
diff --git a/Lib/test/test_multifile.py b/Lib/test/test_multifile.py
new file mode 100644
index 0000000..8f70347
--- /dev/null
+++ b/Lib/test/test_multifile.py
@@ -0,0 +1,66 @@
+import mimetools
+import multifile
+import cStringIO
+
+msg = """Mime-Version: 1.0
+Content-Type: multipart/mixed;
+ boundary="=====================_590453667==_"
+X-OriginalArrivalTime: 05 Feb 2002 03:43:23.0310 (UTC) FILETIME=[42D88CE0:01C1ADF7]
+
+--=====================_590453667==_
+Content-Type: multipart/alternative;
+ boundary="=====================_590453677==_.ALT"
+
+--=====================_590453677==_.ALT
+Content-Type: text/plain; charset="us-ascii"; format=flowed
+
+test A
+--=====================_590453677==_.ALT
+Content-Type: text/html; charset="us-ascii"
+
+<html>
+<b>test B</font></b></html>
+
+--=====================_590453677==_.ALT--
+
+--=====================_590453667==_
+Content-Type: text/plain; charset="us-ascii"
+Content-Disposition: attachment; filename="att.txt"
+
+Attached Content.
+Attached Content.
+Attached Content.
+Attached Content.
+
+--=====================_590453667==_--
+
+"""
+
+boundaries = 0
+linecount = 0
+
+def getMIMEMsg(mf):
+ global boundaries, linecount
+ msg = mimetools.Message(mf)
+
+ #print "TYPE: %s" % msg.gettype()
+ if msg.getmaintype() == 'multipart':
+ boundary = msg.getparam("boundary")
+ boundaries += 1
+
+ mf.push(boundary)
+ while mf.next():
+ getMIMEMsg(mf)
+ mf.pop()
+ else:
+ lines = mf.readlines()
+ linecount += len(lines)
+
+def main():
+ f = cStringIO.StringIO(msg)
+ getMIMEMsg(multifile.MultiFile(f))
+ assert boundaries == 2
+ assert linecount == 9
+
+if __name__ == '__main__':
+ main()