backends: Make search/find_exact take a query dict instead of kwargs

This commit is contained in:
Stein Magnus Jodal 2013-03-30 22:14:33 +01:00
parent 0c05d7c60e
commit 1704828504
5 changed files with 38 additions and 21 deletions

View File

@ -53,7 +53,7 @@ class BaseLibraryProvider(object):
def __init__(self, backend):
self.backend = backend
def find_exact(self, **query):
def find_exact(self, query=None):
"""
See :meth:`mopidy.core.LibraryController.find_exact`.
@ -77,7 +77,7 @@ class BaseLibraryProvider(object):
"""
pass
def search(self, **query):
def search(self, query=None):
"""
See :meth:`mopidy.core.LibraryController.search`.

View File

@ -35,7 +35,9 @@ class LocalLibraryProvider(base.BaseLibraryProvider):
logger.debug('Failed to lookup %r', uri)
return []
def find_exact(self, **query):
def find_exact(self, query=None):
if query is None:
query = {}
self._validate_query(query)
result_tracks = self._uri_mapping.values()
@ -72,7 +74,9 @@ class LocalLibraryProvider(base.BaseLibraryProvider):
raise LookupError('Invalid lookup field: %s' % field)
return SearchResult(uri='file:search', tracks=result_tracks)
def search(self, **query):
def search(self, query=None):
if query is None:
query = {}
self._validate_query(query)
result_tracks = self._uri_mapping.values()

View File

@ -62,8 +62,8 @@ class SpotifyTrack(Track):
class SpotifyLibraryProvider(base.BaseLibraryProvider):
def find_exact(self, **query):
return self.search(**query)
def find_exact(self, query=None):
return self.search(query=query)
def lookup(self, uri):
try:
@ -131,7 +131,7 @@ class SpotifyLibraryProvider(base.BaseLibraryProvider):
def refresh(self, uri=None):
pass # TODO
def search(self, **query):
def search(self, query=None):
if not query:
return self._get_all_tracks()

View File

@ -43,7 +43,8 @@ class LibraryController(object):
"""
query = query or kwargs
futures = [
b.library.find_exact(**query) for b in self.backends.with_library]
b.library.find_exact(query=query)
for b in self.backends.with_library]
return [result for result in pykka.get_all(futures) if result]
def lookup(self, uri):
@ -106,5 +107,5 @@ class LibraryController(object):
"""
query = query or kwargs
futures = [
b.library.search(**query) for b in self.backends.with_library]
b.library.search(query=query) for b in self.backends.with_library]
return [result for result in pykka.get_all(futures) if result]

View File

@ -87,8 +87,10 @@ class CoreLibraryTest(unittest.TestCase):
self.assertIn(result1, result)
self.assertIn(result2, result)
self.library1.find_exact.assert_called_once_with(any=['a'])
self.library2.find_exact.assert_called_once_with(any=['a'])
self.library1.find_exact.assert_called_once_with(
query=dict(any=['a']))
self.library2.find_exact.assert_called_once_with(
query=dict(any=['a']))
def test_find_exact_filters_out_none(self):
track1 = Track(uri='dummy1:a')
@ -103,8 +105,10 @@ class CoreLibraryTest(unittest.TestCase):
self.assertIn(result1, result)
self.assertNotIn(None, result)
self.library1.find_exact.assert_called_once_with(any=['a'])
self.library2.find_exact.assert_called_once_with(any=['a'])
self.library1.find_exact.assert_called_once_with(
query=dict(any=['a']))
self.library2.find_exact.assert_called_once_with(
query=dict(any=['a']))
def test_find_accepts_query_dict_instead_of_kwargs(self):
track1 = Track(uri='dummy1:a')
@ -121,8 +125,10 @@ class CoreLibraryTest(unittest.TestCase):
self.assertIn(result1, result)
self.assertIn(result2, result)
self.library1.find_exact.assert_called_once_with(any=['a'])
self.library2.find_exact.assert_called_once_with(any=['a'])
self.library1.find_exact.assert_called_once_with(
query=dict(any=['a']))
self.library2.find_exact.assert_called_once_with(
query=dict(any=['a']))
def test_search_combines_results_from_all_backends(self):
track1 = Track(uri='dummy1:a')
@ -139,8 +145,10 @@ class CoreLibraryTest(unittest.TestCase):
self.assertIn(result1, result)
self.assertIn(result2, result)
self.library1.search.assert_called_once_with(any=['a'])
self.library2.search.assert_called_once_with(any=['a'])
self.library1.search.assert_called_once_with(
query=dict(any=['a']))
self.library2.search.assert_called_once_with(
query=dict(any=['a']))
def test_search_filters_out_none(self):
track1 = Track(uri='dummy1:a')
@ -155,8 +163,10 @@ class CoreLibraryTest(unittest.TestCase):
self.assertIn(result1, result)
self.assertNotIn(None, result)
self.library1.search.assert_called_once_with(any=['a'])
self.library2.search.assert_called_once_with(any=['a'])
self.library1.search.assert_called_once_with(
query=dict(any=['a']))
self.library2.search.assert_called_once_with(
query=dict(any=['a']))
def test_search_accepts_query_dict_instead_of_kwargs(self):
track1 = Track(uri='dummy1:a')
@ -173,5 +183,7 @@ class CoreLibraryTest(unittest.TestCase):
self.assertIn(result1, result)
self.assertIn(result2, result)
self.library1.search.assert_called_once_with(any=['a'])
self.library2.search.assert_called_once_with(any=['a'])
self.library1.search.assert_called_once_with(
query=dict(any=['a']))
self.library2.search.assert_called_once_with(
query=dict(any=['a']))