diff options
author | Barry Warsaw <barry@python.org> | 2002-10-04 17:24:24 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2002-10-04 17:24:24 (GMT) |
commit | 18ff7954685b8388912df74faaec06f82fcd8cfc (patch) | |
tree | 812532cd2aa6e17ddbd9f5a8ca2538c96dfde6d5 /Lib/email/Encoders.py | |
parent | 5b70f66bf61717ff286d6da959d05c43514a1d14 (diff) | |
download | cpython-18ff7954685b8388912df74faaec06f82fcd8cfc.zip cpython-18ff7954685b8388912df74faaec06f82fcd8cfc.tar.gz cpython-18ff7954685b8388912df74faaec06f82fcd8cfc.tar.bz2 |
Backporting of email 2.4 from Python 2.3. Many newly added modules,
some updated modules, updated documentation, and updated tests. Note
that Lib/test/regrtest.py added test_email_codecs to the expected
skips for all platforms. Also note that test_email_codecs.py differs
slightly from its Python 2.3 counterpart due to the difference in
package location for TestSkipped.
Diffstat (limited to 'Lib/email/Encoders.py')
-rw-r--r-- | Lib/email/Encoders.py | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/Lib/email/Encoders.py b/Lib/email/Encoders.py index d9cd42d..5460fdb 100644 --- a/Lib/email/Encoders.py +++ b/Lib/email/Encoders.py @@ -1,17 +1,38 @@ -# Copyright (C) 2001 Python Software Foundation +# Copyright (C) 2001,2002 Python Software Foundation # Author: barry@zope.com (Barry Warsaw) """Module containing encoding functions for Image.Image and Text.Text. """ import base64 -from quopri import encodestring as _encodestring # Helpers -def _qencode(s): - return _encodestring(s, quotetabs=1) +try: + from quopri import encodestring as _encodestring + + def _qencode(s): + enc = _encodestring(s, quotetabs=1) + # Must encode spaces, which quopri.encodestring() doesn't do + return enc.replace(' ', '=20') +except ImportError: + # Python 2.1 doesn't have quopri.encodestring() + from cStringIO import StringIO + import quopri as _quopri + + def _qencode(s): + if not s: + return s + hasnewline = (s[-1] == '\n') + infp = StringIO(s) + outfp = StringIO() + _quopri.encode(infp, outfp, quotetabs=1) + # Python 2.x's encode() doesn't encode spaces even when quotetabs==1 + value = outfp.getvalue().replace(' ', '=20') + if not hasnewline and value[-1] == '\n': + return value[:-1] + return value def _bencode(s): @@ -30,7 +51,7 @@ def _bencode(s): def encode_base64(msg): """Encode the message's payload in Base64. - Also, add an appropriate Content-Transfer-Encoding: header. + Also, add an appropriate Content-Transfer-Encoding header. """ orig = msg.get_payload() encdata = _bencode(orig) @@ -40,9 +61,9 @@ def encode_base64(msg): def encode_quopri(msg): - """Encode the message's payload in Quoted-Printable. + """Encode the message's payload in quoted-printable. - Also, add an appropriate Content-Transfer-Encoding: header. + Also, add an appropriate Content-Transfer-Encoding header. """ orig = msg.get_payload() encdata = _qencode(orig) @@ -52,8 +73,12 @@ def encode_quopri(msg): def encode_7or8bit(msg): - """Set the Content-Transfer-Encoding: header to 7bit or 8bit.""" + """Set the Content-Transfer-Encoding header to 7bit or 8bit.""" orig = msg.get_payload() + if orig is None: + # There's no payload. For backwards compatibility we use 7bit + msg['Content-Transfer-Encoding'] = '7bit' + return # We play a trick to make this go fast. If encoding to ASCII succeeds, we # know the data must be 7bit, otherwise treat it as 8bit. try: |