[SCM] morituri/master: * morituri/common/Makefile.am: * morituri/common/musicbrainzngs.py: * morituri/common/program.py: * morituri/extern/Makefile.am: Use musicbrainz NGS for ripping. Can now rip Weezer, the Blue Album, both discs.

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


The following commit has been merged in the master branch:
commit b5fc509747d55cd0923711d22ff61994d6fda1ac
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date:   Sat Oct 22 15:52:57 2011 +0000

    	* morituri/common/Makefile.am:
    	* morituri/common/musicbrainzngs.py:
    	* morituri/common/program.py:
    	* morituri/extern/Makefile.am:
    	  Use musicbrainz NGS for ripping.
    	  Can now rip Weezer, the Blue Album, both discs.

diff --git a/ChangeLog b/ChangeLog
index 2187f1c..5b70da5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2011-10-22  Thomas Vander Stichele  <thomas at apestaart dot org>
+
+	* morituri/common/Makefile.am:
+	* morituri/common/musicbrainzngs.py:
+	* morituri/common/program.py:
+	* morituri/extern/Makefile.am:
+	  Use musicbrainz NGS for ripping.
+	  Can now rip Weezer, the Blue Album, both discs.
+
 2011-10-20  Thomas Vander Stichele  <thomas at apestaart dot org>
 
 	* morituri/rip/debug.py:
diff --git a/morituri/common/Makefile.am b/morituri/common/Makefile.am
index 5e9b978..71a13e6 100644
--- a/morituri/common/Makefile.am
+++ b/morituri/common/Makefile.am
@@ -12,6 +12,6 @@ morituri_PYTHON = \
 	gstreamer.py \
 	log.py \
 	logcommand.py \
-	musicbrainz.py \
+	musicbrainzngs.py \
 	program.py \
 	renamer.py
diff --git a/morituri/common/musicbrainzngs.py b/morituri/common/musicbrainzngs.py
index 951db55..a4ac957 100644
--- a/morituri/common/musicbrainzngs.py
+++ b/morituri/common/musicbrainzngs.py
@@ -25,6 +25,7 @@ Handles communication with the musicbrainz server using NGS.
 """
 
 import urlparse
+import urllib2
 
 from morituri.common import log
 
@@ -36,6 +37,10 @@ class MusicBrainzException(Exception):
         self.args = (exc, )
         self.exception = exc
 
+class NotFoundException(MusicBrainzException):
+    def __str__(self):
+        return "Disc not found in MusicBrainz"
+
 
 class TrackMetadata(object):
     artist = None
@@ -48,8 +53,10 @@ class TrackMetadata(object):
 
 class DiscMetadata(object):
     """
-    @param release: earliest release date, in YYYY-MM-DD
-    @type  release: unicode
+    @param release:      earliest release date, in YYYY-MM-DD
+    @type  release:      unicode
+    @param title:        title of the disc (with disambiguation)
+    @param releaseTitle: title of the release (without disambiguation)
     """
     artist = None
     sortName = None
@@ -58,6 +65,8 @@ class DiscMetadata(object):
     tracks = None
     release = None
 
+    releaseTitle = None
+
     mbid = None
     mbidArtist = None
 
@@ -111,14 +120,15 @@ def _getMetadata(release, discid):
         for disc in medium['disc-list']:
             if disc['id'] == discid:
                 title = release['title']
+                metadata.releaseTitle = title
                 if release.has_key('disambiguation'):
                     title += " (%s)" % release['disambiguation']
                 count = len(release['medium-list'])
                 if count > 1:
-                    title += ' - Disc %d of %d' % (
+                    title += ' (Disc %d of %d)' % (
                         int(medium['position']), count)
                 if medium.has_key('title'):
-                    title += " - %s" % medium['title']
+                    title += ": %s" % medium['title']
                 metadata.title = title
                 for t in medium['track-list']:
                     track = TrackMetadata()
@@ -177,8 +187,15 @@ def musicbrainz(discid):
 
     results = []
 
-    result = musicbrainz.get_releases_by_discid(discid,
-        includes=["artists", "recordings", "release-groups"])
+    try:
+        result = musicbrainz.get_releases_by_discid(discid,
+            includes=["artists", "recordings", "release-groups"])
+    except musicbrainz.ResponseError, e:
+        if isinstance(e.cause, urllib2.HTTPError):
+            if e.cause.code == 404:
+                raise NotFoundException(e)
+
+        raise MusicBrainzException(e)
 
     # No disc matching this DiscID has been found.
     if len(result) == 0:
diff --git a/morituri/common/program.py b/morituri/common/program.py
index fb05cf7..00f6f76 100644
--- a/morituri/common/program.py
+++ b/morituri/common/program.py
@@ -27,7 +27,7 @@ Common functionality and class for all programs using morituri.
 import os
 import time
 
-from morituri.common import common, log, musicbrainz
+from morituri.common import common, log, musicbrainzngs
 from morituri.result import result
 from morituri.program import cdrdao, cdparanoia
 from morituri.image import image
@@ -224,8 +224,10 @@ class Program(log.Loggable):
 
         for _ in range(0, 4):
             try:
-                metadatas = musicbrainz.musicbrainz(mbdiscid)
-            except musicbrainz.MusicBrainzException, e:
+                metadatas = musicbrainzngs.musicbrainz(mbdiscid)
+            except musicbrainzngs.NotFoundException, e:
+                break
+            except musicbrainzngs.MusicBrainzException, e:
                 print "Warning:", e
                 time.sleep(5)
                 continue
@@ -259,17 +261,23 @@ class Program(log.Loggable):
             metadatas = deltas[lowest]
             if len(metadatas) > 1:
                 artist = metadatas[0].artist
-                title = metadatas[0].title
-                for metadata in metadatas:
-                    assert artist == metadata.artist
-                    assert title == metadata.title
+                releaseTitle = metadatas[0].releaseTitle
+                for i, metadata in enumerate(metadatas):
+                    if not artist == metadata.artist:
+                        self.warning("artist 0: %r and artist %d: %r "
+                            "are not the same" % (
+                                artist, i, metadata.artist))
+                    if not releaseTitle == metadata.releaseTitle:
+                        self.warning("title 0: %r and title %d: %r "
+                            "are not the same" % (
+                                releaseTitle, i, metadata.releaseTitle))
 
                 if (len(deltas.keys()) > 1):
                     print
                     print 'Picked closest match in duration.'
                     print 'Others may be wrong in musicbrainz, please correct.'
                     print 'Artist : %s' % artist
-                    print 'Title :  %s' % title
+                    print 'Title :  %s' % metadatas[0].title
 
             # Select one of the returned releases. We just pick the first one.
             ret = metadatas[0]
diff --git a/morituri/extern/Makefile.am b/morituri/extern/Makefile.am
index 302a4c5..6b0a299 100644
--- a/morituri/extern/Makefile.am
+++ b/morituri/extern/Makefile.am
@@ -26,9 +26,19 @@ task_PYTHON = \
 	task/taskgtk.py \
 	task/gstreamer.py
 
+musicbrainzngsdir = $(PYTHONLIBDIR)/morituri/extern/musicbrainzngs
+
+musicbrainzngs_PYTHON = \
+	musicbrainzngs/__init__.py \
+	musicbrainzngs/musicbrainz.py \
+	musicbrainzngs/mbxml.py
+
+
 EXTRA_DIST = log/test_log.py command/test_command.py command/help2man.py
 
 python-musicbrainz-ngs:
 	git clone https://github.com/thomasvs/python-musicbrainz-ngs.git
 
-all: python-musicbrainz-ngs
+$(top_srcdir)/musicbrainzngs/musicbrainz.py: python-musicbrainz-ngs
+
+all: musicbrainzngs/musicbrainz.py

-- 
morituri packaging



More information about the pkg-multimedia-commits mailing list