[Python-checkins] r42819 - in sandbox/trunk/emailpkg/4.0: MANIFEST email/_parseaddr.py email/base64mime.py email/charset.py email/encoders.py email/feedparser.py email/generator.py email/header.py email/iterators.py email/message.py email/mime/application.py email/mime/audio.py email/mime/base.py email/mime/image.py email/mime/message.py email/mime/multipart.py email/mime/nonmultipart.py email/mime/text.py email/parser.py email/quoprimime.py email/test/test_email_renamed.py email/utils.py

barry.warsaw python-checkins at python.org
Fri Mar 3 23:31:37 CET 2006


Author: barry.warsaw
Date: Fri Mar  3 23:31:32 2006
New Revision: 42819

Added:
   sandbox/trunk/emailpkg/4.0/email/mime/application.py
Modified:
   sandbox/trunk/emailpkg/4.0/MANIFEST
   sandbox/trunk/emailpkg/4.0/email/_parseaddr.py
   sandbox/trunk/emailpkg/4.0/email/base64mime.py
   sandbox/trunk/emailpkg/4.0/email/charset.py
   sandbox/trunk/emailpkg/4.0/email/encoders.py
   sandbox/trunk/emailpkg/4.0/email/feedparser.py
   sandbox/trunk/emailpkg/4.0/email/generator.py
   sandbox/trunk/emailpkg/4.0/email/header.py
   sandbox/trunk/emailpkg/4.0/email/iterators.py
   sandbox/trunk/emailpkg/4.0/email/message.py
   sandbox/trunk/emailpkg/4.0/email/mime/audio.py
   sandbox/trunk/emailpkg/4.0/email/mime/base.py
   sandbox/trunk/emailpkg/4.0/email/mime/image.py
   sandbox/trunk/emailpkg/4.0/email/mime/message.py
   sandbox/trunk/emailpkg/4.0/email/mime/multipart.py
   sandbox/trunk/emailpkg/4.0/email/mime/nonmultipart.py
   sandbox/trunk/emailpkg/4.0/email/mime/text.py
   sandbox/trunk/emailpkg/4.0/email/parser.py
   sandbox/trunk/emailpkg/4.0/email/quoprimime.py
   sandbox/trunk/emailpkg/4.0/email/test/test_email_renamed.py
   sandbox/trunk/emailpkg/4.0/email/utils.py
Log:
Added email/mime/application.py for MIMEApplication class, based on SF patch
#1424065 by Keith Dart.  Modifications made and test cases added by Barry.

Also add __all__ specifications to all modules (except errors.py, which seems
like overkill).


Modified: sandbox/trunk/emailpkg/4.0/MANIFEST
==============================================================================
--- sandbox/trunk/emailpkg/4.0/MANIFEST	(original)
+++ sandbox/trunk/emailpkg/4.0/MANIFEST	Fri Mar  3 23:31:32 2006
@@ -16,6 +16,7 @@
 email/quoprimime.py
 email/utils.py
 email/mime/__init__.py
+email/mime/application.py
 email/mime/audio.py
 email/mime/base.py
 email/mime/image.py

Modified: sandbox/trunk/emailpkg/4.0/email/_parseaddr.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/_parseaddr.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/_parseaddr.py	Fri Mar  3 23:31:32 2006
@@ -6,6 +6,13 @@
 Lifted directly from rfc822.py.  This should eventually be rewritten.
 """
 
+__all__ = [
+    'mktime_tz',
+    'parsedate',
+    'parsedate_tz',
+    'quote',
+    ]
+
 import time
 
 SPACE = ' '

Modified: sandbox/trunk/emailpkg/4.0/email/base64mime.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/base64mime.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/base64mime.py	Fri Mar  3 23:31:32 2006
@@ -24,7 +24,19 @@
 module.
 """
 
+__all__ = [
+    'base64_len',
+    'body_decode',
+    'body_encode',
+    'decode',
+    'decodestring',
+    'encode',
+    'encodestring',
+    'header_encode',
+    ]
+
 import re
+
 from binascii import b2a_base64, a2b_base64
 from email.utils import fix_eols
 

Modified: sandbox/trunk/emailpkg/4.0/email/charset.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/charset.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/charset.py	Fri Mar  3 23:31:32 2006
@@ -2,6 +2,13 @@
 # Author: Ben Gertzfield, Barry Warsaw
 # Contact: email-sig at python.org
 
+__all__ = [
+    'Charset',
+    'add_alias',
+    'add_charset',
+    'add_codec',
+    ]
+
 import email.base64mime
 import email.quoprimime
 

Modified: sandbox/trunk/emailpkg/4.0/email/encoders.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/encoders.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/encoders.py	Fri Mar  3 23:31:32 2006
@@ -4,9 +4,19 @@
 
 """Encodings and related functions."""
 
+__all__ = [
+    'encode_7or8bit',
+    'encode_base64',
+    'encode_noop',
+    'encode_quopri',
+    ]
+
 import base64
