mirror of
https://github.com/python/cpython.git
synced 2025-07-15 15:25:29 +00:00

<http://sf.net/projects/mimelib>. There /are/ API differences between mimelib and email, but most of the implementations are shared (except where cool Py2.2 stuff like generators are used).
68 lines
1.6 KiB
Python
68 lines
1.6 KiB
Python
# Copyright (C) 2001 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)
|
||
|
||
def _bencode(s):
|
||
# We can't quite use base64.encodestring() since it tacks on a "courtesy
|
||
# newline". Blech!
|
||
if not s:
|
||
return s
|
||
hasnewline = (s[-1] == '\n')
|
||
value = base64.encodestring(s)
|
||
if not hasnewline and value[-1] == '\n':
|
||
return value[:-1]
|
||
return value
|
||
|
||
|
||
|
||
def encode_base64(msg):
|
||
"""Encode the message's payload in Base64.
|
||
|
||
Also, add an appropriate Content-Transfer-Encoding: header.
|
||
"""
|
||
orig = msg.get_payload()
|
||
encdata = _bencode(orig)
|
||
msg.set_payload(encdata)
|
||
msg['Content-Transfer-Encoding'] = 'base64'
|
||
|
||
|
||
|
||
def encode_quopri(msg):
|
||
"""Encode the message's payload in Quoted-Printable.
|
||
|
||
Also, add an appropriate Content-Transfer-Encoding: header.
|
||
"""
|
||
orig = msg.get_payload()
|
||
encdata = _qencode(orig)
|
||
msg.set_payload(encdata)
|
||
msg['Content-Transfer-Encoding'] = 'quoted-printable'
|
||
|
||
|
||
|
||
def encode_7or8bit(msg):
|
||
"""Set the Content-Transfer-Encoding: header to 7bit or 8bit."""
|
||
orig = msg.get_payload()
|
||
# 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:
|
||
orig.encode('ascii')
|
||
except UnicodeError:
|
||
msg['Content-Transfer-Encoding'] = '8bit'
|
||
else:
|
||
msg['Content-Transfer-Encoding'] = '7bit'
|
||
|
||
|
||
|
||
def encode_noop(msg):
|
||
"""Do nothing."""
|