: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))
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
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
"""
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:
# 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')