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