summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2001-10-09 19:41:18 (GMT)
committerBarry Warsaw <barry@python.org>2001-10-09 19:41:18 (GMT)
commit53f8fe4232867b89d4114c501ffed7b3e338a056 (patch)
tree4f8dd67ff004fd51497b689046eeb62a0ccd3339 /Lib
parent7b9144b2ee0b34a0f4569b0e6277b12d1066c6be (diff)
downloadcpython-53f8fe4232867b89d4114c501ffed7b3e338a056.zip
cpython-53f8fe4232867b89d4114c501ffed7b3e338a056.tar.gz
cpython-53f8fe4232867b89d4114c501ffed7b3e338a056.tar.bz2
An audio/* class, like MIMEImage, contributed by Anthony Baxter.
Rewritten for style and the email package naming conventions by Barry.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/email/MIMEAudio.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/Lib/email/MIMEAudio.py b/Lib/email/MIMEAudio.py
new file mode 100644
index 0000000..0ca73e4
--- /dev/null
+++ b/Lib/email/MIMEAudio.py
@@ -0,0 +1,71 @@
+# Author: Anthony Baxter
+
+"""Class representing audio/* type MIME documents.
+"""
+
+import sndhdr
+from cStringIO import StringIO
+
+import MIMEBase
+import Errors
+import Encoders
+
+
+
+_sndhdr_MIMEmap = {'au' : 'basic',
+ 'wav' :'x-wav',
+ 'aiff':'x-aiff',
+ 'aifc':'x-aiff',
+ }
+
+# There are others in sndhdr that don't have MIME types. :(
+# Additional ones to be added to sndhdr? midi, mp3, realaudio, wma??
+def _whatsnd(data):
+ """Try to identify a sound file type.
+
+ sndhdr.what() has a pretty cruddy interface, unfortunately. This is why
+ we re-do it here. It would be easier to reverse engineer the Unix 'file'
+ command and use the standard 'magic' file, as shipped with a modern Unix.
+ """
+ hdr = data[:512]
+ fakefile = StringIO(hdr)
+ for testfn in sndhdr.tests:
+ res = testfn(hdr, fakefile)
+ if res is not None:
+ return _sndhdr_MIMEmap.get(res[0])
+ return None
+
+
+
+class MIMEAudio(MIMEBase.MIMEBase):
+ """Class for generating audio/* MIME documents."""
+
+ def __init__(self, _audiodata, _subtype=None,
+ _encoder=Encoders.encode_base64, **_params):
+ """Create an audio/* type MIME document.
+
+ _audiodata is a string containing the raw audio data. If this data
+ can be decoded by the standard Python `sndhdr' module, then the
+ subtype will be automatically included in the Content-TYpe: header.
+ Otherwise, you can specify the specific audio subtype via the
+ _subtype parameter. If _subtype is not given, and no subtype can be
+ guessed, a TypeError is raised.
+
+ _encoder is a function which will perform the actual encoding for
+ transport of the image data. It takes one argument, which is this
+ Image instance. It should use get_payload() and set_payload() to
+ change the payload to the encoded form. It should also add any
+ Content-Transfer-Encoding: or other headers to the message as
+ necessary. The default encoding is Base64.
+
+ 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:
+ _subtype = _whatsnd(_audiodata)
+ if _subtype is None:
+ raise TypeError, 'Could not find audio MIME subtype'
+ MIMEBase.MIMEBase.__init__(self, 'audio', _subtype, **_params)
+ self.set_payload(_audiodata)
+ _encoder(self)