support for observers

This commit is contained in:
Ville Rantanen
2018-12-12 22:09:12 +02:00
parent 74cdb27037
commit cef7966ad2
12 changed files with 144 additions and 33 deletions

47
abot.py
View File

@@ -1,33 +1,39 @@
import sqlite3
from flask import Flask, request, g, url_for, \
render_template
from flask import Flask, request, g, url_for, render_template
from revprox import ReverseProxied
from utils import *
import manager
import os
import sqlite3
DATABASE = 'abot.sqlite' # database file
DEBUG = True
QUESTIONS = 'questions' # path to questions
DATABASE = os.getenv('DATABASE', 'abot.sqlite') # database file
DEBUG = False
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):
@@ -45,6 +51,7 @@ def preview(key):
valid_for = valid_for
)
@app.route('/vote/<key>/<token>')
@app.route('/vote/<key>')
def vote(key, token = None):
@@ -64,6 +71,7 @@ def vote(key, token = None):
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']
@@ -99,6 +107,33 @@ def save_vote():
)
@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)