diff options
| author | Barry Warsaw | 2012-03-22 18:29:58 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2012-03-22 18:29:58 -0400 |
| commit | aa2d0ad067adfd2515ed3c256cd0bca296058479 (patch) | |
| tree | 5aac48ec333bb6c6d69fe53b319e7b53f24483e2 /src/mailman/testing/helpers.py | |
| parent | ae15984804096db593d83740dcd4c158626eb22f (diff) | |
| download | mailman-aa2d0ad067adfd2515ed3c256cd0bca296058479.tar.gz mailman-aa2d0ad067adfd2515ed3c256cd0bca296058479.tar.zst mailman-aa2d0ad067adfd2515ed3c256cd0bca296058479.zip | |
Several fixes and cleanups, ostensibly to fix Python 2.6 support.
- email.iterators.body_line_iterator() cannot handle unicodes in Python 2.6,
because it uses cStringIO.StringIO under the covers, and *that* can't handle
unicode. This works fine in Python 2.7, so I override this for the tests
only under 2.6 (the code itself isn't affected).
- AddressError needs to str() its IAddress attribute explicitly in the
__str__() method, otherwise under Python 2.6, you'll get unprintable reprs
in the doctests. Again, this works correctly in 2.7, but EIBTI, so it can't
hurt either way.
- EmailError: a new exception, not related to AddressError. The reason for
this it to conform to current nomenclature: "address" means an IAddress
while "email" means a text email address. So InvalidEmailAddressError
now derives from EmailError instead of AddressError because it gets passed a
text email address, and because that is invalid, it never gets turned into
an IAddress. The __str__() of this new base exception class does some
tricky encoding to keep it compatible between Python 2.6 and 2.7.
- UnverifiedAddressError derives from AddressError instead of the more generic
MailmanError.
- A few random code cleanups are included.
Diffstat (limited to 'src/mailman/testing/helpers.py')
| -rw-r--r-- | src/mailman/testing/helpers.py | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/mailman/testing/helpers.py b/src/mailman/testing/helpers.py index 58c72d6d9..032b028a9 100644 --- a/src/mailman/testing/helpers.py +++ b/src/mailman/testing/helpers.py @@ -1,3 +1,4 @@ +# Copyright (C) 2008-2012 by the Free Software Foundation, Inc. # # This file is part of GNU Mailman. # @@ -22,6 +23,7 @@ __metaclass__ = type __all__ = [ 'LogFileMark', 'TestableMaster', + 'body_line_iterator', 'call_api', 'digest_mbox', 'event_subscribers', @@ -412,3 +414,19 @@ class LogFileMark: with open(self._filename) as fp: fp.seek(self._filepos) return fp.readline() + + + +# In Python 2.6, body_line_iterator() uses a cStringIO.StringIO() which cannot +# handle unicode. In Python 2.7 this works fine. I hate version checks but +# this is the easiest way to handle it. OTOH, we could just use the manual +# way for all Python versions instead. +import sys +if sys.hexversion >= 0x2070000: + from email.iterators import body_line_iterator +else: + def body_line_iterator(msg, decode=False): + payload = msg.get_payload(decode=decode) + bytes_payload = payload.encode('utf-8') + for line in bytes_payload.splitlines(): + yield line |
