diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2002-09-22 09:01:08 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2002-09-22 09:01:08 (GMT) |
commit | a6026c6a0ff6835fb2bdd0c904cb4be8b4b5c19f (patch) | |
tree | 565a8e8db5c165414c57ae4fcd4f876926549d7f /Lib | |
parent | 4a385834562645bbd34c3cc3d91769b89f86f1c6 (diff) | |
download | cpython-a6026c6a0ff6835fb2bdd0c904cb4be8b4b5c19f.zip cpython-a6026c6a0ff6835fb2bdd0c904cb4be8b4b5c19f.tar.gz cpython-a6026c6a0ff6835fb2bdd0c904cb4be8b4b5c19f.tar.bz2 |
Back out multifile.py 1.19 and 1.20. Fixes #514676.
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/multifile.py | 17 | ||||
-rw-r--r-- | Lib/test/test_multifile.py | 66 |
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() |