import random
from collections import deque
+from itertools import dropwhile
from hashlib import md5
# third parties componants
return results
return wrapper
+def blacklist(artist=False, album=False, track=False):
+ #pylint: disable=C0111,W0212
+ field = (artist, album, track)
+ def decorated(func):
+ def wrapper(*args, **kwargs):
+ cls = args[0]
+ boolgen = (bl for bl in field)
+ bl_fun = (cls._Plugin__daemon.sdb.get_bl_artist,
+ cls._Plugin__daemon.sdb.get_bl_album,
+ cls._Plugin__daemon.sdb.get_bl_track,)
+ #bl_getter = next(fn for fn, bl in zip(bl_fun, boolgen) if bl is True)
+ bl_getter = next(dropwhile(lambda _: not next(boolgen), bl_fun))
+ results = func(*args, **kwargs)
+ cls.log.debug('using {0} as bl filter'.format(bl_getter.__name__))
+ for elem in results:
+ if bl_getter(elem, add_not=True):
+ cls.log.info('Blacklisted: {0}'.format(elem))
+ results.remove(elem)
+ return results
+ return wrapper
+ return decorated
+
class Lastfm(Plugin):
"""last.fm similar artists
def _cleanup_cache(self):
"""Avoid bloated cache
"""
- # TODO: call cleanup once its dict instance are used somewhere XXX
for _ , val in self._cache.items():
if isinstance(val, dict):
while len(val) > 150:
' / '.join(art_not_in_hist)))
return art_not_in_hist
+ @blacklist(artist=True)
@cache
def get_artists_from_player(self, similarities):
"""
self.log.debug('Trying to find titles to add for "{}"'.format(
artist))
found = self.player.find_track(artist)
- # find tracks not in history
+ # find tracks not in history for artist
self.filter_track(found)
if len(self.to_add) == nbtracks_target:
break