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:
Anna Schumaker 2019-03-07 09:28:04 -05:00
parent 2057721028
commit 99f103d345
2 changed files with 21 additions and 0 deletions

View File

@ -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))

View File

@ -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"])