diff options
author | Barry Warsaw <barry@python.org> | 2001-10-09 19:41:18 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2001-10-09 19:41:18 (GMT) |
commit | 53f8fe4232867b89d4114c501ffed7b3e338a056 (patch) | |
tree | 4f8dd67ff004fd51497b689046eeb62a0ccd3339 /Lib | |
parent | 7b9144b2ee0b34a0f4569b0e6277b12d1066c6be (diff) | |
download | cpython-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.py | 71 |
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) |