post method bound to kot’s URL; refactoring and new pick.node function; minor CSS...
[kot:kot.git] / kot.py
1 #!/usr/bin/python
2 #coding=utf-8
3
4 # Kot: a quote engine for TdCT
5 # Copyright (C) 2011 Paul Bazin
6 #
7 # This file is part of Kot.
8 #
9 # This program is free software: you can redistribute it and/or modify
10 # it under the terms of the GNU General Public License as published by
11 # the Free Software Foundation, either version 3 of the License, or
12 # (at your option) any later version.
13 #
14 # This program is distributed in the hope that it will be useful,
15 # but WITHOUT ANY WARRANTY; without even the implied warranty of
16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 # GNU General Public License for more details.
18 #
19 # You should have received a copy of the GNU General Public License
20 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
21
22 import flask
23 import pick
24 from random import random as rand
25
26 nav = (
27     {'func': 'index', 'label': u'Index'},
28     {'func': 'last', 'label': u'Derniers ajouts'},
29     {'func': 'random', 'label': u'Aléatoire'},
30     {'func': 'top', 'label': u'Top'},
31     {'func': 'zero', 'label': u'Aléatoire > 0'},
32 )
33
34 app = flask.Flask(__name__)
35
36 @app.route('/kot/<ukid>')
37 def kot(ukid):
38     kot = pick.by_id(ukid)
39     if not kot:
40         flask.abort(404)
41     return flask.render_template('kot.xhtml', nav=nav, kot=kot)
42
43 @app.route('/kot/<ukid>', methods=['POST'])
44 def post(ukid):
45     return '<p>%s</p><p>%s</p>' % (flask.request.form['kom'],
46             flask.request.form['poster']) + ukid
47
48 @app.route('/')
49 def root():
50     return flask.redirect(flask.url_for('index'))
51
52 @app.route('/index')
53 def index():
54     return flask.render_template('index.xhtml', nav=nav,
55             kots=pick.index())
56
57 @app.route('/last')
58 def last():
59     return flask.render_template('last.xhtml', nav=nav,
60             kots=pick.by_key(lambda k: k.id))
61
62 @app.route('/random')
63 def random():
64     return flask.render_template('random.xhtml', nav=nav,
65             kots=pick.by_key(lambda k: rand()))
66
67 @app.route('/top')
68 def top():
69     return flask.render_template('top.xhtml', nav=nav,
70             kots=pick.by_key(lambda k: k.rating()))
71
72 @app.route('/zero')
73 def zero():
74     return flask.render_template('zero.xhtml', nav=nav,
75             kots=pick.by_key(lambda k: rand(), lambda k: k.rating() >
76                 0.0))
77
78 @app.route('/rate')
79 def rate():
80     return flask.request.args['kot'] + ('up' if
81             int(flask.request.args['up']) else 'down')
82
83 if __name__ == '__main__':
84     app.run(debug=True)
85