From f36c55f7306606de0f27e9f8eea33425738dfcc8 Mon Sep 17 00:00:00 2001 From: J0J0 Todos Date: Mon, 17 Oct 2022 11:20:27 +0200 Subject: [PATCH] Refactor Beatport plugin to use _get_id from MetadataSourcePlugin and save beatport_id_regex in id_extractors module. This streamlines the Beatport release ID extraction magic with plugins Deezer and Spotify. --- beets/util/id_extractors.py | 5 +++++ beetsplug/beatport.py | 10 +++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/beets/util/id_extractors.py b/beets/util/id_extractors.py index d486db9a3..cbc4cef97 100644 --- a/beets/util/id_extractors.py +++ b/beets/util/id_extractors.py @@ -28,6 +28,11 @@ deezer_id_regex = { 'match_group': 4, } +beatport_id_regex = { + 'pattern': r'(^|beatport\.com/release/.+/)(\d+)$', + 'match_group': 2, +} + def extract_discogs_id_regex(album_id): """Returns the Discogs_id or None.""" diff --git a/beetsplug/beatport.py b/beetsplug/beatport.py index 133441d7e..eabf5dc31 100644 --- a/beetsplug/beatport.py +++ b/beetsplug/beatport.py @@ -28,6 +28,7 @@ import beets.ui from beets.autotag.hooks import AlbumInfo, TrackInfo from beets.plugins import BeetsPlugin, MetadataSourcePlugin, get_distance import confuse +from beets.util.id_extractors import beatport_id_regex AUTH_ERRORS = (TokenRequestDenied, TokenMissing, VerifierMissing) @@ -267,6 +268,7 @@ class BeatportTrack(BeatportObject): class BeatportPlugin(BeetsPlugin): data_source = 'Beatport' + id_regex = beatport_id_regex def __init__(self): super().__init__() @@ -380,11 +382,13 @@ class BeatportPlugin(BeetsPlugin): or None if the query is not a valid ID or release is not found. """ self._log.debug('Searching for release {0}', release_id) - match = re.search(r'(^|beatport\.com/release/.+/)(\d+)$', release_id) - if not match: + + release_id = self._get_id('album', release_id, self.id_regex) + if release_id is None: self._log.debug('Not a valid Beatport release ID.') return None - release = self.client.get_release(match.group(2)) + + release = self.client.get_release(release_id) if release: return self._get_album_info(release) return None