From 2bd1f043ceacfcd951f4bdcb68a2a36207e7c4cc Mon Sep 17 00:00:00 2001 From: Lasse Bigum Date: Sat, 9 Nov 2013 03:01:53 +0100 Subject: [PATCH] Updated code with new multiple artist handling and added tests --- mopidy/audio/scan.py | 22 ++++++++++++++----- tests/audio/scan_test.py | 47 +++++++++++++++++++++++++++++++++++----- 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/mopidy/audio/scan.py b/mopidy/audio/scan.py index b0ddc2af..8499f73c 100644 --- a/mopidy/audio/scan.py +++ b/mopidy/audio/scan.py @@ -146,16 +146,26 @@ def audio_data_to_track(data): if albumartist_kwargs: album_kwargs['artists'] = [Artist(**albumartist_kwargs)] - if composer_kwargs: - track_kwargs['composers'] = [Artist(**composer_kwargs)] - - if performer_kwargs: - track_kwargs['performers'] = [Artist(**performer_kwargs)] - track_kwargs['uri'] = data['uri'] track_kwargs['last_modified'] = int(data['mtime']) track_kwargs['length'] = data[gst.TAG_DURATION] // gst.MSECOND track_kwargs['album'] = Album(**album_kwargs) track_kwargs['artists'] = [Artist(**artist_kwargs)] + if ('name' in composer_kwargs + and not isinstance(composer_kwargs['name'], basestring)): + track_kwargs['composers'] = [Artist(name=artist) + for artist in composer_kwargs['name']] + else: + track_kwargs['composers'] = \ + [Artist(**composer_kwargs)] if composer_kwargs else '' + + if ('name' in performer_kwargs + and not isinstance(performer_kwargs['name'], basestring)): + track_kwargs['performers'] = [Artist(name=artist) + for artist in performer_kwargs['name']] + else: + track_kwargs['performers'] = \ + [Artist(**performer_kwargs)] if performer_kwargs else '' + return Track(**track_kwargs) diff --git a/tests/audio/scan_test.py b/tests/audio/scan_test.py index 3587ac1c..bea34d0b 100644 --- a/tests/audio/scan_test.py +++ b/tests/audio/scan_test.py @@ -55,14 +55,26 @@ class TranslatorTest(unittest.TestCase): 'musicbrainz_id': 'mbartistid', } - self.composer = { + self.composer_single = { 'name': 'composer', } - self.performer = { + self.composer_multiple = { + 'name': ['composer1', 'composer2'], + } + + self.composer = self.composer_single + + self.performer_single = { 'name': 'performer', } + self.performer_multiple = { + 'name': ['performer1', 'performer2'], + } + + self.performer = self.performer_single + self.albumartist = { 'name': 'albumartistname', 'musicbrainz_id': 'mbalbumartistid', @@ -86,10 +98,23 @@ class TranslatorTest(unittest.TestCase): self.album['artists'] = [Artist(**self.albumartist)] self.track['album'] = Album(**self.album) self.track['artists'] = [Artist(**self.artist)] - if self.composer: - self.track['composers'] = [Artist(**self.composer)] - if self.performer: - self.track['performers'] = [Artist(**self.performer)] + + if ('name' in self.composer + and not isinstance(self.composer['name'], basestring)): + self.track['composers'] = [Artist(name=artist) + for artist in self.composer['name']] + else: + self.track['composers'] = [Artist(**self.composer)] \ + if self.composer else '' + + if ('name' in self.performer + and not isinstance(self.performer['name'], basestring)): + self.track['performers'] = [Artist(name=artist) + for artist in self.performer['name']] + else: + self.track['performers'] = [Artist(**self.performer)] \ + if self.performer else '' + return Track(**self.track) def check(self): @@ -140,6 +165,16 @@ class TranslatorTest(unittest.TestCase): del self.composer['name'] self.check() + def test_multiple_track_composers(self): + self.data['composer'] = ['composer1', 'composer2'] + self.composer = self.composer_multiple + self.check() + + def test_multiple_track_performers(self): + self.data['performer'] = ['performer1', 'performer2'] + self.performer = self.performer_multiple + self.check() + def test_missing_performer_name(self): del self.data['performer'] del self.performer['name']