curds: Make Tracks indexable
This lets us convert string fields into the corresponding track tag. I intend to use this so playlists can have a custom sort function. I eventually intend to add the matching __setitem__() function for changing tags. Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
parent
2057721028
commit
99f103d345
|
@ -55,6 +55,12 @@ class Track(Tag):
|
|||
if match:
|
||||
self.discnumber = int(discno_map.get(match.group(), match.group()))
|
||||
|
||||
def __getitem__(self, key):
|
||||
item = vars(self).get(key)
|
||||
if not item or item == self.album:
|
||||
item = vars(self.album).get(key)
|
||||
return item
|
||||
|
||||
def __hash__(self):
|
||||
return hash((hash(self.album), self.title, self.artist,
|
||||
self.tracknumber, self.discnumber))
|
||||
|
|
|
@ -61,3 +61,18 @@ class TestTrackTag(unittest.TestCase):
|
|||
u = tags.Track.add(os.path.join(test_tracks, "01 - Test Track.ogg"))
|
||||
self.assertIsNone(u)
|
||||
self.assertEqual(len(tags.tag_map), 2)
|
||||
|
||||
def test_track_getitem(self):
|
||||
p = [ test_tracks, "01 - Test Track.ogg" ]
|
||||
t = tags.Track(os.path.join(*p))
|
||||
self.assertEqual(t["path"], os.path.join(*p))
|
||||
self.assertEqual(t["title"], "Test Track")
|
||||
self.assertEqual(t["artist"], "Test Artist")
|
||||
self.assertEqual(t["tracknumber"], 1)
|
||||
self.assertEqual(t["discnumber"], 1)
|
||||
self.assertEqual(t["length"], 10)
|
||||
self.assertEqual(t["album"], "Test Album")
|
||||
self.assertEqual(t["date"], 2019)
|
||||
self.assertEqual(t["genre"], "Test")
|
||||
self.assertEqual(t["albumartist"], "Test Artist")
|
||||
self.assertIsNone(t["nokey"])
|
||||
|
|
Loading…
Reference in New Issue