summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjvoisin2018-04-04 21:59:46 +0200
committerjvoisin2018-04-04 21:59:46 +0200
commit4ee091d833b55932fec345cc7403ef3723ecbd2f (patch)
tree988bd7f50cdf32e34ff4418246461032fee29af9
parent1ad817566de019521f565f4a7542f91b97c8a7a4 (diff)
Improve get_meta in various ways
- Normalize the case - Strip \00, \r, space and \n - Flatten metadata lists - Add tests for audio files
Diffstat (limited to '')
-rw-r--r--src/audio.py6
-rw-r--r--tests/test_climat2.py24
-rw-r--r--tests/test_libmat2.py12
3 files changed, 33 insertions, 9 deletions
diff --git a/src/audio.py b/src/audio.py
index 4da298c..0f4b5c0 100644
--- a/src/audio.py
+++ b/src/audio.py
@@ -10,7 +10,7 @@ class MutagenParser(abstract.AbstractParser):
10 def get_meta(self): 10 def get_meta(self):
11 f = mutagen.File(self.filename) 11 f = mutagen.File(self.filename)
12 if f.tags: 12 if f.tags:
13 return f.tags 13 return {k:', '.join(v) for k,v in f.tags.items()}
14 return {} 14 return {}
15 15
16 def remove_all(self): 16 def remove_all(self):
@@ -24,10 +24,10 @@ class MP3Parser(MutagenParser):
24 mimetypes = {'audio/mpeg', } 24 mimetypes = {'audio/mpeg', }
25 25
26 def get_meta(self): 26 def get_meta(self):
27 meta = super().get_meta()
28 metadata = {} 27 metadata = {}
28 meta = mutagen.File(self.filename).tags
29 for key in meta: 29 for key in meta:
30 metadata[key] = meta[key].text 30 metadata[key.rstrip(' \t\r\n\0')] = ', '.join(map(str, meta[key].text))
31 return metadata 31 return metadata
32 32
33class OGGParser(MutagenParser): 33class OGGParser(MutagenParser):
diff --git a/tests/test_climat2.py b/tests/test_climat2.py
index 16f97a2..cf7a63b 100644
--- a/tests/test_climat2.py
+++ b/tests/test_climat2.py
@@ -43,3 +43,27 @@ class TestGetMeta(unittest.TestCase):
43 self.assertIn(b'generator: LibreOffice/3.3$Unix', stdout) 43 self.assertIn(b'generator: LibreOffice/3.3$Unix', stdout)
44 self.assertIn(b'creator: jvoisin', stdout) 44 self.assertIn(b'creator: jvoisin', stdout)
45 self.assertIn(b'date_time: 2011-07-26 02:40:16', stdout) 45 self.assertIn(b'date_time: 2011-07-26 02:40:16', stdout)
46
47 def test_mp3(self):
48 proc = subprocess.Popen(['./main.py', '--show', './tests/data/dirty.mp3'],
49 stdout=subprocess.PIPE)
50 stdout, _ = proc.communicate()
51 self.assertIn(b'TALB: harmfull', stdout)
52 self.assertIn(b'COMM::: Thank you for using MAT !', stdout)
53
54 def test_flac(self):
55 proc = subprocess.Popen(['./main.py', '--show', './tests/data/dirty.flac'],
56 stdout=subprocess.PIPE)
57 stdout, _ = proc.communicate()
58 self.assertIn(b'comments: Thank you for using MAT !', stdout)
59 self.assertIn(b'genre: Python', stdout)
60 self.assertIn(b'title: I am so', stdout)
61
62 def test_ogg(self):
63 proc = subprocess.Popen(['./main.py', '--show', './tests/data/dirty.ogg'],
64 stdout=subprocess.PIPE)
65 stdout, _ = proc.communicate()
66 self.assertIn(b'comments: Thank you for using MAT !', stdout)
67 self.assertIn(b'genre: Python', stdout)
68 self.assertIn(b'i am a : various comment', stdout)
69 self.assertIn(b'artist: jvoisin', stdout)
diff --git a/tests/test_libmat2.py b/tests/test_libmat2.py
index 34eea49..c2864c6 100644
--- a/tests/test_libmat2.py
+++ b/tests/test_libmat2.py
@@ -43,17 +43,17 @@ class TestGetMeta(unittest.TestCase):
43 def test_mp3(self): 43 def test_mp3(self):
44 p = audio.MP3Parser('./tests/data/dirty.mp3') 44 p = audio.MP3Parser('./tests/data/dirty.mp3')
45 meta = p.get_meta() 45 meta = p.get_meta()
46 self.assertEqual(meta['TXXX:I am a '], ['various comment']) 46 self.assertEqual(meta['TXXX:I am a'], 'various comment')
47 47
48 def test_ogg(self): 48 def test_ogg(self):
49 p = audio.OGGParser('./tests/data/dirty.ogg') 49 p = audio.OGGParser('./tests/data/dirty.ogg')
50 meta = p.get_meta() 50 meta = p.get_meta()
51 self.assertEqual(meta['TITLE'], ['I am so']) 51 self.assertEqual(meta['title'], 'I am so')
52 52
53 def test_flac(self): 53 def test_flac(self):
54 p = audio.FLACParser('./tests/data/dirty.flac') 54 p = audio.FLACParser('./tests/data/dirty.flac')
55 meta = p.get_meta() 55 meta = p.get_meta()
56 self.assertEqual(meta['TITLE'], ['I am so']) 56 self.assertEqual(meta['title'], 'I am so')
57 57
58 def test_docx(self): 58 def test_docx(self):
59 p = office.MSOfficeParser('./tests/data/dirty.docx') 59 p = office.MSOfficeParser('./tests/data/dirty.docx')
@@ -184,7 +184,7 @@ class TestCleaning(unittest.TestCase):
184 p = audio.MP3Parser('./tests/data/clean.mp3') 184 p = audio.MP3Parser('./tests/data/clean.mp3')
185 185
186 meta = p.get_meta() 186 meta = p.get_meta()
187 self.assertEqual(meta['TXXX:I am a '], ['various comment']) 187 self.assertEqual(meta['TXXX:I am a'], 'various comment')
188 188
189 ret = p.remove_all() 189 ret = p.remove_all()
190 self.assertTrue(ret) 190 self.assertTrue(ret)
@@ -199,7 +199,7 @@ class TestCleaning(unittest.TestCase):
199 p = audio.OGGParser('./tests/data/clean.ogg') 199 p = audio.OGGParser('./tests/data/clean.ogg')
200 200
201 meta = p.get_meta() 201 meta = p.get_meta()
202 self.assertEqual(meta['TITLE'], ['I am so']) 202 self.assertEqual(meta['title'], 'I am so')
203 203
204 ret = p.remove_all() 204 ret = p.remove_all()
205 self.assertTrue(ret) 205 self.assertTrue(ret)
@@ -214,7 +214,7 @@ class TestCleaning(unittest.TestCase):
214 p = audio.FLACParser('./tests/data/clean.flac') 214 p = audio.FLACParser('./tests/data/clean.flac')
215 215
216 meta = p.get_meta() 216 meta = p.get_meta()
217 self.assertEqual(meta['TITLE'], ['I am so']) 217 self.assertEqual(meta['title'], 'I am so')
218 218
219 ret = p.remove_all() 219 ret = p.remove_all()
220 self.assertTrue(ret) 220 self.assertTrue(ret)