mirror of
https://github.com/beetbox/beets.git
synced 2025-12-06 16:42:42 +01:00
Add 'look before you leap' defensive code.
This commit is contained in:
parent
db7ef0e60e
commit
f98010ad23
1 changed files with 20 additions and 12 deletions
|
|
@ -150,9 +150,11 @@ class BeatportClient(object):
|
||||||
:rtype: :py:class:`BeatportRelease`
|
:rtype: :py:class:`BeatportRelease`
|
||||||
"""
|
"""
|
||||||
response = self._get('/catalog/3/releases', id=beatport_id)
|
response = self._get('/catalog/3/releases', id=beatport_id)
|
||||||
release = BeatportRelease(response[0])
|
if response:
|
||||||
release.tracks = self.get_release_tracks(beatport_id)
|
release = BeatportRelease(response[0])
|
||||||
return release
|
release.tracks = self.get_release_tracks(beatport_id)
|
||||||
|
return release
|
||||||
|
return None
|
||||||
|
|
||||||
def get_release_tracks(self, beatport_id):
|
def get_release_tracks(self, beatport_id):
|
||||||
""" Get all tracks for a given release.
|
""" Get all tracks for a given release.
|
||||||
|
|
@ -261,10 +263,10 @@ class BeatportTrack(BeatportObject):
|
||||||
self.musical_key = six.text_type(data['key'].get('shortName'))
|
self.musical_key = six.text_type(data['key'].get('shortName'))
|
||||||
|
|
||||||
# Use 'subgenre' and if not present, 'genre' as a fallback.
|
# Use 'subgenre' and if not present, 'genre' as a fallback.
|
||||||
if 'subGenres' in data:
|
if 'subGenres' in data and data['subGenres']:
|
||||||
self.genre = six.text_type(data['subGenres'][0].get('name'))
|
self.genre = six.text_type(data['subGenres'][0].get('name'))
|
||||||
if not self.genre and 'genres' in data:
|
elif 'genres' in data and data['genres']:
|
||||||
self.genre = six.text_type(data['genres'][0].get('name'))
|
self.genre = six.text_type(data['genres'][0].get('name'))
|
||||||
|
|
||||||
|
|
||||||
class BeatportPlugin(BeetsPlugin):
|
class BeatportPlugin(BeetsPlugin):
|
||||||
|
|
@ -375,27 +377,33 @@ class BeatportPlugin(BeetsPlugin):
|
||||||
|
|
||||||
def album_for_id(self, release_id):
|
def album_for_id(self, release_id):
|
||||||
"""Fetches a release by its Beatport ID and returns an AlbumInfo object
|
"""Fetches a release by its Beatport ID and returns an AlbumInfo object
|
||||||
or None if the release is not found.
|
or None if the query is not a valid ID or release is not found.
|
||||||
"""
|
"""
|
||||||
self._log.debug(u'Searching for release {0}', release_id)
|
self._log.debug(u'Searching for release {0}', release_id)
|
||||||
match = re.search(r'(^|beatport\.com/release/.+/)(\d+)$', release_id)
|
match = re.search(r'(^|beatport\.com/release/.+/)(\d+)$', release_id)
|
||||||
if not match:
|
if not match:
|
||||||
|
self._log.debug(u'Not a valid Beatport release ID.')
|
||||||
return None
|
return None
|
||||||
release = self.client.get_release(match.group(2))
|
release = self.client.get_release(match.group(2))
|
||||||
album = self._get_album_info(release)
|
if release is not None:
|
||||||
return album
|
album = self._get_album_info(release)
|
||||||
|
return album
|
||||||
|
return None
|
||||||
|
|
||||||
def track_for_id(self, track_id):
|
def track_for_id(self, track_id):
|
||||||
"""Fetches a track by its Beatport ID and returns a TrackInfo object
|
"""Fetches a track by its Beatport ID and returns a TrackInfo object
|
||||||
or None if the track is not found.
|
or None if the track is not a valid Beatport ID or track is not found.
|
||||||
"""
|
"""
|
||||||
self._log.debug(u'Searching for track {0}', track_id)
|
self._log.debug(u'Searching for track {0}', track_id)
|
||||||
match = re.search(r'(^|beatport\.com/track/.+/)(\d+)$', track_id)
|
match = re.search(r'(^|beatport\.com/track/.+/)(\d+)$', track_id)
|
||||||
if not match:
|
if not match:
|
||||||
|
self._log.debug(u'Not a valid Beatport track ID.')
|
||||||
return None
|
return None
|
||||||
bp_track = self.client.get_track(match.group(2))
|
bp_track = self.client.get_track(match.group(2))
|
||||||
track = self._get_track_info(bp_track)
|
if bp_track is not None:
|
||||||
return track
|
track = self._get_track_info(bp_track)
|
||||||
|
return track
|
||||||
|
return None
|
||||||
|
|
||||||
def _get_releases(self, query):
|
def _get_releases(self, query):
|
||||||
"""Returns a list of AlbumInfo objects for a beatport search query.
|
"""Returns a list of AlbumInfo objects for a beatport search query.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue