Fix artist name (#156)

* Use artist-credit->name

Use artist-credit->name, if it exists. Otherwise use artist-credit->artist->name.

* Add test case

* Fix for PEP8

* transform comment to docstring

* reject 'recording artist name' in favour of 'release artist name'

* reject 'recording artist name' in favour of 'release artist name'
This commit is contained in:
gorgobacka
2017-09-14 22:25:28 +02:00
committed by JoeLametta
parent 158fab278f
commit 7ae27de32b
4 changed files with 85 additions and 2 deletions

View File

@@ -135,7 +135,8 @@ class _Credit(list):
return self.joiner(lambda i: i.get('artist').get('sort-name', None))
def getName(self):
return self.joiner(lambda i: i.get('artist').get('name', None))
return self.joiner(lambda i: i.get('name',
i.get('artist').get('name', None)))
def getIds(self):
return self.joiner(lambda i: i.get('artist').get('id', None),
@@ -214,7 +215,9 @@ def _getMetadata(releaseShort, release, discid, country=None):
discMD.title = title
for t in medium['track-list']:
track = TrackMetadata()
trackCredit = _Credit(t['recording']['artist-credit'])
trackCredit = _Credit(
t.get('artist-credit', t['recording']['artist-credit']
))
if len(trackCredit) > 1:
logger.debug('artist-credit more than 1: %r',
trackCredit)

View File

@@ -114,3 +114,81 @@ class MetadataTestCase(unittest.TestCase):
';ec07a209-55ff-4084-bc41-9d4d1764e075'
';f626b92e-07b1-4a19-ad13-c09d690db66c'
)
def testNorthernGateway(self):
"""
check the received metadata for artists tagged with [unknown]
and artists tagged with an alias in MusicBrainz
see https://github.com/JoeLametta/whipper/issues/155
"""
filename = 'whipper.release.38b05c7d-65fe-4dc0-9c10-33a391b86703.json'
path = os.path.join(os.path.dirname(__file__), filename)
handle = open(path, "rb")
response = json.loads(handle.read())
handle.close()
discid = "rzGHHqfPWIq1GsOLhhlBcZuqo.I-"
metadata = mbngs._getMetadata({}, response['release'], discid)
self.assertEquals(metadata.artist, u'Various Artists')
self.assertEquals(metadata.release, u'2010')
self.assertEquals(metadata.mbidArtist,
u'89ad4ac3-39f7-470e-963a-56509c546377')
self.assertEquals(len(metadata.tracks), 10)
track2 = metadata.tracks[1]
self.assertEquals(track2.artist, u'Twisted Reaction feat. Danielle')
self.assertEquals(track2.sortName,
u'Twisted Reaction feat. [unknown]')
self.assertEquals(track2.mbidArtist,
u'4f69f624-73ea-4a16-b822-bd2ca58032bf'
';125ec42a-7229-4250-afc5-e057484327fe'
)
track4 = metadata.tracks[3]
self.assertEquals(track4.artist, u'BioGenesis')
self.assertEquals(track4.sortName,
u'Bio Genesis')
self.assertEquals(track4.mbidArtist,
u'dd61b86c-c015-43e1-9a28-58fceb0975c8'
)
def testNenaAndKimWildSingle(self):
"""
check the received metadata for artists that differ between
named on release and named in recording
"""
filename = 'whipper.release.f484a9fc-db21-4106-9408-bcd105c90047.json'
path = os.path.join(os.path.dirname(__file__), filename)
handle = open(path, "rb")
response = json.loads(handle.read())
handle.close()
discid = "X2c2IQ5vUy5x6Jh7Xi_DGHtA1X8-"
metadata = mbngs._getMetadata({}, response['release'], discid)
self.assertEquals(metadata.artist, u'Nena & Kim Wilde')
self.assertEquals(metadata.release, u'2003-05-19')
self.assertEquals(metadata.mbidArtist,
u'38bfaa7f-ee98-48cb-acd0-946d7aeecd76'
';4b462375-c508-432a-8c88-ceeec38b16ae')
self.assertEquals(len(metadata.tracks), 4)
track1 = metadata.tracks[0]
self.assertEquals(track1.artist, u'Nena & Kim Wilde')
self.assertEquals(track1.sortName, u'Nena & Wilde, Kim')
self.assertEquals(track1.mbidArtist,
u'38bfaa7f-ee98-48cb-acd0-946d7aeecd76'
';4b462375-c508-432a-8c88-ceeec38b16ae')
track2 = metadata.tracks[1]
self.assertEquals(track2.artist, u'Nena & Kim Wilde')
self.assertEquals(track2.sortName, u'Nena & Wilde, Kim')
self.assertEquals(track2.mbidArtist,
u'38bfaa7f-ee98-48cb-acd0-946d7aeecd76'
';4b462375-c508-432a-8c88-ceeec38b16ae')

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long