1 #!/usr/bin/env python2.5
4 class MutagenBackend ():
7 self.formats = {"audio/mpeg": self.__id3_writer ,
8 "audio/x-ms-wma" : self.__wma_writer }
9 def get_supported_mimes (self):
10 return self.formats.keys ()
12 def save_metadata_on_file (self, filename, mime, artist, title, album):
13 if (self.formats.has_key (mime)):
14 return self.formats[mime] (filename, artist, title, album)
18 def __id3_writer (self, filename, artist, title, album):
19 from mutagen.mp3 import MP3
20 from mutagen.easyid3 import EasyID3
21 audio = MP3 (filename, ID3=EasyID3)
23 audio.add_tags (ID3=EasyID3)
24 print "Adding tags to %s" % (filename)
25 except mutagen.id3.error:
26 # It already has tags!
29 audio["artist"] = artist
30 audio["title"] = title
31 audio["album"] = album
38 def __wma_writer (self, filename, artist, title, album):
39 from mutagen.asf import ASF
40 audio = ASF (filename)
41 audio["Author"] = artist
42 audio["Title"] = title
43 audio["WM/AlbumTitle"] = album
53 if __name__ == "__main__":
55 def verify (filename, expected_artist, expected_title, expected_album):
56 from mutagen.easyid3 import EasyID3
57 audio = EasyID3 (filename)
58 assert audio["artist"][0] == expected_artist
59 assert audio["title"][0] == expected_title
60 assert audio["album"][0] == expected_album
62 def verify_wma (filename, expected_artist, expected_title, expected_album):
63 from mutagen.asf import ASF
64 audio = ASF (filename)
65 assert str(audio["Author"][0]) == expected_artist
66 assert str(audio["Title"][0]) == expected_title
67 assert str(audio["WM/AlbumTitle"][0]) == expected_album
70 writer = MutagenBackend ()
72 TEST_FILE = "test-files/strange.mp3"
73 TEST_FILE_TO_BREAK = "test-files/strange-fixed.mp3"
75 out = open (TEST_FILE_TO_BREAK, 'w')
76 out.write (open (TEST_FILE,'r').read ())
79 writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
80 "artist_test", "title_test", "album_test")
81 verify (TEST_FILE_TO_BREAK, "artist_test", "title_test", "album_test")
83 writer.save_metadata_on_file (TEST_FILE_TO_BREAK, "audio/mpeg",
84 "artist_test_2", "title_test_2", "album_2")
85 verify (TEST_FILE_TO_BREAK, "artist_test_2", "title_test_2", "album_2")
89 READONLY_FILE = "test-files/no-write.mp3"
90 assert not writer.save_metadata_on_file (READONLY_FILE, "audio/mpeg",
91 "artist_test", "title_test", "album_test")
94 WMA_FILE = "test-files/hooverphonic.wma"
95 assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
96 "artist_wma", "title_wma", "album_wma")
97 verify_wma (WMA_FILE, "artist_wma", "title_wma", "album_wma")
99 assert writer.save_metadata_on_file (WMA_FILE, "audio/x-ms-wma",
100 "artist_wma_2", "title_wma_2", "album_wma_2")
101 verify_wma (WMA_FILE, "artist_wma_2", "title_wma_2", "album_wma_2")