-
Notifications
You must be signed in to change notification settings - Fork 0
/
proverbaro_web.py
86 lines (67 loc) · 2.42 KB
/
proverbaro_web.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import logging
from flask import Flask, render_template, request
from flask.ext.sqlalchemy import SQLAlchemy
from translation_util import find_definition, split_proverb_into_words
from collections import OrderedDict
from datetime import timedelta
from model import init_model
FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
logging.basicConfig(filename='proverbaro.log', format=FORMAT)
console = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(name)s: %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)
logger = logging.getLogger(__name__)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///proverbaro.db'
db = SQLAlchemy(app)
model = init_model(db.Model)
@app.route('/<date>/<int:publish_id>')
def show_proverb(date, publish_id):
proverb = model.proverb_to_show(date, publish_id)
definitions = []
if proverb is not None:
definitions = [
find_definition(split_proverb_into_words(proverb.text)[0]),
find_definition(split_proverb_into_words(proverb.text)[2])
]
print definitions
return render_template(
'proverb.html',
proverb=proverb.text if proverb is not None else None,
definitions=definitions,
)
def _reduce_to_dictionary(dict, post_tuple):
date = post_tuple[0]
if date not in dict:
dict[date] = []
dict[date].append(post_tuple[1:])
return dict
def _fetch_latest_postId():
return model.latest_post_id()
@app.route('/')
def home():
latest = _fetch_latest_postId()
toDate = latest.publish_date
fromDate = toDate - timedelta(3)
posts = model.post_list(fromDate, toDate)
post_tuples = [
(p.publish_date, p.publish_id, p.Proverb.text) for p in posts
]
proverbDictionary = reduce(
_reduce_to_dictionary, post_tuples, OrderedDict())
return render_template('index.html', proverbs=proverbDictionary)
def shutdown_server():
func = request.environ.get('werkzeug.server.shutdown')
if func is None:
raise RuntimeError('Not running with the Werkzeug Server')
func()
@app.route('/shutdown')
def shutdown():
if app.debug:
shutdown_server()
return 'Server shutting down...'
else:
return 'Cannot shut down, not in debug mode.'
if __name__ == '__main__':
app.run(debug=True)