Skip to content
Snippets Groups Projects
Commit af460b7d authored by ale's avatar ale
Browse files

change autocomplete handler to return data compatible with jquery.autocomplete

parent 06611d57
No related branches found
No related tags found
No related merge requests found
...@@ -8,7 +8,7 @@ from djrandom.model.mp3 import MP3, PlayLog ...@@ -8,7 +8,7 @@ from djrandom.model.mp3 import MP3, PlayLog
from djrandom.model.playlist import Playlist from djrandom.model.playlist import Playlist
from djrandom.model.user import User from djrandom.model.user import User
from djrandom.frontend import app, require_auth, svcs from djrandom.frontend import app, require_auth, svcs
from sqlalchemy import distinct, func from sqlalchemy import func
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
use_xsendfile = 1 use_xsendfile = 1
...@@ -18,18 +18,22 @@ use_xsendfile = 1 ...@@ -18,18 +18,22 @@ use_xsendfile = 1
@require_auth @require_auth
def autocomplete_search(): def autocomplete_search():
results = [] results = []
term = request.args.get('term') term = request.args.get('q')
if not term: if not term:
abort(400) abort(400)
if len(term) < 4: if len(term) > 1:
cache_key = 'autocomplete|%s' % term n_results = int(request.args.get('limit', 50))
cache_key = 'autocomplete|%s|%d' % (term, n_results)
results = svcs['cache'].get(cache_key) results = svcs['cache'].get(cache_key)
if not results: if not results:
possible_artists = Session.query(distinct( artists = Session.query(
MP3.artist)).filter(MP3.artist.like('%s%%' % term)) MP3.artist, func.count('*').label('count')).filter(
results = [x[0] for x in possible_artists] MP3.artist.like('%s%%' % term)).group_by(
MP3.artist).order_by('count desc').limit(n_results)
results = [x[0] for x in artists]
svcs['cache'].set(cache_key, results, timeout=86400) svcs['cache'].set(cache_key, results, timeout=86400)
return jsonify(results=results) return '\n'.join(results)
@app.route('/fragment/songs', methods=['POST']) @app.route('/fragment/songs', methods=['POST'])
......
...@@ -39,15 +39,14 @@ class FrontendViewsTest(WsgiTestCase): ...@@ -39,15 +39,14 @@ class FrontendViewsTest(WsgiTestCase):
views.use_xsendfile = 1 views.use_xsendfile = 1
def test_autocomplete(self): def test_autocomplete(self):
rv = self.app.get('/autocomplete?term=art') rv = self.app.get('/autocomplete?q=art')
self.assertEquals(200, rv.status_code) self.assertEquals(200, rv.status_code)
rv = json.loads(rv.data) rv = rv.data.split('\n')
self.assertTrue('results' in rv) self.assertEquals([u'artist 1', u'artist 2'], rv)
self.assertEquals([u'artist 1', u'artist 2'], rv['results'])
# test twice to hit the cache. # test twice to hit the cache.
rv2 = self.app.get('/autocomplete?term=art') rv2 = self.app.get('/autocomplete?q=art')
rv2 = json.loads(rv2.data) rv2 = rv2.data.split('\n')
self.assertEquals(rv, rv2) self.assertEquals(rv, rv2)
def test_homepage(self): def test_homepage(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment