]> kaliko git repositories - mpd-sima.git/blobdiff - sima/lib/player.py
Code convention clean up (pylint)
[mpd-sima.git] / sima / lib / player.py
index cb562b5f9a3735d4a6edc2f72f3d6e15a6f1f0d1..721d9a67e017e2cae2ad040a795669609efeaac4 100644 (file)
 
 # standard library import
 import logging
-from difflib import get_close_matches
+from itertools import dropwhile
 
 # local import
-from .simastr import SimaStr
-from ..utils.leven import levenshtein_ratio
+
+def blacklist(artist=False, album=False, track=False):
+    #pylint: disable=C0111,W0212
+    field = (album, track)
+    def decorated(func):
+        def wrapper(*args, **kwargs):
+            if not args[0].database:
+                return func(*args, **kwargs)
+            cls = args[0]
+            boolgen = (bl for bl in field)
+            bl_fun = (cls.database.get_bl_album,
+                      cls.database.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))
+            #cls.log.debug('using {0} as bl filter'.format(bl_getter.__name__))
+            results = list()
+            for elem in func(*args, **kwargs):
+                if bl_getter(elem, add_not=True):
+                    #cls.log.debug('Blacklisted "{0}"'.format(elem))
+                    continue
+                if track and cls.database.get_bl_album(elem, add_not=True):
+                    # filter album as well in track mode
+                    # (artist have already been)
+                    cls.log.debug('Blacklisted alb. "{0.album}"'.format(elem))
+                    continue
+                results.append(elem)
+            return results
+        return wrapper
+    return decorated
+
 
 class Player(object):
     """Player interface to inherit from.
@@ -69,8 +97,8 @@ class Player(object):
     def find_track(self, artist, title=None):
         """
         Find tracks for a specific artist or filtering with a track title
-            >>> player.find_track('The Beatles')
-            >>> player.find_track('Nirvana', title='Smells Like Teen Spirit')
+            >>> player.find_track(Artist('The Beatles'))
+            >>> player.find_track(Artist('Nirvana'), title='Smells Like Teen Spirit')
 
         Returns a list of Track objects
         """
@@ -85,23 +113,25 @@ class Player(object):
         """
         raise NotImplementedError
 
-    def find_albums(self, artist):
+    def search_albums(self, artist):
         """
         Find albums by artist's name
-            >>> player.find_alums('Nirvana')
+            >>> art = Artist(name='Nirvana')
+            >>> player.search_albums(art)
 
         Returns a list of string objects
         """
         raise NotImplementedError
 
-    def fuzzy_find_artist(self, artist):
+    def search_artist(self, artist):
         """
-        Find artists based on a fuzzy search in the media library
-            >>> bea = player.fuzzy_find_artist('beatles')
-            >>> print(bea)
-            >>> ['The Beatles']
+        Search artists based on a fuzzy search in the media library
+            >>> art = Artist(name='the beatles', mbid=<UUID4>) # mbid optional
+            >>> bea = player.search_artist(art)
+            >>> print(bea.names)
+            >>> ['The Beatles', 'Beatles', 'the beatles']
 
-        Returns a list of strings (artist names)
+        Returns an Artist object
         """
         raise NotImplementedError
 
@@ -115,5 +145,30 @@ class Player(object):
         """
         raise NotImplementedError
 
+    @property
+    def artists(self):
+        #pylint: disable=C0111
+        raise NotImplementedError
+
+    @property
+    def state(self):
+        #pylint: disable=C0111
+        raise NotImplementedError
+
+    @property
+    def current(self):
+        #pylint: disable=C0111
+        raise NotImplementedError
+
+    @property
+    def queue(self):
+        #pylint: disable=C0111
+        raise NotImplementedError
+
+    @property
+    def playlist(self):
+        #pylint: disable=C0111
+        raise NotImplementedError
+
 # VIM MODLINE
 # vim: ai ts=4 sw=4 sts=4 expandtab