+
 from quopri import encodestring as _encodestring
 
+
+
 def _qencode(s):
     enc = _encodestring(s, quotetabs=True)
     # Must encode spaces, which quopri.encodestring() doesn't do

Modified: sandbox/trunk/emailpkg/4.0/email/feedparser.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/feedparser.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/feedparser.py	Fri Mar  3 23:31:32 2006
@@ -19,7 +19,10 @@
 object's .defects attribute.
 """
 
+__all__ = ['FeedParser']
+
 import re
+
 from email import errors
 from email import message
 

Modified: sandbox/trunk/emailpkg/4.0/email/generator.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/generator.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/generator.py	Fri Mar  3 23:31:32 2006
@@ -4,13 +4,15 @@
 
 """Classes to generate plain text from a message object tree."""
 
+__all__ = ['Generator', 'DecodedGenerator']
+
 import re
 import sys
 import time
 import random
 import warnings
-from cStringIO import StringIO
 
+from cStringIO import StringIO
 from email.header import Header
 
 UNDERSCORE = '_'

Modified: sandbox/trunk/emailpkg/4.0/email/header.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/header.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/header.py	Fri Mar  3 23:31:32 2006
@@ -4,6 +4,12 @@
 
 """Header encoding and decoding functionality."""
 
+__all__ = [
+    'Header',
+    'decode_header',
+    'make_header',
+    ]
+
 import re
 import binascii
 

Modified: sandbox/trunk/emailpkg/4.0/email/iterators.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/iterators.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/iterators.py	Fri Mar  3 23:31:32 2006
@@ -4,6 +4,13 @@
 
 """Various types of useful iterators and generators."""
 
+__all__ = [
+    'body_line_iterator',
+    'typed_subpart_iterator',
+    'walk',
+    # Do not include _structure() since it's part of the debugging API.
+    ]
+
 import sys
 from cStringIO import StringIO
 

Modified: sandbox/trunk/emailpkg/4.0/email/message.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/message.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/message.py	Fri Mar  3 23:31:32 2006
@@ -4,6 +4,8 @@
 
 """Basic message object for the email package object model."""
 
+__all__ = ['Message']
+
 import re
 import uu
 import binascii

Added: sandbox/trunk/emailpkg/4.0/email/mime/application.py
==============================================================================
--- (empty file)
+++ sandbox/trunk/emailpkg/4.0/email/mime/application.py	Fri Mar  3 23:31:32 2006
@@ -0,0 +1,36 @@
+# Copyright (C) 2001-2006 Python Software Foundation
+# Author: Keith Dart
+# Contact: email-sig at python.org
+
+"""Class representing application/* type MIME documents."""
+
+__all__ = ["MIMEApplication"]
+
+from email import encoders
+from email.mime.nonmultipart import MIMENonMultipart
+
+
+class MIMEApplication(MIMENonMultipart):
+    """Class for generating application/* MIME documents."""
+
+    def __init__(self, _data, _subtype='octet-stream',
+                 _encoder=encoders.encode_base64, **_params):
+        """Create an application/* type MIME document.
+
+        _data is a string containing the raw applicatoin data.
+
+        _subtype is the MIME content type subtype, defaulting to
+        'octet-stream'.
+
+        _encoder is a function which will perform the actual encoding for
+        transport of the application data, defaulting to base64 encoding.
+
+        Any additional keyword arguments are passed to the base class
+        constructor, which turns them into parameters on the Content-Type
+        header.
+        """
+        if _subtype is None:
+            raise TypeError('Invalid application MIME subtype')
+        MIMENonMultipart.__init__(self, 'application', _subtype, **_params)
+        self.set_payload(_data)
+        _encoder(self)

Modified: sandbox/trunk/emailpkg/4.0/email/mime/audio.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/mime/audio.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/mime/audio.py	Fri Mar  3 23:31:32 2006
@@ -4,9 +4,11 @@
 
 """Class representing audio/* type MIME documents."""
 
+__all__ = ['MIMEAudio']
+
 import sndhdr
-from cStringIO import StringIO
 
+from cStringIO import StringIO
 from email import encoders
 from email.mime.nonmultipart import MIMENonMultipart
 

Modified: sandbox/trunk/emailpkg/4.0/email/mime/base.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/mime/base.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/mime/base.py	Fri Mar  3 23:31:32 2006
@@ -4,6 +4,8 @@
 
 """Base class for MIME specializations."""
 
+__all__ = ['MIMEBase']
+
 from email import message
 
 

Modified: sandbox/trunk/emailpkg/4.0/email/mime/image.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/mime/image.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/mime/image.py	Fri Mar  3 23:31:32 2006
@@ -4,6 +4,8 @@
 
 """Class representing image/* type MIME documents."""
 
+__all__ = ['MIMEImage']
+
 import imghdr
 
 from email import encoders

Modified: sandbox/trunk/emailpkg/4.0/email/mime/message.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/mime/message.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/mime/message.py	Fri Mar  3 23:31:32 2006
@@ -4,6 +4,8 @@
 
 """Class representing message/* MIME documents."""
 
+__all__ = ['MIMEMessage']
+
 from email import message
 from email.mime.nonmultipart import MIMENonMultipart
 

Modified: sandbox/trunk/emailpkg/4.0/email/mime/multipart.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/mime/multipart.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/mime/multipart.py	Fri Mar  3 23:31:32 2006
@@ -4,6 +4,8 @@
 
 """Base class for MIME multipart/* type messages."""
 
+__all__ = ['MIMEMultipart']
+
 from email.mime.base import MIMEBase
 
 

Modified: sandbox/trunk/emailpkg/4.0/email/mime/nonmultipart.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/mime/nonmultipart.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/mime/nonmultipart.py	Fri Mar  3 23:31:32 2006
@@ -4,6 +4,8 @@
 
 """Base class for MIME type messages that are not multipart."""
 
+__all__ = ['MIMENonMultipart']
+
 from email import errors
 from email.mime.base import MIMEBase
 

Modified: sandbox/trunk/emailpkg/4.0/email/mime/text.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/mime/text.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/mime/text.py	Fri Mar  3 23:31:32 2006
@@ -4,8 +4,10 @@
 
 """Class representing text/* type MIME documents."""
 
-from email.mime.nonmultipart import MIMENonMultipart
+__all__ = ['MIMEText']
+
 from email.encoders import encode_7or8bit
+from email.mime.nonmultipart import MIMENonMultipart
 
 
 

Modified: sandbox/trunk/emailpkg/4.0/email/parser.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/parser.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/parser.py	Fri Mar  3 23:31:32 2006
@@ -4,6 +4,8 @@
 
 """A parser of RFC 2822 and MIME email messages."""
 
+__all__ = ['Parser', 'HeaderParser']
+
 import warnings
 from cStringIO import StringIO
 

Modified: sandbox/trunk/emailpkg/4.0/email/quoprimime.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/quoprimime.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/quoprimime.py	Fri Mar  3 23:31:32 2006
@@ -26,9 +26,26 @@
 wrapping issues, use the email.Header module.
 """
 
+__all__ = [
+    'body_decode',
+    'body_encode',
+    'body_quopri_check',
+    'body_quopri_len',
+    'decode',
+    'decodestring',
+    'encode',
+    'encodestring',
+    'header_decode',
+    'header_encode',
+    'header_quopri_check',
+    'header_quopri_len',
+    'quote',
+    'unquote',
+    ]
+
 import re
-from string import hexdigits
 
+from string import hexdigits
 from email.utils import fix_eols
 
 CRLF = '\r\n'

Modified: sandbox/trunk/emailpkg/4.0/email/test/test_email_renamed.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/test/test_email_renamed.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/test/test_email_renamed.py	Fri Mar  3 23:31:32 2006
@@ -18,6 +18,7 @@
 from email.parser import Parser, HeaderParser
 from email.generator import Generator, DecodedGenerator
 from email.message import Message
+from email.mime.application import MIMEApplication
 from email.mime.audio import MIMEAudio
 from email.mime.text import MIMEText
 from email.mime.image import MIMEImage
@@ -965,6 +966,23 @@
 
 
 
+# Test the basic MIMEApplication class
+class TestMIMEApplication(unittest.TestCase):
+    def test_headers(self):
+        eq = self.assertEqual
+        msg = MIMEApplication('\xfa\xfb\xfc\xfd\xfe\xff')
+        eq(msg.get_content_type(), 'application/octet-stream')
+        eq(msg['content-transfer-encoding'], 'base64')
+
+    def test_body(self):
+        eq = self.assertEqual
+        bytes = '\xfa\xfb\xfc\xfd\xfe\xff'
+        msg = MIMEApplication(bytes)
+        eq(msg.get_payload(), '+vv8/f7/')
+        eq(msg.get_payload(decode=True), bytes)
+
+
+
 # Test the basic MIMEText class
 class TestMIMEText(unittest.TestCase):
     def setUp(self):

Modified: sandbox/trunk/emailpkg/4.0/email/utils.py
==============================================================================
--- sandbox/trunk/emailpkg/4.0/email/utils.py	(original)
+++ sandbox/trunk/emailpkg/4.0/email/utils.py	Fri Mar  3 23:31:32 2006
@@ -4,6 +4,21 @@
 
 """Miscellaneous utilities."""
 
+__all__ = [
+    'collapse_rfc2231_value',
+    'decode_params',
+    'decode_rfc2231',
+    'encode_rfc2231',
+    'formataddr',
+    'formatdate',
+    'getaddresses',
+    'make_msgid',
+    'parseaddr',
+    'parsedate',
+    'parsedate_tz',
+    'unquote',
+    ]
+
 import os
 import re
 import time


More information about the Python-checkins mailing list