From 99f103d345f691065dae53b022f6ece04e4e972f Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Thu, 7 Mar 2019 09:28:04 -0500 Subject: [PATCH] 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 --- curds/tags.py | 6 ++++++ curds/test_tags_track.py | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/curds/tags.py b/curds/tags.py index 3f8dc0e..2c0835b 100644 --- a/curds/tags.py +++ b/curds/tags.py @@ -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)) diff --git a/curds/test_tags_track.py b/curds/test_tags_track.py index edb64be..99fe76c 100644 --- a/curds/test_tags_track.py +++ b/curds/test_tags_track.py @@ -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"])