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:
|
if match:
|
||||||
self.discnumber = int(discno_map.get(match.group(), match.group()))
|
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):
|
def __hash__(self):
|
||||||
return hash((hash(self.album), self.title, self.artist,
|
return hash((hash(self.album), self.title, self.artist,
|
||||||
self.tracknumber, self.discnumber))
|
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"))
|
u = tags.Track.add(os.path.join(test_tracks, "01 - Test Track.ogg"))
|
||||||
self.assertIsNone(u)
|
self.assertIsNone(u)
|
||||||
self.assertEqual(len(tags.tag_map), 2)
|
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