These files are a subset of the python-2.7.2.tgz distribution from python.org. Changed files from PyMod-2.7.2 have been copied into the corresponding directories of this tree, replacing the original files in the distribution. Signed-off-by: daryl.mcdaniel@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13197 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (C) 2001-2006 Python Software Foundation
 | ||
| # Author: Barry Warsaw
 | ||
| # Contact: email-sig@python.org
 | ||
| 
 | ||
| """Various types of useful iterators and generators."""
 | ||
| 
 | ||
| __all__ = [
 | ||
|     'body_line_iterator',
 | ||
|     'typed_subpart_iterator',
 | ||
|     'walk',
 | ||
|     # Do not include _structure() since it's part of the debugging API.
 | ||
|     ]
 | ||
| 
 | ||
| import sys
 | ||
| from cStringIO import StringIO
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| # This function will become a method of the Message class
 | ||
| def walk(self):
 | ||
|     """Walk over the message tree, yielding each subpart.
 | ||
| 
 | ||
|     The walk is performed in depth-first order.  This method is a
 | ||
|     generator.
 | ||
|     """
 | ||
|     yield self
 | ||
|     if self.is_multipart():
 | ||
|         for subpart in self.get_payload():
 | ||
|             for subsubpart in subpart.walk():
 | ||
|                 yield subsubpart
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| # These two functions are imported into the Iterators.py interface module.
 | ||
| def body_line_iterator(msg, decode=False):
 | ||
|     """Iterate over the parts, returning string payloads line-by-line.
 | ||
| 
 | ||
|     Optional decode (default False) is passed through to .get_payload().
 | ||
|     """
 | ||
|     for subpart in msg.walk():
 | ||
|         payload = subpart.get_payload(decode=decode)
 | ||
|         if isinstance(payload, basestring):
 | ||
|             for line in StringIO(payload):
 | ||
|                 yield line
 | ||
| 
 | ||
| 
 | ||
| def typed_subpart_iterator(msg, maintype='text', subtype=None):
 | ||
|     """Iterate over the subparts with a given MIME type.
 | ||
| 
 | ||
|     Use `maintype' as the main MIME type to match against; this defaults to
 | ||
|     "text".  Optional `subtype' is the MIME subtype to match against; if
 | ||
|     omitted, only the main type is matched.
 | ||
|     """
 | ||
|     for subpart in msg.walk():
 | ||
|         if subpart.get_content_maintype() == maintype:
 | ||
|             if subtype is None or subpart.get_content_subtype() == subtype:
 | ||
|                 yield subpart
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| def _structure(msg, fp=None, level=0, include_default=False):
 | ||
|     """A handy debugging aid"""
 | ||
|     if fp is None:
 | ||
|         fp = sys.stdout
 | ||
|     tab = ' ' * (level * 4)
 | ||
|     print >> fp, tab + msg.get_content_type(),
 | ||
|     if include_default:
 | ||
|         print >> fp, '[%s]' % msg.get_default_type()
 | ||
|     else:
 | ||
|         print >> fp
 | ||
|     if msg.is_multipart():
 | ||
|         for subpart in msg.get_payload():
 | ||
|             _structure(subpart, fp, level+1, include_default)
 |