Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/email/mime/audio.py @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 68:5028fdace37b |
---|---|
1 # Copyright (C) 2001-2007 Python Software Foundation | |
2 # Author: Anthony Baxter | |
3 # Contact: email-sig@python.org | |
4 | |
5 """Class representing audio/* type MIME documents.""" | |
6 | |
7 __all__ = ['MIMEAudio'] | |
8 | |
9 import sndhdr | |
10 | |
11 from io import BytesIO | |
12 from email import encoders | |
13 from email.mime.nonmultipart import MIMENonMultipart | |
14 | |
15 | |
16 | |
17 _sndhdr_MIMEmap = {'au' : 'basic', | |
18 'wav' :'x-wav', | |
19 'aiff':'x-aiff', | |
20 'aifc':'x-aiff', | |
21 } | |
22 | |
23 # There are others in sndhdr that don't have MIME types. :( | |
24 # Additional ones to be added to sndhdr? midi, mp3, realaudio, wma?? | |
25 def _whatsnd(data): | |
26 """Try to identify a sound file type. | |
27 | |
28 sndhdr.what() has a pretty cruddy interface, unfortunately. This is why | |
29 we re-do it here. It would be easier to reverse engineer the Unix 'file' | |
30 command and use the standard 'magic' file, as shipped with a modern Unix. | |
31 """ | |
32 hdr = data[:512] | |
33 fakefile = BytesIO(hdr) | |
34 for testfn in sndhdr.tests: | |
35 res = testfn(hdr, fakefile) | |
36 if res is not None: | |
37 return _sndhdr_MIMEmap.get(res[0]) | |
38 return None | |
39 | |
40 | |
41 | |
42 class MIMEAudio(MIMENonMultipart): | |
43 """Class for generating audio/* MIME documents.""" | |
44 | |
45 def __init__(self, _audiodata, _subtype=None, | |
46 _encoder=encoders.encode_base64, *, policy=None, **_params): | |
47 """Create an audio/* type MIME document. | |
48 | |
49 _audiodata is a string containing the raw audio data. If this data | |
50 can be decoded by the standard Python `sndhdr' module, then the | |
51 subtype will be automatically included in the Content-Type header. | |
52 Otherwise, you can specify the specific audio subtype via the | |
53 _subtype parameter. If _subtype is not given, and no subtype can be | |
54 guessed, a TypeError is raised. | |
55 | |
56 _encoder is a function which will perform the actual encoding for | |
57 transport of the image data. It takes one argument, which is this | |
58 Image instance. It should use get_payload() and set_payload() to | |
59 change the payload to the encoded form. It should also add any | |
60 Content-Transfer-Encoding or other headers to the message as | |
61 necessary. The default encoding is Base64. | |
62 | |
63 Any additional keyword arguments are passed to the base class | |
64 constructor, which turns them into parameters on the Content-Type | |
65 header. | |
66 """ | |
67 if _subtype is None: | |
68 _subtype = _whatsnd(_audiodata) | |
69 if _subtype is None: | |
70 raise TypeError('Could not find audio MIME subtype') | |
71 MIMENonMultipart.__init__(self, 'audio', _subtype, policy=policy, | |
72 **_params) | |
73 self.set_payload(_audiodata) | |
74 _encoder(self) |