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
from djrandom.model.playlist import Playlist
from djrandom.model.user import User
from djrandom.frontend import app, require_auth, svcs
from sqlalchemy import distinct, func
from sqlalchemy import func
log = logging.getLogger(__name__)
use_xsendfile = 1
......@@ -18,18 +18,22 @@ use_xsendfile = 1
@require_auth
def autocomplete_search():
results = []
term = request.args.get('term')
term = request.args.get('q')
if not term:
abort(400)
if len(term) < 4:
cache_key = 'autocomplete|%s' % term
if len(term) > 1:
n_results = int(request.args.get('limit', 50))
cache_key = 'autocomplete|%s|%d' % (term, n_results)
results = svcs['cache'].get(cache_key)
if not results:
possible_artists = Session.query(distinct(
MP3.artist)).filter(MP3.artist.like('%s%%' % term))
results = [x[0] for x in possible_artists]
artists = Session.query(
MP3.artist, func.count('*').label('count')).filter(
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)
return jsonify(results=results)
return '\n'.join(results)
@app.route('/fragment/songs', methods=['POST'])
......
......@@ -39,15 +39,14 @@ class FrontendViewsTest(WsgiTestCase):
views.use_xsendfile = 1
def test_autocomplete(self):
rv = self.app.get('/autocomplete?term=art')
rv = self.app.get('/autocomplete?q=art')
self.assertEquals(200, rv.status_code)
rv = json.loads(rv.data)
self.assertTrue('results' in rv)
self.assertEquals([u'artist 1', u'artist 2'], rv['results'])
rv = rv.data.split('\n')
self.assertEquals([u'artist 1', u'artist 2'], rv)
# test twice to hit the cache.
rv2 = self.app.get('/autocomplete?term=art')
rv2 = json.loads(rv2.data)
rv2 = self.app.get('/autocomplete?q=art')
rv2 = rv2.data.split('\n')
self.assertEquals(rv, rv2)
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