From 28caa80fbddaca9c7bb83a9d72dfba8130f16e44 Mon Sep 17 00:00:00 2001 From: kaliko Date: Tue, 8 Jun 2021 20:39:15 +0200 Subject: [PATCH] MPD client: Tries to resolve MusicBrainzArtistID when possible (fixed b36c71a) --- sima/lib/meta.py | 13 +++---------- sima/mpdclient.py | 14 +++++++++++--- tests/test_meta.py | 9 +++++++++ 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/sima/lib/meta.py b/sima/lib/meta.py index 5a2305e..e6b9f46 100644 --- a/sima/lib/meta.py +++ b/sima/lib/meta.py @@ -136,12 +136,12 @@ class Meta: :param str other: Alias to add, could be any object with ``__str__`` method. """ + if isinstance(other, Meta): + self.__aliases |= other.__aliases + self.__aliases -= {self.name} if getattr(other, '__str__', None): if callable(other.__str__) and other.__str__() != self.name: self.__aliases |= {other.__str__()} - elif isinstance(other, Meta): - if other.name != self.name: - self.__aliases |= other.__aliases else: raise MetaException('No __str__ method found in {!r}'.format(other)) @@ -158,13 +158,6 @@ class Meta: def mbid(self): return self.__mbid - @mbid.setter - def mbid(self, mbid): - if mbid and not is_uuid4(mbid): - self.log.warning('Wrong mbid %s:%s', self.__name, mbid) - return - self.__mbid = mbid - @property def aliases(self): return self.__aliases diff --git a/sima/mpdclient.py b/sima/mpdclient.py index fbd8cd8..6b5b976 100644 --- a/sima/mpdclient.py +++ b/sima/mpdclient.py @@ -59,7 +59,10 @@ def set_artist_mbid(func): result = func(*args, **kwargs) if Meta.use_mbid: if result and not result.mbid: - result.mbid = cls._find_musicbrainz_artistid(result) + mbid = cls._find_musicbrainz_artistid(result) + artist = Artist(name=result.name, mbid=mbid) + artist.add_alias(result) + return artist return result return wrapper @@ -368,8 +371,13 @@ class MPD(MPDClient): """ if not self.use_mbid: return None - mbids = self.list('MUSICBRAINZ_ARTISTID', - f'(artist == "{artist.name_sz}")') + mbids = None + for name in artist.names_sz: + self.log.debug(name) + filt = f'((artist == "{name}") AND (MUSICBRAINZ_ARTISTID != ""))' + mbids = self.list('MUSICBRAINZ_ARTISTID', filt) + if mbids: + break if not mbids: return None if len(mbids) > 1: diff --git a/tests/test_meta.py b/tests/test_meta.py index b7782b4..aefd339 100644 --- a/tests/test_meta.py +++ b/tests/test_meta.py @@ -56,6 +56,15 @@ class TestMetaObject(unittest.TestCase): # test equality Obj.__name with OgjBis.__aliases self.assertTrue(art0 == Meta(name='A Silver Mt. Zion')) + art1 = Meta(name='Silver Mt. Zion') + art1.add_alias(art0) + self.assertIn('A Silver Mt. Zion', art1.aliases) + + art3 = Meta(name='foo') + art3.add_alias('Silver Mt. Zion') + art1.add_alias(art3) + self.assertNotIn('Silver Mt. Zion', art1.aliases) + def test_union(self): art00 = Meta(name='Aphex Twin', mbid='f22942a1-6f70-4f48-866e-238cb2308fbd') -- 2.39.2