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__() config.add({ 'preferred_sources': [ '*' ], }) @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 = config['preferred_sources'].as_str_seq() 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