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

add a faster MP3.get_many() method

parent f4e9e40b
Branches
No related tags found
No related merge requests found
......@@ -42,7 +42,7 @@ def autocomplete_search():
def songs_fragment():
hashes = request.form.get('h', '')
if hashes:
mp3s = [MP3.query.get(h) for h in hashes.split(',')]
mp3s = MP3.get_many(hashes.split(','))
else:
mp3s = []
return render_template('songs_fragment.html', songs=mp3s)
......
......@@ -69,6 +69,12 @@ class MP3(Base):
data['track_num'] = self.track_num
return data
@classmethod
def get_many(cls, hashes):
order = dict((sha1, idx) for idx, sha1 in enumerate(hashes))
mp3s = cls.query.filter(cls.sha1.in_(hashes))
return sorted(mp3s, key=lambda x: order[x.sha1])
def mark_as_duplicate(self, duplicate_of):
self.state = self.DUPLICATE
self.duplicate_of = duplicate_of
......
......@@ -75,6 +75,17 @@ class MP3Test(DbTestCase):
result_ids = set(x.sha1 for x in results)
self.assertEquals(set(['1001', '1002']), result_ids)
def test_mp3_get_many(self):
for i in range(1, 4):
mp3, _ = create_mp3(unicode(i))
Session.add(mp3)
Session.commit()
hashes = [u'3', u'1', u'2']
results = MP3.get_many(hashes)
result_hashes = [x.sha1 for x in results]
self.assertEquals(hashes, result_hashes)
def test_mp3_get_with_bad_metadata(self):
pass
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment