Files
abot/abot.py
2018-12-05 10:47:58 +02:00

105 lines
3.1 KiB
Python

import sqlite3
from flask import Flask, request, g, url_for, \
render_template
from revprox import ReverseProxied
from utils import *
import manager
DATABASE = 'abot.sqlite' # database file
DEBUG = True
QUESTIONS = 'questions' # path to questions
app = Flask(__name__)
app.config.from_object(__name__)
app.wsgi_app = ReverseProxied(app.wsgi_app)
@app.before_request
def before_request():
g.db = connect_db()
@app.teardown_request
def teardown_request(exception):
db = getattr(g, 'db', None)
if db is not None:
db.close()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/preview/<key>')
def preview(key):
if not is_key(key):
return render_template('blank.html', message = "Unknown key")
form = parse_form(key)
if not form:
return render_template('blank.html', message = "Error creating form")
if not is_draft(form):
return render_template('blank.html', message = "Preview not enabled")
valid_for = time_to_expiry(form)
return render_template(
'preview.html',
key = key,
form = form,
valid_for = valid_for
)
@app.route('/vote/<key>/<token>')
@app.route('/vote/<key>')
def vote(key, token = None):
if not is_key(key):
return render_template('blank.html', message = "Unknown key")
form = parse_form(key)
if not form:
return render_template('blank.html', message = "Error creating form")
if is_draft(form):
return render_template('blank.html', message = "Not published")
if is_expired(form):
return render_template('blank.html', message = "Voting has closed")
if is_closed_vote(form):
if has_voted(key, token):
return render_template('blank.html', message = "Token already used")
valid_for = time_to_expiry(form)
return render_template('vote.html', form = form, key = key, token = token, valid_for = valid_for)
@app.route('/save', methods=['POST'])
def save_vote():
key = request.form['key']
token = request.form['token']
if not is_key(key):
return render_template('blank.html', message = "Unknown key")
form = parse_form(key)
if not form:
return render_template('blank.html', message = "Error creating form")
if is_draft(form):
return render_template('blank.html', message = "Not published")
if is_expired(form):
return render_template('blank.html', message = "Voting has closed")
#~ if is_closed_vote(form):
#~ if has_voted(key, token):
#~ return render_template('blank.html', message = "Token already used")
write_vote(key, token, request.form, form) # using request.
tokens = False
summary = False
questions = []
answers = []
if is_show_results(form):
summary = True
questions, answers = sort_summary(*get_summary(g.db, key))
tokens = get_token_counts(g.db, key)
print(answers)
return render_template(
'thank_you.html',
summary = summary,
tokens = tokens,
qa = zip(questions, answers)
)
create_db(DATABASE)
if __name__ == "__main__":
manager.main(DATABASE, QUESTIONS)