[Python-checkins] CVS: python/dist/src/Doc/lib libmultifile.tex,1.7,1.8

Fred Drake python-dev@python.org
Fri, 7 Apr 2000 12:10:02 -0400


Update of /projects/cvsroot/python/dist/src/Doc/lib
In directory seahag.cnri.reston.va.us:/home/fdrake/projects/python/Doc/lib

Modified Files:
	libmultifile.tex 
Log Message:

New example from Skip Montanaro <skip@mojam.com>.


Index: libmultifile.tex
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Doc/lib/libmultifile.tex,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -r1.7 -r1.8
*** libmultifile.tex	1999/04/23 14:46:18	1.7
--- libmultifile.tex	2000/04/07 16:09:59	1.8
***************
*** 133,160 ****
  
  \subsection{\class{MultiFile} Example \label{multifile-example}}
  
- % This is almost unreadable; should be re-written when someone gets time.
- 
  \begin{verbatim}
! fp = MultiFile(sys.stdin, 0)
! fp.push(outer_boundary)
! message1 = fp.readlines()
! # We should now be either at real EOF or stopped on a message
! # boundary. Re-enable the outer boundary.
! fp.next()
! # Read another message with the same delimiter
! message2 = fp.readlines()
! # Re-enable that delimiter again
! fp.next()
! # Now look for a message subpart with a different boundary
! fp.push(inner_boundary)
! sub_header = fp.readlines()
! # If no exception has been thrown, we're looking at the start of
! # the message subpart.  Reset and grab the subpart
! fp.next()
! sub_body = fp.readlines()
! # Got it.  Now pop the inner boundary to re-enable the outer one.
! fp.pop()
! # Read to next outer boundary
! message3 = fp.readlines()
  \end{verbatim}
--- 133,166 ----
  
  \subsection{\class{MultiFile} Example \label{multifile-example}}
+ \sectionauthor{Skip Montanaro}{skip@mojam.org}
  
  \begin{verbatim}
! import mimetools
! import MultiFile
! import StringIO
! 
! def extract_mime_part_matching(stream, mimetype):
!     """Return the first element in a multipart MIME message on stream
!     matching mimetype."""
! 
!     msg = mimetools.Message(stream)
!     msgtype = msg.gettype()
!     params = msg.getplist()
! 
!     data = StringIO.StringIO()
!     if msgtype[:10] == "multipart/":
! 
!         file = multifile.MultiFile(stream)
!         file.push(msg.getparam("boundary"))
!         while file.next():
!             submsg = mimetools.Message(file)
!             try:
!                 data = StringIO.StringIO()
!                 mimetools.decode(file, data, submsg.getencoding())
!             except ValueError:
!                 continue
!             if submsg.gettype() == mimetype:
!                 break
!         file.pop()
!     return data.getvalue()
  \end{verbatim}