From f2d54b31a8da9852fc532cc90b29623eabe27b9d Mon Sep 17 00:00:00 2001 From: kaliko Date: Sat, 20 Feb 2021 17:22:14 +0100 Subject: [PATCH] Exposes genres in Track objets --- sima/lib/track.py | 19 +++++++++++++++++-- tests/test_track.py | 8 ++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/sima/lib/track.py b/sima/lib/track.py index 38f0cab..329392c 100644 --- a/sima/lib/track.py +++ b/sima/lib/track.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -# Copyright (c) 2009-2017 kaliko +# Copyright (c) 2009-2021 kaliko # 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""" diff --git a/tests/test_track.py b/tests/test_track.py index 62eb306..438233c 100644 --- a/tests/test_track.py +++ b/tests/test_track.py @@ -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 -- 2.39.5