summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xkpov_judge/web/kpov_judge/kpov_judge.py26
-rw-r--r--kpov_judge/web/kpov_judge/static/style.css17
-rw-r--r--kpov_judge/web/kpov_judge/templates/task_greeting.html31
3 files changed, 59 insertions, 15 deletions
diff --git a/kpov_judge/web/kpov_judge/kpov_judge.py b/kpov_judge/web/kpov_judge/kpov_judge.py
index 2febf9a..c0bf885 100755
--- a/kpov_judge/web/kpov_judge/kpov_judge.py
+++ b/kpov_judge/web/kpov_judge/kpov_judge.py
@@ -13,7 +13,7 @@ import kpov_util
import pymongo
import flask
from flask import Flask, g, session, redirect, url_for, abort, render_template, flash, app, request, Response
-from flask.ext.babel import Babel, gettext, ngettext
+from flask.ext.babel import Babel, gettext, ngettext, format_datetime, _
import jinja2
app = Flask(__name__)
@@ -245,10 +245,14 @@ def task_greeting(class_id, task_id, lang):
instr_ok = False
if instr_ok:
try:
- public_params = {}
+ public_params = []
for k, v in meta.items():
if v.get('public', False):
- public_params[k] = params.get(k, "???")
+ public_params += [{
+ 'name': k,
+ 'value': params.get(k),
+ 'description': v.get('descriptions', {}).get(lang)
+ }]
except Exception as e:
instructions = str(e)
computer_list = list(db.student_computers.find({'class_id': class_id, 'task_id': task_id, 'student_id': student_id}))
@@ -266,6 +270,17 @@ def task_greeting(class_id, task_id, lang):
openstackCreated = True
else:
openstackCreated = False
+
+ try:
+ result = db.results.find_one(
+ {'$query': {'class_id': class_id, 'task_id': task_id, 'student_id': student_id},
+ '$orderby': collections.OrderedDict([('result', -1), ('time', 1)])},
+ {'result': 1, 'status': 1, 'hints': 1, 'time': True, '_id': 0})
+ result['time'] = format_datetime(result['time'])
+ print(result)
+ except Exception:
+ result = None
+
return render_template('task_greeting.html',
disk_base_url='/'.join([app.config['STUDENT_DISK_URL'], student_id, class_id, task_id, '']),
class_id=class_id,
@@ -275,8 +290,9 @@ def task_greeting(class_id, task_id, lang):
lang='sl' if lang == 'si' else lang, # TODO s/si/sl in all tasks (and maybe elsewhere)
openstack=openstackCreated,
instructions=jinja2.Template(instructions),
- **public_params,
- )
+ params=public_params,
+ result=result,
+ **{p['name']: p['value'] for p in public_params})
@app.route('/tasks/<class_id>/<task_id>/params.json', methods=['GET', 'POST'])
diff --git a/kpov_judge/web/kpov_judge/static/style.css b/kpov_judge/web/kpov_judge/static/style.css
index ade0909..69ac87c 100644
--- a/kpov_judge/web/kpov_judge/static/style.css
+++ b/kpov_judge/web/kpov_judge/static/style.css
@@ -8,6 +8,22 @@ body {
padding: 1em 2em;
}
+code {
+ background-color: #d6d6d6;
+ font-size: 1.2em;
+ padding: 0 0.25em;
+}
+
+dl {
+ margin-top: 0.5em;
+}
+dt {
+ margin-top: 0.5em;
+}
+dd {
+ margin-left: 1em;
+}
+
h1 {
margin-bottom: 0.5em;
}
@@ -22,6 +38,7 @@ p {
pre {
margin-left: 1em;
+ overflow: auto;
}
.tooltip { /* hide and position tooltip */
diff --git a/kpov_judge/web/kpov_judge/templates/task_greeting.html b/kpov_judge/web/kpov_judge/templates/task_greeting.html
index 086d6b1..1825726 100644
--- a/kpov_judge/web/kpov_judge/templates/task_greeting.html
+++ b/kpov_judge/web/kpov_judge/templates/task_greeting.html
@@ -53,7 +53,7 @@ section > ul {
{% if 'disk_urls' in c %}
<ul>
{% for u in c['disk_urls'] %}
- <li><a href={{disk_base_url+u['file']}}>{{u['name']}}</a>
+ <li><a href="{{disk_base_url+u['file']}}">{{u['name']}}</a>
{% endfor %}
</ul>
{% else %}
@@ -70,7 +70,7 @@ section > ul {
<ul>
{% for b in backing_images %}
- <li><a href={{disk_base_url+b}}>{{b}}</a></li>
+ <li><a href="{{disk_base_url+b}}">{{b}}</a></li>
{% endfor %}
</ul>
{% endif %}
@@ -78,16 +78,27 @@ section > ul {
</section>
<section>
-<h1>{{ _('Rezultati') }}</h1>
+<h1>{{ _('Rezultat') }}</h1>
<p>
-{{ _('Ogledate si lahko:') }}
+{% if result is none %}
+{{ _('Naloga nima še nobenega poskusa.') }}
+{% elif result['result'] == 10 %}
+{{ _('Naloga je uspešno opravljena dne %(time)s.', time=result['time']) }}
+{% else %}
+{{ _('Naloga še ni opravljena, najvišji rezultat je %(score)s.', score=result['result']) }}
+{% endif %}
-<ul>
-<li><a href='results.html'>{{ _('rezultate') }}</a> (<a href='../results.json'>json</a>)</li>
-<li><a href='params.html'>{{ _('parametre') }}</a> (<a href='../params.json'>json</a>, <a href='../params_meta.json'>{{ _('opisi parametrov') }}</a>)</li>
-<li><a href='../task.html'>{{ _('preverjalni program') }}</a> (<a href='../task.py'>source</a>)</li>
-</ul>
-</p>
+<p>
+<a href="../task.html">{{ _('Program za preverjanje.') }}</a>
+
+<h1>{{ _('Parametri') }}</h1>
+<dl>
+{% for p in params if p['value'] %}
+ <dt><em>{{ p['name'] }}</em>{% if p['description'] %} … <small>{{ p['description'] }}</small>{% endif %}</dt>
+ <dd><code>{{ p['value'] }}</code></dd>
+{% endfor %}
+</dl>
+</section>
{#
<p>