summaryrefslogtreecommitdiff
path: root/libmat2/audio.py
diff options
context:
space:
mode:
authorjvoisin2018-10-12 11:58:01 +0200
committerjvoisin2018-10-12 14:32:09 +0200
commit2ba38dd2a18ab57ed7aac7ccdd6a42ff5e4d4eb7 (patch)
tree7fe800485f6ea47b21f63195c6dfc2f32e675bfe /libmat2/audio.py
parentb832a5941458083dd6147efb652036552f95b786 (diff)
Bump mypy typing coverage
Diffstat (limited to 'libmat2/audio.py')
-rw-r--r--libmat2/audio.py28
1 files changed, 17 insertions, 11 deletions
diff --git a/libmat2/audio.py b/libmat2/audio.py
index b67f766..bfe7f79 100644
--- a/libmat2/audio.py
+++ b/libmat2/audio.py
@@ -2,6 +2,7 @@ import mimetypes
2import os 2import os
3import shutil 3import shutil
4import tempfile 4import tempfile
5from typing import Dict, Union
5 6
6import mutagen 7import mutagen
7 8
@@ -16,13 +17,13 @@ class MutagenParser(abstract.AbstractParser):
16 except mutagen.MutagenError: 17 except mutagen.MutagenError:
17 raise ValueError 18 raise ValueError
18 19
19 def get_meta(self): 20 def get_meta(self) -> Dict[str, Union[str, dict]]:
20 f = mutagen.File(self.filename) 21 f = mutagen.File(self.filename)
21 if f.tags: 22 if f.tags:
22 return {k:', '.join(v) for k, v in f.tags.items()} 23 return {k:', '.join(v) for k, v in f.tags.items()}
23 return {} 24 return {}
24 25
25 def remove_all(self): 26 def remove_all(self) -> bool:
26 shutil.copy(self.filename, self.output_filename) 27 shutil.copy(self.filename, self.output_filename)
27 f = mutagen.File(self.output_filename) 28 f = mutagen.File(self.output_filename)
28 f.delete() 29 f.delete()
@@ -33,8 +34,8 @@ class MutagenParser(abstract.AbstractParser):
33class MP3Parser(MutagenParser): 34class MP3Parser(MutagenParser):
34 mimetypes = {'audio/mpeg', } 35 mimetypes = {'audio/mpeg', }
35 36
36 def get_meta(self): 37 def get_meta(self) -> Dict[str, Union[str, dict]]:
37 metadata = {} 38 metadata = {} # type: Dict[str, Union[str, dict]]
38 meta = mutagen.File(self.filename).tags 39 meta = mutagen.File(self.filename).tags
39 for key in meta: 40 for key in meta:
40 metadata[key.rstrip(' \t\r\n\0')] = ', '.join(map(str, meta[key].text)) 41 metadata[key.rstrip(' \t\r\n\0')] = ', '.join(map(str, meta[key].text))
@@ -48,7 +49,7 @@ class OGGParser(MutagenParser):
48class FLACParser(MutagenParser): 49class FLACParser(MutagenParser):
49 mimetypes = {'audio/flac', 'audio/x-flac'} 50 mimetypes = {'audio/flac', 'audio/x-flac'}
50 51
51 def remove_all(self): 52 def remove_all(self) -> bool:
52 shutil.copy(self.filename, self.output_filename) 53 shutil.copy(self.filename, self.output_filename)
53 f = mutagen.File(self.output_filename) 54 f = mutagen.File(self.output_filename)
54 f.clear_pictures() 55 f.clear_pictures()
@@ -56,16 +57,21 @@ class FLACParser(MutagenParser):
56 f.save(deleteid3=True) 57 f.save(deleteid3=True)
57 return True 58 return True
58 59
59 def get_meta(self): 60 def get_meta(self) -> Dict[str, Union[str, dict]]:
60 meta = super().get_meta() 61 meta = super().get_meta()
61 for num, picture in enumerate(mutagen.File(self.filename).pictures): 62 for num, picture in enumerate(mutagen.File(self.filename).pictures):
62 name = picture.desc if picture.desc else 'Cover %d' % num 63 name = picture.desc if picture.desc else 'Cover %d' % num
64 extension = mimetypes.guess_extension(picture.mime)
65 if extension is None: # pragma: no cover
66 meta[name] = 'harmful data'
67 continue
68
63 _, fname = tempfile.mkstemp() 69 _, fname = tempfile.mkstemp()
70 fname = fname + extension
64 with open(fname, 'wb') as f: 71 with open(fname, 'wb') as f:
65 f.write(picture.data) 72 f.write(picture.data)
66 extension = mimetypes.guess_extension(picture.mime) 73 p, _ = parser_factory.get_parser(fname) # type: ignore
67 shutil.move(fname, fname + extension) 74 # Mypy chokes on ternaries :/
68 p, _ = parser_factory.get_parser(fname+extension) 75 meta[name] = p.get_meta() if p else 'harmful data' # type: ignore
69 meta[name] = p.get_meta() if p else 'harmful data' 76 os.remove(fname)
70 os.remove(fname + extension)
71 return meta 77 return meta