]> kaliko git repositories - mpd-sima.git/commitdiff
Exposes genres in Track objets
authorkaliko <kaliko@azylum.org>
Sat, 20 Feb 2021 16:22:14 +0000 (17:22 +0100)
committerkaliko <kaliko@azylum.org>
Sat, 20 Feb 2021 16:22:14 +0000 (17:22 +0100)
sima/lib/track.py
tests/test_track.py

index 38f0cab3ec2841ef93c9fb7f1454b91bccdbc8c8..329392c93746c8098cfe6b6fb99b8e63ac59c5a3 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-# Copyright (c) 2009-2017 kaliko <kaliko@azylum.org>
+# Copyright (c) 2009-2021 kaliko <kaliko@azylum.org>
 # Copyright (c) 2009 J. Alexander Treuman (Tag collapse method)
 # Copyright (c) 2008 Rick van Hattem
 #
@@ -66,7 +66,7 @@ class Track:
                 continue
             if isinstance(value, list):
                 self.collapsed_tags.append(tag)
-                self.__dict__.update({tag: SEPARATOR.join(set(value))})
+                self.__dict__.update({tag: SEPARATOR.join(value)})
 
     def __repr__(self):
         return '%s(artist="%s", album="%s", title="%s", file="%s")' % (
@@ -133,6 +133,21 @@ class Track:
             fmt = '%M:%S'
         return time.strftime(fmt, temps)
 
+    @property
+    def genres(self):
+        """Fetches Genres for the track
+        Multivalue genre are dealt with:
+          * when genre tag is multivalued
+          * when single tag uses coma or semi-colon separator
+        """
+        if 'genre' not in self.__dict__:
+            return []
+        genres = self.genre.split(SEPARATOR)
+        for sep in [',', ';']:
+            if sep in self.genre:
+                genres = [g for multi in genres for g in multi.split(sep) if g]
+        return list(map(str.strip, genres))
+
     @property
     def Artist(self):
         """Get the :class:`sima.lib.meta.Artist` associated to this track"""
index 62eb30617f5761c8a0369513cd3aaf591d14a936..438233c5b26ac9f88b56708ae81dda3619fdda11 100644 (file)
@@ -42,4 +42,12 @@ class TestTrackObject(unittest.TestCase):
         trk = Track(artist='track_artist')
         self.assertEqual(trk.Artist.name, 'track_artist')
 
+    def test_genres(self):
+        trk = Track(**{'artist': 'Devolt', 'genre': ['Rock, Stoner ', ' Punk; Heavy', 'doom']})
+        self.assertEqual(trk.genres, ['Rock', 'Stoner', 'Punk', 'Heavy', 'doom'])
+        trk = Track(**{'artist': 'Devolt', 'genre': [' Rock ', ' Stoner ', 'Punk ']})
+        self.assertEqual(trk.genres, ['Rock', 'Stoner', 'Punk'])
+        trk = Track(**{'artist': 'Devolt', 'genre': 'Punk '})
+        self.assertEqual(trk.genres, ['Punk'])
+
 # vim: ai ts=4 sw=4 sts=4 expandtab