# Copyright (C) 2001-2004 Python Software Foundation
# Contact: email-sig@python.org
"""Various types of useful iterators and generators."""
from cStringIO
import StringIO
# This function will become a method of the Message class
"""Walk over the message tree, yielding each subpart.
The walk is performed in depth-first order. This method is a
for subpart
in self
.get_payload():
for subsubpart
in subpart
.walk():
# 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
):
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
:
def _structure(msg
, fp
=None, level
=0, include_default
=False):
"""A handy debugging aid"""
print >> fp
, tab
+ msg
.get_content_type(),
print >> fp
, '[%s]' % msg
.get_default_type()
for subpart
in msg
.get_payload():
_structure(subpart
, fp
, level
+1, include_default
)