Added rollback, fixed interactions.
This commit is contained in:
parent
43de5e73cb
commit
fc01ae952c
5 changed files with 69 additions and 17 deletions
55
app.py
55
app.py
|
@ -6,9 +6,11 @@ import sys
|
||||||
import logging
|
import logging
|
||||||
import datetime
|
import datetime
|
||||||
import toml
|
import toml
|
||||||
|
import os
|
||||||
|
|
||||||
SECRET_KEY = '!Êrû÷FwÙxIER'
|
SECRET_KEY = '!Êrû÷FwÙxIER'
|
||||||
CONFIG_FILE = 'config.toml'
|
CONFIG_FILE = 'config.toml'
|
||||||
|
CONFIG_LOG_FILE = 'config_log.json'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,6 +38,21 @@ order.append({"id":"t", "value":"Třezalka"})
|
||||||
order.append({"id":"n", "value":"Neběžel"})
|
order.append({"id":"n", "value":"Neběžel"})
|
||||||
|
|
||||||
|
|
||||||
|
def log_state(config):
|
||||||
|
with open(CONFIG_LOG_FILE) as f:
|
||||||
|
log = json.load(f)
|
||||||
|
if type(log) != list:
|
||||||
|
raise ValueError('Config log file must contain list!')
|
||||||
|
log.append(config)
|
||||||
|
os.rename(CONFIG_LOG_FILE,CONFIG_LOG_FILE+'.old')
|
||||||
|
with open(CONFIG_LOG_FILE,'w') as f:
|
||||||
|
json.dump(log,f)
|
||||||
|
|
||||||
|
|
||||||
|
log_state(config)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def check_form(form,config):
|
def check_form(form,config):
|
||||||
errors = []
|
errors = []
|
||||||
for t in config["teams"]:
|
for t in config["teams"]:
|
||||||
|
@ -48,11 +65,11 @@ def check_form(form,config):
|
||||||
|
|
||||||
def team_points(per1,order1,per2,order2,config):
|
def team_points(per1,order1,per2,order2,config):
|
||||||
# FIXME hardcoded interactions
|
# FIXME hardcoded interactions
|
||||||
if (per1 == 'Kodein' and per2 == 'Paralen') or \
|
if (per1 not in ['n','t'] and per2 not in ['n','t']) and \
|
||||||
(per1 == 'Penicilin' and per2 == 'Strepsils'):
|
((per1 == 'Kodein' and per2 == 'Paralen') or \
|
||||||
# FIXME co třezalka?
|
(per1 == 'Penicilin' and per2 == 'Strepsils')):
|
||||||
order1 = min(order1,order2)
|
order1 = min(int(order1),int(order2))
|
||||||
order2 = min(order1,order2)
|
order2 = order1
|
||||||
|
|
||||||
pts = 0
|
pts = 0
|
||||||
# Pokud neběžel první, neběžel ani druhý
|
# Pokud neběžel první, neběžel ani druhý
|
||||||
|
@ -81,17 +98,6 @@ def team_points(per1,order1,per2,order2,config):
|
||||||
pts += config['base_pts']*config['order_coeff'][int(order2)]*org['coeff']
|
pts += config['base_pts']*config['order_coeff'][int(order2)]*org['coeff']
|
||||||
return pts
|
return pts
|
||||||
|
|
||||||
def get_person(form,tid,pid,config):
|
|
||||||
for org in config["orgs"]:
|
|
||||||
if form["clovek{}_{}_{}".format(pid,tid,org["id"])] == "true":
|
|
||||||
return org["id"]
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_team_by_id(aid,config):
|
|
||||||
for t in config["teams"]:
|
|
||||||
if t["id"] == aid:
|
|
||||||
return t
|
|
||||||
|
|
||||||
def get_org_by_id(aid,config):
|
def get_org_by_id(aid,config):
|
||||||
for o in config["orgs"]:
|
for o in config["orgs"]:
|
||||||
if o["id"] == aid:
|
if o["id"] == aid:
|
||||||
|
@ -136,12 +142,14 @@ def form_page():
|
||||||
team["points"] = 100
|
team["points"] = 100
|
||||||
team['emerg_remain'] -= 1
|
team['emerg_remain'] -= 1
|
||||||
config["round"] += 1
|
config["round"] += 1
|
||||||
|
log_state(config)
|
||||||
return render_template("form.html",
|
return render_template("form.html",
|
||||||
round = config["times"][config['round']],
|
round = config["times"][config['round']],
|
||||||
people = config["orgs"],
|
people = config["orgs"],
|
||||||
order = order,
|
order = order,
|
||||||
teams = config["teams"],
|
teams = config["teams"],
|
||||||
errors = []
|
errors = [],
|
||||||
|
success = True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -150,3 +158,16 @@ def form_page():
|
||||||
def tablo():
|
def tablo():
|
||||||
return render_template("tablo.html",teams=config["teams"])
|
return render_template("tablo.html",teams=config["teams"])
|
||||||
|
|
||||||
|
@app.route('/rollback',methods=['GET','POST'])
|
||||||
|
def rollback():
|
||||||
|
global config
|
||||||
|
with open(CONFIG_LOG_FILE) as f:
|
||||||
|
log = json.load(f)
|
||||||
|
if request.method == 'GET':
|
||||||
|
return render_template("rollback.html",log=log)
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
|
version = request.form['version']
|
||||||
|
config = log[int(version)]
|
||||||
|
return render_template('rollback.html',log=log,success=True)
|
||||||
|
|
||||||
|
|
1
config_log.json
Normal file
1
config_log.json
Normal file
|
@ -0,0 +1 @@
|
||||||
|
[]
|
2
requirements.txt
Normal file
2
requirements.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
flask
|
||||||
|
toml
|
|
@ -6,12 +6,17 @@
|
||||||
<body>
|
<body>
|
||||||
<h1>Zadávání pořadí - {{round}}</h1>
|
<h1>Zadávání pořadí - {{round}}</h1>
|
||||||
<form method="post" action="">
|
<form method="post" action="">
|
||||||
|
{% if errors %}
|
||||||
<h2> Problémy </h2>
|
<h2> Problémy </h2>
|
||||||
<ul>
|
<ul>
|
||||||
{% for e in errors %}
|
{% for e in errors %}
|
||||||
<li>{{e}}</li>
|
<li>{{e}}</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
{% if success %}
|
||||||
|
<p class="success">Pořadí úspěšně zadáno</p>
|
||||||
|
{% endif %}
|
||||||
<div class="teams">
|
<div class="teams">
|
||||||
{% for team in teams %}
|
{% for team in teams %}
|
||||||
<div class="team">
|
<div class="team">
|
||||||
|
|
23
templates/rollback.html
Normal file
23
templates/rollback.html
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<link rel="stylesheet" href="/static/style.css">
|
||||||
|
<title>Návrat k předchozí verzi</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{% if success %}
|
||||||
|
<p class="success"> Verze úspěšně změněna</p>
|
||||||
|
{% endif %}
|
||||||
|
<h1>Vyberte stav</h1>
|
||||||
|
<form method="post" action="">
|
||||||
|
<ul>
|
||||||
|
{% for l in log %}
|
||||||
|
<li>
|
||||||
|
<input type="radio" name="version" id="version_{{loop.index0}}" value="{{loop.index0}}">
|
||||||
|
<label for="version_{{loop.index0}}">{{l.times[l.round]}}</label>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
<input type="submit" value="Odeslat">
|
||||||
|
</form>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in a new issue