diff options
| author | jvoisin | 2018-10-12 11:58:01 +0200 |
|---|---|---|
| committer | jvoisin | 2018-10-12 14:32:09 +0200 |
| commit | 2ba38dd2a18ab57ed7aac7ccdd6a42ff5e4d4eb7 (patch) | |
| tree | 7fe800485f6ea47b21f63195c6dfc2f32e675bfe /libmat2/audio.py | |
| parent | b832a5941458083dd6147efb652036552f95b786 (diff) | |
Bump mypy typing coverage
Diffstat (limited to 'libmat2/audio.py')
| -rw-r--r-- | libmat2/audio.py | 28 |
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 | |||
| 2 | import os | 2 | import os |
| 3 | import shutil | 3 | import shutil |
| 4 | import tempfile | 4 | import tempfile |
| 5 | from typing import Dict, Union | ||
| 5 | 6 | ||
| 6 | import mutagen | 7 | import 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): | |||
| 33 | class MP3Parser(MutagenParser): | 34 | class 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): | |||
| 48 | class FLACParser(MutagenParser): | 49 | class 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 |
