import re from beets import config from beets.autotag.hooks import AlbumInfo, TrackInfo, Distance from beets.plugins import BeetsPlugin class SearchAPIPlugin(BeetsPlugin): """A beets plugin that lets you set preferences for different metadata sources. """ def __init__(self): super(SearchAPIPlugin, self).__init__() self.config.add({ 'auto': True, # Enables or disables the plugin 'preferred': [ '*' ], }) @property def preferred_sources(self): """Reads the user's preferred sources, parses them as regular expressions and returns a list of the resulting Patterns. """ preferences = self.config['preferred'].get() return [re.compile('.*') if item == '*' else re.compile(item) for item in preferences] def album_distance(self, items, album_info, mapping): """Returns the album distance. """ dist = Distance() dist.add_priority('source', album_info.data_source, self.preferred_sources) return dist def track_distance(self, item, info): """Returns the track distance. """ dist = Distance() dist.add_priority('source', info.data_source, self.preferred_sources) return dist