From 091a7cdb3eba126a1e41f5cc9d9ef4e6396ae439 Mon Sep 17 00:00:00 2001
From: ale <ale@incal.net>
Date: Sat, 24 Sep 2011 20:17:23 +0100
Subject: [PATCH] actually return random songs on /json/random

---
 server/djrandom/frontend/api_views.py | 12 ++++++++++--
 server/djrandom/model/mp3.py          | 11 +++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/server/djrandom/frontend/api_views.py b/server/djrandom/frontend/api_views.py
index b8a8dbb..4604274 100644
--- a/server/djrandom/frontend/api_views.py
+++ b/server/djrandom/frontend/api_views.py
@@ -165,11 +165,19 @@ def last_uploaded_json():
     return jsonify(results=last_uploaded)
 
 
-@app.route('/json/random', methods=['POST'])
+@app.route('/json/markov', methods=['POST'])
 @require_auth
-def random_json():
+def markov_json():
     n = int(request.form.get('n', 10))
     hashes = request.form.get('h', '').split(',')
     last_song = hashes[-1]
     sequence = svcs['markov'].generate_sequence(last_song, 2, n)
     return jsonify(results=sequence)
+
+
+@app.route('/json/random', methods=['GET'])
+@require_auth
+def random_json():
+    n = int(request.form.get('n', 10))
+    random_songs = [x.sha1 for x in MP3.get_random_songs(n)]
+    return jsonify(results=random_songs)
diff --git a/server/djrandom/model/mp3.py b/server/djrandom/model/mp3.py
index cb2c220..662614e 100644
--- a/server/djrandom/model/mp3.py
+++ b/server/djrandom/model/mp3.py
@@ -42,6 +42,17 @@ class MP3(Base):
         return cls.query.filter_by(ready=True).order_by(
             desc(cls.uploaded_at)).limit(n)
 
+    @classmethod
+    def get_random_songs(cls, n=10):
+        """Return N completely random songs."""
+        results = []
+        num_songs = cls.query.filter_by(ready=True).count()
+        for idx in xrange(n):
+            song = cls.query.filter_by(ready=True).limit(1).offset(
+                random.randint(num_songs)).one()
+            results.append(song)
+        return results
+
 
 class PlayLog(Base):
 
-- 
GitLab