diff --git a/beets/autotag/mb.py b/beets/autotag/mb.py index 097840f85..bd0d5cae3 100644 --- a/beets/autotag/mb.py +++ b/beets/autotag/mb.py @@ -25,6 +25,7 @@ import re import time import logging import musicbrainz2.webservice as mbws +import httplib from musicbrainz2.model import Release from threading import Lock from musicbrainz2.model import VARIOUS_ARTISTS_ID @@ -93,6 +94,8 @@ def _query_wrap(fun, *args, **kwargs): # Malformed response from server. log.error('Bad response from MusicBrainz: ' + str(exc)) raise BadResponseError() + except httplib.BadStatusLine: + log.warn('Bad HTTP status line from MusicBrainz') except mbws.WebServiceError, e: # Server busy. Retry. message = str(e.reason) diff --git a/test/test_mb.py b/test/test_mb.py index a1684f368..30e0c8aea 100644 --- a/test/test_mb.py +++ b/test/test_mb.py @@ -19,6 +19,7 @@ import unittest import time import musicbrainz2.model import musicbrainz2.webservice as mbws +import httplib import _common from beets.autotag import mb @@ -85,6 +86,10 @@ class MBQueryErrorTest(unittest.TestCase): exc = mbws.WebServiceError(reason=Exception('Error 504')) mb._query_wrap(raise_once_func(exc)) + def test_status_line_error_retries(self): + exc = httplib.BadStatusLine('dummy') + mb._query_wrap(raise_once_func(exc)) + def test_999_error_passes_through(self): exc = mbws.WebServiceError(reason=Exception('Error 999')) with self.assertRaises(mbws.WebServiceError):