old_contents: # Copyright (C) 2001,2002 Python Software Foundation
  # Author: barry@zope.com (Barry Warsaw)
  
  """Various types of useful iterators and generators.
  """
  
  import sys
  
  try:
      from email._compat22 import body_line_iterator, typed_subpart_iterator
  except SyntaxError:
      # Python 2.1 doesn't have generators
      from email._compat21 import body_line_iterator, typed_subpart_iterator
  
  
  
  def _structure(msg, fp=None, level=0):
      """A handy debugging aid"""
      if fp is None:
          fp = sys.stdout
      tab = ' ' * (level * 4)
      print >> fp, tab + msg.get_content_type()
      if msg.is_multipart():
          for subpart in msg.get_payload():
              _structure(subpart, fp, level+1)
  
new_contents: # Copyright (C) 2001-2004 Python Software Foundation
  # Author: Barry Warsaw <barry@python.org>
  
  """Various types of useful iterators and generators.
  """
  
  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.
  # The Python 2.2 version uses generators for efficiency.
  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 '[%s]' % msg.get_default_type()
      else:
          print
      if msg.is_multipart():
          for subpart in msg.get_payload():
              _structure(subpart, fp, level+1, include_default)
  
subject: Update to Python 2.3, getting rid of backward compatiblity crud. We don't need the _compat21 or _compat22 modules either.