Kaydet (Commit) 4c3e33a8 authored tarafından Barry Warsaw's avatar Barry Warsaw

Update to Python 2.3, getting rid of backward compatiblity crud. We don't

need the _compat21 or _compat22 modules either.
üst 3d1f397f
# Copyright (C) 2001,2002 Python Software Foundation # Copyright (C) 2001-2004 Python Software Foundation
# Author: barry@zope.com (Barry Warsaw) # Author: Barry Warsaw <barry@python.org>
"""Various types of useful iterators and generators. """Various types of useful iterators and generators.
""" """
import sys import sys
from cStringIO import StringIO
try:
from email._compat22 import body_line_iterator, typed_subpart_iterator
except SyntaxError: # This function will become a method of the Message class
# Python 2.1 doesn't have generators def walk(self):
from email._compat21 import body_line_iterator, typed_subpart_iterator """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): def _structure(msg, fp=None, level=0, include_default=False):
"""A handy debugging aid""" """A handy debugging aid"""
if fp is None: if fp is None:
fp = sys.stdout fp = sys.stdout
tab = ' ' * (level * 4) tab = ' ' * (level * 4)
print >> fp, tab + msg.get_content_type() print >> fp, tab + msg.get_content_type(),
if include_default:
print '[%s]' % msg.get_default_type()
else:
print
if msg.is_multipart(): if msg.is_multipart():
for subpart in msg.get_payload(): for subpart in msg.get_payload():
_structure(subpart, fp, level+1) _structure(subpart, fp, level+1, include_default)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment