[SCM] morituri/master: Extract a Credit list subclass to get name/sortname/id

js at users.alioth.debian.org js at users.alioth.debian.org
Sun Oct 19 20:10:09 UTC 2014


The following commit has been merged in the master branch:
commit 3d53056573d18126010faf41bbac064ed024b276
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Tue Jul 30 13:05:17 2013 +0200

    Extract a Credit list subclass to get name/sortname/id

diff --git a/morituri/common/mbngs.py b/morituri/common/mbngs.py
index 100dca9..9543e8b 100644
--- a/morituri/common/mbngs.py
+++ b/morituri/common/mbngs.py
@@ -95,6 +95,43 @@ def _record(record, which, name, what):
         handle.close()
         log.info('mbngs', 'Wrote %s %s to %s', which, name, filename)
 
+# credit is of the form [dict, str, dict, ... ]
+# e.g. [
+#   {'artist': {
+#     'sort-name': 'Sukilove',
+#     'id': '5f4af6cf-a1b8-4e51-a811-befed399a1c6',
+#     'name': 'Sukilove'
+#   }}, ' & ', {
+#   'artist': {
+#     'sort-name': 'Blackie and the Oohoos',
+#     'id': '028a9dc7-f5ef-43c2-866b-08d69ffff363',
+#     'name': 'Blackie & the Oohoos'}}]
+
+
+class _Credit(list):
+    """
+    I am a representation of an artist-credit in musicbrainz for a disc
+    or track.
+    """
+
+    def joiner(self, attributeGetter):
+        res = []
+
+        for item in self:
+            if isinstance(item, dict):
+                res.append(attributeGetter(item))
+            else:
+                res.append(item)
+
+        return "".join(res)
+
+
+    def getSortName(self):
+        return self.joiner(lambda i: i.get('sort-name'))
+
+    def getName(self):
+        return self.joiner(lambda i: i.get('artist').get('name', None))
+
 
 def _getMetadata(releaseShort, release, discid):
     """
@@ -115,7 +152,7 @@ def _getMetadata(releaseShort, release, discid):
     discMD = DiscMetadata()
 
     discMD.releaseType = releaseShort.get('release-group', {}).get('type')
-    credit = release['artist-credit']
+    credit = _Credit(release['artist-credit'])
     # example:
     # [{'artist':
     #    {'sort-name': 'Pixies',
@@ -126,12 +163,7 @@ def _getMetadata(releaseShort, release, discid):
     if len(credit) > 1:
         log.debug('mbngs', 'artist-credit more than 1: %r', credit)
 
-    for i, c in enumerate(credit):
-        if isinstance(c, dict):
-            credit[i] = c.get(
-                'name', c['artist'].get('name', None))
-
-    albumArtistName = "".join(credit)
+    albumArtistName = credit.getName()
 
     # FIXME: is there a better way to check for VA
     discMD.various = False
@@ -175,29 +207,12 @@ def _getMetadata(releaseShort, release, discid):
                 discMD.title = title
                 for t in medium['track-list']:
                     track = TrackMetadata()
-                    credit = t['recording']['artist-credit']
+                    credit = _Credit(t['recording']['artist-credit'])
                     if len(credit) > 1:
                         log.debug('mbngs',
                             'artist-credit more than 1: %r', credit)
-                        # credit is of the form [dict, str, dict, ... ]
-                        # e.g. [
-                        #   {'artist': {
-                        #     'sort-name': 'Sukilove',
-                        #     'id': '5f4af6cf-a1b8-4e51-a811-befed399a1c6',
-                        #     'name': 'Sukilove'
-                        #   }}, ' & ', {
-                        #   'artist': {
-                        #     'sort-name': 'Blackie and the Oohoos',
-                        #     'id': '028a9dc7-f5ef-43c2-866b-08d69ffff363',
-                        #     'name': 'Blackie & the Oohoos'}}]
-                    for i, c in enumerate(credit):
-                        # replace dict with the artist name
-                        if isinstance(c, dict):
-                            credit[i] = c.get(
-                                'name', c['artist'].get('name', None))
-
-
-                    trackArtistName = "".join(credit)
+
+                    trackArtistName = credit.getName()
 
                     if not discArtist:
                         track.artist = discMD.artist
diff --git a/morituri/test/test_common_mbngs.py b/morituri/test/test_common_mbngs.py
index 964049d..a06b958 100644
--- a/morituri/test/test_common_mbngs.py
+++ b/morituri/test/test_common_mbngs.py
@@ -62,6 +62,8 @@ class MetadataTestCase(unittest.TestCase):
         metadata = mbngs._getMetadata({}, response['release'], discid)
 
         self.assertEquals(metadata.artist, u'Isobel Campbell & Mark Lanegan')
+        # FIXME: this should include Mark
+        self.assertEquals(metadata.sortName, u'Campbell, Isobel')
         self.assertEquals(metadata.release, u'2006-01-30')
         # FIXME: this is only Isobel
         self.assertEquals(metadata.mbidArtist,

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list