Files
abot/abot.py
Ville Rantanen a1cf9ddc64 is voter missing
2018-12-13 22:02:08 +02:00

144 lines
4.2 KiB
Python

from flask import Flask, request, g, url_for, render_template
from revprox import ReverseProxied
from utils import *
import manager
import os
import sqlite3
DATABASE = os.getenv('DATABASE', 'abot.sqlite') # database file
DEBUG = os.getenv('DEBUG', 'False') == "True" # Debug to log
QUESTIONS = os.getenv('QUESTIONS', 'questions') # path to questions
GIT_COMMIT = os.getenv('GIT_COMMIT', False)
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 is_voter(key, token):
return render_template('blank.html', message = "Token invalid")
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 is_voter(key, token):
return render_template('blank.html', message = "Token invalid")
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)
return render_template(
'thank_you.html',
summary = summary,
tokens = tokens,
qa = zip(questions, answers)
)
@app.route('/observe/<key>/<token>')
def observe(key, token):
if not is_key(key):
return render_template('blank.html', message = "Unknown key")
if not is_observer(key, token):
return render_template('blank.html', message = "Token not valid")
tokens = get_token_counts(g.db, key)
summary = False
questions = []
answers = []
form = parse_form(key)
if not form:
return render_template('blank.html', message = "Error creating form")
if is_show_results(form):
summary = True
questions, answers = sort_summary(*get_summary(g.db, key))
return render_template(
'observe.html',
summary = summary,
tokens = tokens,
qa = zip(questions, answers)
)
create_db(DATABASE)
if __name__ == "__main__":
manager.main(DATABASE, QUESTIONS)