gruppenbildungsspiel/gruppenbildungsspiel.py
2019-04-12 19:57:17 +02:00

95 lines
4.3 KiB
Python

from flask import Flask, render_template, request, redirect, url_for
import uuid
import csv
import os
from wtforms import Form, StringField, SelectField, BooleanField, validators
from wtforms.fields.html5 import EmailField
app = Flask(__name__)
app.jinja_env.trim_blocks = True
app.jinja_env.lstrip_blocks = True
datafile = "data.csv"
def input_check(form, field):
if field.data == 'default':
raise validators.ValidationError('Bitte wähle eine Option aus')
class QuestionForm(Form):
computers = [('default', 'Bitte auswählen'), ('hal', 'HAL 9000 (2001: Odyssee im Weltraum)'), ('deepthought', 'Deep Thought (Per Anhalter durch die Galaxie)'), ('neuromancer', 'Neuromancer (Neuromancer)'), ('samantha', 'Samatha (Her)'), ('tars', 'TARS und CASE (Interstellar)')]
computer = SelectField(u'Fiktionaler Lieblingscomputer', choices=computers, validators=[validators.InputRequired(), input_check])
statuses = [('default', 'Bitte auswählen'), ('200', '200 OK'), ('300', '300 Multiple Choices'), ('301', '301 Moved Permanently'), ('402', '402 Payment Required'), ('404', '404 (Sleep) Not Found'), ('408', '408 Request Timeout'), ('418', '418 I am a teapot'), ('450', '450 Blocked by Windows Parental Controls'), ('451', '451 Unavailable For Legal Reasons'), ('502', '502 Bad Gateway (Internetkurort)')]
status = SelectField(u'Welcher HTTP-Statuscode trifft am häufigsten auf dich zu?', choices=statuses, validators=[validators.InputRequired(), input_check])
vegetables = [('default', 'Bitte auswählen'), ('karotte', '🥕'), ('broccoli','🥦'), ('aubergine', '🍆'), ('kartoffel', '🥔'), ('bretzel', '🥨'), ('tomate', '🍅'), ('chili', '🌶️')]
vegetable = SelectField(u'Lieblingsgemüse', choices=vegetables, validators=[validators.InputRequired(), input_check])
spirit_animals = [('default', 'Bitte auswählen'), ('feuer', 'Feuerfuchs'), ('wasser', 'Wasserhahn'), ('erde', 'Erdferkel'), ('luft', 'Luftschlange')]
spirit_animal = SelectField(u'Spirit Animal', choices=spirit_animals, validators=[validators.InputRequired(), input_check])
operating_systems = [('default', 'Bitte auswählen'), ('windows', 'Windows'), ('mac', 'Mac'), ('linux', 'Linux'), ('kaffee', 'Kaffee'), ('glados', 'GLaDOS')]
operating_system = SelectField(u'Bevorzugtes Betriebssystem', choices=operating_systems, validators=[validators.InputRequired(), input_check])
check = BooleanField('Bitte nicht ankreuzen')
email = EmailField('Email-Adresse')
@app.route('/')
def index():
return render_template('index.html', title='Test', text='Hallo, Fooboar')
@app.route('/questions', methods=['GET', 'POST'])
def questions():
form = QuestionForm(request.form)
if request.method == 'POST' and form.validate():
with open(datafile, "a", newline='') as f:
new_row = list()
new_id = generate_id()
new_row.append(new_id)
for item in request.form:
new_row.append(request.form[item])
writer = csv.writer(f)
writer.writerow(new_row)
# user = User()
# user.name = form.username
# spirit = request.form['spirit_animal']
# user.save()
return redirect(url_for('result'))
return render_template('questions.html', form=form)
# @app.route('/form')
# def form():
# id = generate_id()
# return render_template('form.html', title='Test', text='Hallo, Fooboar', your_id=id)
@app.route('/result')
def result():
return render_template('result.html', hausname='Knuth', haustext='Mitglieder dieses Hauses mögen LaTeX-Anzüge und Eisbären.', id=123)
@app.route('/admin')
def admin():
return render_template('admin.html', title='Test', text='Hallo, Admin Fooboar')
@app.route('/answers')
def answers():
return render_template('answers.html', title='Test', text='Hallo, Admin Fooboar')
@app.route('/solution')
def solution():
return render_template('solution.html', title='Test', text='Hallo, Lösung')
def generate_id():
data = list()
if not os.path.exists(datafile):
open(datafile, "a").close()
with open(datafile, "r") as f:
reader = csv.reader(f)
for line in reader:
data.append(line[0])
# best loop ever
while True:
new_id = str(uuid.uuid1()).split("-")[0]
if new_id in data:
break
else:
return new_id