diff --git a/app.py b/app.py index 6a6004b..12d9e05 100644 --- a/app.py +++ b/app.py @@ -1,6 +1,8 @@ -from flask import Flask, g, render_template +from flask import Flask, g, render_template, Response import psycopg2 import urllib +import random +import json from markupsafe import Markup @@ -34,24 +36,54 @@ def urlencode_filter(s): return Markup(s) -@app.route('/terms') -@app.route('/') -def list_terms(): +def _get_terms(): cur = g.db.cursor() cur.execute("select _term._name, count(_entry._text) from _term left join _entry on _entry._term_oid = _term._oid group by _term._oid order by _term._name") terms = [(t[0].decode('utf-8'), t[1]) for t in cur.fetchall()] cur.close() - return render_template('terms.html', terms=terms) + return terms -@app.route('/term/') -def show_term(term): +def _get_entries(term): cur = g.db.cursor() cur.execute('select _entry._text, _entry._added_at, _entry._added_by from _term left join _entry on _entry._term_oid = _term._oid where lower(_term._name) = lower(%s) order by _entry._added_at', [term,]) entries = [(e[0].decode('utf-8'), e[1], e[2]) for e in cur.fetchall()] cur.close() + return entries + + +@app.route('/terms') +@app.route('/') +def list_terms(): + terms = _get_terms() + return render_template('terms.html', terms=terms) + +@app.route('/terms.json') +def list_terms_json(): + terms = _get_terms() + return Response(response=json.dumps(terms), mimetype="application/json") + + +@app.route('/term/') +def show_term(term): + entries = _get_entries(term) return render_template('term.html', entries=entries, term=term) +@app.route('/term.json/') +def show_term_json(term): + entries = _get_entries(term) + entries = [{'entry': e[0], 'added': e[1].strftime("%s"), 'author': e[2]} for e in entries] + return Response(response=json.dumps(entries), mimetype="application/json") + + +@app.route('/randomterm.json/') +def show_term_random_json(term): + entries = _get_entries(term) + entries = [{'entry': e[0], 'added': e[1].strftime("%s"), 'author': e[2]} for e in entries] + entry = random.choice(entries) + return Response(response=json.dumps(entry), mimetype="application/json") + + if __name__ == "__main__": app.run(debug=True)