README added; </random> made accessible
[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 pickle
24 from random import choice
25
26 app = flask.Flask(__name__)
27
28 class Kot(object):
29     def __init__(self, content='', owner=''):
30         self.content = content
31         self.owner = owner
32         self.uprate = 0
33         self.downrate = 0
34         self.comments = list()
35
36 datafile = open('data.pkl', 'rb')
37 data = pickle.load(datafile)
38 datafile.close()
39
40 def kots_list():
41     listing = list()
42     for kid in data:
43         listing.append({'id': kid, 'kot': data[kid], 'link':
44             flask.url_for('kot', kid=kid)})
45     return listing
46
47 def kots_list_last():
48     ret = list()
49     listing = list(data)
50     listing.sort(reverse=True)
51     listing = listing if len(listing) < 20 else listing[:20]
52     for kid in listing:
53         ret.append({'id': kid, 'kot': data[kid], 'link':
54             flask.url_for('kot', kid=kid)})
55     return ret
56
57 def kots_list_random():
58     ret = list()
59     listing = list(data)
60     work = list()
61     i = 0
62     while i < 20 and len(listing) > 0:
63         item = choice(listing)
64         listing.remove(item)
65         work.append(item)
66         i += 1
67     for kid in work:
68         ret.append({'id': kid, 'kot': data[kid], 'link':
69             flask.url_for('kot', kid=kid)})
70     return ret
71
72 @app.route('/kot/<int:kid>')
73 def kot(kid):
74     return flask.render_template('kot.xhtml', kot=data[kid], kid=kid)
75
76 @app.route('/')
77 @app.route('/index')
78 def index():
79     return flask.render_template('index.xhtml', kots=kots_list())
80
81 @app.route('/last')
82 def last():
83     return flask.render_template('last.xhtml', kots=kots_list_last())
84
85 @app.route('/random')
86 def random():
87     return flask.render_template('random.xhtml',
88             kots=kots_list_random())
89
90 if __name__ == '__main__':
91     app.run(debug=True)