diff --git a/server/djrandom/database.py b/server/djrandom/database.py index 14d09e2c2d2440b3e04057038a75fbddc849c036..dc5f4cb6c441af2a9b290a716221a1e150b28442 100644 --- a/server/djrandom/database.py +++ b/server/djrandom/database.py @@ -18,6 +18,7 @@ class SetTextFactory(PoolListener): def init_db(uri): + # Import all ORM modules here, so that 'create_all' can find them. from djrandom.model import mp3, playlist engine = create_engine(uri, listeners=[SetTextFactory()], pool_recycle=1800) diff --git a/server/djrandom/frontend/api_views.py b/server/djrandom/frontend/api_views.py index 05d9ba2651526f022e25929dc48cee6ad392a4e4..461724be4c9abb7ff8796c1bfcf1df69cf84510e 100644 --- a/server/djrandom/frontend/api_views.py +++ b/server/djrandom/frontend/api_views.py @@ -4,7 +4,7 @@ from flask import Flask, request, Response, abort, jsonify, render_template, g from flask.helpers import send_file from djrandom import utils from djrandom.database import Session -from djrandom.model.mp3 import MP3, PlayLog +from djrandom.model.mp3 import MP3, PlayLog, SearchLog from djrandom.model.playlist import Playlist from djrandom.frontend import app, svcs, require_auth from sqlalchemy import distinct @@ -131,6 +131,10 @@ def search_json(): resultiter = svcs['searcher'].search(query, n=num_results) results = [{'score': score, 'sha1': sha1} for (score, sha1) in resultiter] + if results: + # Save this query in the search log. + Session.add(SearchLog.add(query, g.userid)) + Session.commit() return jsonify(results=results) diff --git a/server/djrandom/model/mp3.py b/server/djrandom/model/mp3.py index 0e570ab3bbe4369a7ca649c5192de94f6962c738..783288687a90dd56e6a4a6a01405157c8fbe4a44 100644 --- a/server/djrandom/model/mp3.py +++ b/server/djrandom/model/mp3.py @@ -1,4 +1,5 @@ from sqlalchemy import * +from datetime import datetime from djrandom.database import Base @@ -63,3 +64,16 @@ class PlayLog(Base): hashes = [None] * n yield (plog.sha1, hashes) + +class SearchLog(Base): + + __tablename__ = 'searchlog' + + userid = Column(String(40), index=True) + query = Column(String(256)) + stamp = Column(DateTime()) + + @classmethod + def add(cls, query_str, userid): + return cls(query=query_str, userid=userid, stamp=datetime.now()) +