From eda91c50d7dc25520fabee0bddd334b3d02bdedd Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Thu, 11 Oct 2018 18:39:20 +0200 Subject: Improve style in task_greeting.html template --- .../web/kpov_judge/templates/task_greeting.html | 85 ++++++++++++++++------ 1 file changed, 64 insertions(+), 21 deletions(-) (limited to 'kpov_judge/web') diff --git a/kpov_judge/web/kpov_judge/templates/task_greeting.html b/kpov_judge/web/kpov_judge/templates/task_greeting.html index 422f14b..217c0ca 100644 --- a/kpov_judge/web/kpov_judge/templates/task_greeting.html +++ b/kpov_judge/web/kpov_judge/templates/task_greeting.html @@ -1,23 +1,65 @@ - - - + + + +

{{task_id}}

-

Navodila

-
+
+
+

Navodila

+ + {{instructions}} -
-

+

-Podrobna navodila (HOWTO) -

+Podrobna navodila (HOWTO) + -
-

Računalniki v vaji

+
+
+

Računalniki

-
{% for c in computers %} -

{{c['name']}}

+
+

{{c['name']}}

{% if 'disk_urls' in c %}
    {% for u in c['disk_urls'] %} @@ -27,16 +69,12 @@ {% else %} Slike navideznih diskov so v izdelavi in bodo kmalu na voljo. {% endif %} +
{% endfor %} -

- -

-
-
{% if backing_images %} -

Osnovne slike

+

Osnovne slike

    {% for b in backing_images %}
  • {{b}}
  • @@ -46,8 +84,10 @@
+
+

Rezultati

-Lahko si ogledate surove: +Ogledate si lahko:

+{#

{% if openstack %} Openstack projekt za to vajo je že ustvarjen ali v izdelavi (funkcionalnost še ne deluje). {% else %} Ustvari Openstack projekt za to vajo (funkcionalnost še ne deluje). {% endif %} +#} + -- cgit v1.2.1 From 08a3e2857d1241ec1d908094d7f52e7331f4c738 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Thu, 11 Oct 2018 23:08:52 +0200 Subject: web: remove duplicate function --- kpov_judge/web/kpov_judge/kpov_judge.py | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) (limited to 'kpov_judge/web') diff --git a/kpov_judge/web/kpov_judge/kpov_judge.py b/kpov_judge/web/kpov_judge/kpov_judge.py index 1085b9b..5aa0606 100755 --- a/kpov_judge/web/kpov_judge/kpov_judge.py +++ b/kpov_judge/web/kpov_judge/kpov_judge.py @@ -36,9 +36,9 @@ def before_request(): @app.route('/') -def root(): +@app.route('/classes/') +def index(): student_id = flask.app.request.environ.get('REMOTE_USER', 'Nobody') - # env = flask.app.request.environ classes = g.db.classes.find({}, {'class_id': 1, 'name': 1}).sort('class_id') return render_template('index.html', student_id=student_id, classes=classes) @@ -46,7 +46,6 @@ def root(): @app.route('/classes//') def class_tasks(class_id): student_id = flask.app.request.environ.get('REMOTE_USER', 'Nobody') - # env = flask.app.request.environ clas = g.db.classes.find_one({'class_id': class_id}) tasks = g.db.tasks.find({'class_id': class_id}, {'task_id': 1}).sort('task_id') if tasks is not None: @@ -56,14 +55,6 @@ def class_tasks(class_id): return render_template('class_tasks.html', student_id=student_id, tasks=task_list, clas=clas) -@app.route('/classes/') -def class_list(): - student_id = flask.app.request.environ.get('REMOTE_USER', 'Nobody') - # env = flask.app.request.environ - classes = g.db.classes.find({}, {'class_id': 1, 'name': 1,}).sort('name') - return render_template('class_list.html', student_id=student_id, classes=classes) - - def results_post(class_id, task_id, results): student_id = flask.app.request.environ.get('REMOTE_USER', 'Nobody') db = g.db -- cgit v1.2.1 From 0069a58683b6404aff4ad9249cfb70397b073e55 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Thu, 11 Oct 2018 23:23:20 +0200 Subject: web: improve style --- kpov_judge/web/kpov_judge/static/style.css | 46 ++++++++++++++++----- .../web/kpov_judge/templates/class_tasks.html | 16 ++++++++ kpov_judge/web/kpov_judge/templates/index.html | 17 ++++---- .../web/kpov_judge/templates/task_greeting.html | 47 +++++++++------------- 4 files changed, 77 insertions(+), 49 deletions(-) create mode 100644 kpov_judge/web/kpov_judge/templates/class_tasks.html (limited to 'kpov_judge/web') diff --git a/kpov_judge/web/kpov_judge/static/style.css b/kpov_judge/web/kpov_judge/static/style.css index 9be13f8..ade0909 100644 --- a/kpov_judge/web/kpov_judge/static/style.css +++ b/kpov_judge/web/kpov_judge/static/style.css @@ -1,15 +1,37 @@ -.hover { - position:relative; +a.back { + text-decoration: none; +} + +body { + margin: 0 auto; + max-width: 60em; + padding: 1em 2em; +} + +h1 { + margin-bottom: 0.5em; +} + +p { + hyphens: auto; + margin-top: 0.5em; + margin-bottom: 0; + padding-top: 0; + text-align: justify; +} + +pre { + margin-left: 1em; } .tooltip { /* hide and position tooltip */ - top:1em; - left:1em; - background-color:black; - color:white; - border-radius:5px; - opacity:0; - position:absolute; + top: 1em; + left: 1em; + background-color: black; + color: white; + border-radius: 5px; + opacity: 0; + position: absolute; -webkit-transition: opacity 0.5s; -moz-transition: opacity 0.5s; -ms-transition: opacity 0.5s; @@ -17,6 +39,10 @@ transition: opacity 0.5s; } +.hover { + position: relative; +} + .hover:hover .tooltip { /* display tooltip on hover */ - opacity:1; + opacity: 1; } diff --git a/kpov_judge/web/kpov_judge/templates/class_tasks.html b/kpov_judge/web/kpov_judge/templates/class_tasks.html new file mode 100644 index 0000000..5a29ae7 --- /dev/null +++ b/kpov_judge/web/kpov_judge/templates/class_tasks.html @@ -0,0 +1,16 @@ + + + +

{{clas.name}}

+ +

+Zdravo, {{student_id}}. + +

+Trenutno so na voljo naloge: + +

    +{% for t in tasks %} +
  • {{t}} +{% endfor %} +
diff --git a/kpov_judge/web/kpov_judge/templates/index.html b/kpov_judge/web/kpov_judge/templates/index.html index b5149ab..49895b0 100644 --- a/kpov_judge/web/kpov_judge/templates/index.html +++ b/kpov_judge/web/kpov_judge/templates/index.html @@ -1,20 +1,17 @@ - + + +

KPOV Judge

+

-Zdravo, {{student_id}} -

-

-{{env}} -

+Zdravo, {{student_id}}. +

Trenutno so na voljo predmeti: +

-

-

Navodila lahko najdete na strani LUSY. - - diff --git a/kpov_judge/web/kpov_judge/templates/task_greeting.html b/kpov_judge/web/kpov_judge/templates/task_greeting.html index 217c0ca..20da231 100644 --- a/kpov_judge/web/kpov_judge/templates/task_greeting.html +++ b/kpov_judge/web/kpov_judge/templates/task_greeting.html @@ -1,14 +1,7 @@ + -

{{task_id}}

+

{{task_id}}

-

Navodila

- {{instructions}} @@ -56,25 +42,30 @@ section.disks > section > ul {

Računalniki

+

+Slike diskov za to nalogo: {% for c in computers %} -

-

{{c['name']}}

+
    +
  • {{c['name']}} {% if 'disk_urls' in c %} {% else %} Slike navideznih diskov so v izdelavi in bodo kmalu na voljo. {% endif %} -
+ {% endfor %}
{% if backing_images %}

Osnovne slike

+

+Te slike so enake za vse naloge in jih prenesete samo enkrat. +

    {% for b in backing_images %}
  • {{b}}
  • @@ -88,6 +79,7 @@ section.disks > section > ul {

    Rezultati

    Ogledate si lahko: +

    • rezultate (json)
    • parametre (json, opisi parametrov)
    • @@ -103,6 +95,3 @@ Openstack projekt za to vajo je že ustvarjen ali v izdelavi (funkcionalnost še Ustvari Openstack projekt za to vajo (funkcionalnost še ne deluje). {% endif %} #} - - - -- cgit v1.2.1 From c5a8b2c72841ad0b58fb36870624737634778056 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sat, 13 Oct 2018 03:10:03 +0200 Subject: HTMLize instructions and use jinja2 to render them Only fixed tasks for the kpov_2018 class for now. --- kpov_judge/web/kpov_judge/kpov_judge.py | 12 ++++++------ kpov_judge/web/kpov_judge/templates/class_tasks.html | 2 +- kpov_judge/web/kpov_judge/templates/task_greeting.html | 3 ++- 3 files changed, 9 insertions(+), 8 deletions(-) (limited to 'kpov_judge/web') diff --git a/kpov_judge/web/kpov_judge/kpov_judge.py b/kpov_judge/web/kpov_judge/kpov_judge.py index 5aa0606..4dfed7b 100755 --- a/kpov_judge/web/kpov_judge/kpov_judge.py +++ b/kpov_judge/web/kpov_judge/kpov_judge.py @@ -235,10 +235,6 @@ def task_greeting(class_id, task_id, lang): for k, v in meta.items(): if v.get('public', False): public_params[k] = params.get(k, "???") - # instructions = instructions.format(**public_params).decode('utf8') - instructions = instructions.format(**public_params) - - # instructions = instructions.format(**public_params).encode('utf8') 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})) @@ -258,11 +254,15 @@ def task_greeting(class_id, task_id, lang): openstackCreated = False 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, + task_id=task_id, computers=computer_list, backing_images=sorted(backing_images), - lang=lang, + lang='sl' if lang == 'si' else lang, # TODO s/si/sl in all tasks (and maybe elsewhere) openstack=openstackCreated, - instructions=instructions) + instructions=jinja2.Template(instructions), + **public_params, + ) @app.route('/tasks///params.json', methods=['GET', 'POST']) diff --git a/kpov_judge/web/kpov_judge/templates/class_tasks.html b/kpov_judge/web/kpov_judge/templates/class_tasks.html index 5a29ae7..050874b 100644 --- a/kpov_judge/web/kpov_judge/templates/class_tasks.html +++ b/kpov_judge/web/kpov_judge/templates/class_tasks.html @@ -11,6 +11,6 @@ Trenutno so na voljo naloge:
        {% for t in tasks %} -
      • {{t}} +
      • {{t}} {% endfor %}
      diff --git a/kpov_judge/web/kpov_judge/templates/task_greeting.html b/kpov_judge/web/kpov_judge/templates/task_greeting.html index 20da231..5a59fe0 100644 --- a/kpov_judge/web/kpov_judge/templates/task_greeting.html +++ b/kpov_judge/web/kpov_judge/templates/task_greeting.html @@ -33,7 +33,8 @@ section > ul {
      -{{instructions}} + +{% include instructions %}

      Podrobna navodila (HOWTO) -- cgit v1.2.1 From b41b2bebc05585a6e374dafafae9bed2503becad Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sat, 13 Oct 2018 03:29:33 +0200 Subject: I18N --- kpov_judge/web/kpov_judge/babel.cfg | 3 + kpov_judge/web/kpov_judge/kpov_judge.py | 27 +++++-- .../web/kpov_judge/templates/class_tasks.html | 6 +- kpov_judge/web/kpov_judge/templates/index.html | 9 +-- .../web/kpov_judge/templates/task_greeting.html | 23 +++--- .../translations/en/LC_MESSAGES/messages.po | 86 +++++++++++++++++++++ .../translations/sl/LC_MESSAGES/messages.po | 87 ++++++++++++++++++++++ 7 files changed, 216 insertions(+), 25 deletions(-) create mode 100644 kpov_judge/web/kpov_judge/babel.cfg create mode 100644 kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po create mode 100644 kpov_judge/web/kpov_judge/translations/sl/LC_MESSAGES/messages.po (limited to 'kpov_judge/web') diff --git a/kpov_judge/web/kpov_judge/babel.cfg b/kpov_judge/web/kpov_judge/babel.cfg new file mode 100644 index 0000000..f0234b3 --- /dev/null +++ b/kpov_judge/web/kpov_judge/babel.cfg @@ -0,0 +1,3 @@ +[python: **.py] +[jinja2: **/templates/**.html] +extensions=jinja2.ext.autoescape,jinja2.ext.with_ diff --git a/kpov_judge/web/kpov_judge/kpov_judge.py b/kpov_judge/web/kpov_judge/kpov_judge.py index 4dfed7b..db2359d 100755 --- a/kpov_judge/web/kpov_judge/kpov_judge.py +++ b/kpov_judge/web/kpov_judge/kpov_judge.py @@ -1,18 +1,33 @@ #!/usr/bin/env python3 -import flask -from flask import Flask, g, session, redirect, url_for, abort, render_template, flash, app, request, Response -import pymongo +import collections +import datetime import json import random import settings -import datetime -import kpov_util -from kpov_draw_setup import draw_setup import traceback +from kpov_draw_setup import draw_setup +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 +import jinja2 + app = Flask(__name__) app.config.from_object(settings) +babel = Babel(app) + +@babel.localeselector +def get_locale(): + # terrible hack, should store as user preference in the DB + if '/en/' in request.path: + return 'en' + if '/si/' in request.path: + return 'sl' + return request.accept_languages.best_match(['sl', 'en']) dummy_task = """ def task(neznano_ime_naloge): diff --git a/kpov_judge/web/kpov_judge/templates/class_tasks.html b/kpov_judge/web/kpov_judge/templates/class_tasks.html index 050874b..4b6a523 100644 --- a/kpov_judge/web/kpov_judge/templates/class_tasks.html +++ b/kpov_judge/web/kpov_judge/templates/class_tasks.html @@ -4,10 +4,10 @@

      {{clas.name}}

      -Zdravo, {{student_id}}. +{{ _('Zdravo, %(student)s.', student=student_id) }} -

      -Trenutno so na voljo naloge: +

      +

      {{ _('Naloge') }}

        {% for t in tasks %} diff --git a/kpov_judge/web/kpov_judge/templates/index.html b/kpov_judge/web/kpov_judge/templates/index.html index 49895b0..4c2ba47 100644 --- a/kpov_judge/web/kpov_judge/templates/index.html +++ b/kpov_judge/web/kpov_judge/templates/index.html @@ -4,14 +4,13 @@

        KPOV Judge

        -Zdravo, {{student_id}}. +{{ _('Zdravo, %(student)s.', student=student_id) }} -

        -Trenutno so na voljo predmeti: +

        +

        {{ _('Predmeti') }}

        - diff --git a/kpov_judge/web/kpov_judge/templates/task_greeting.html b/kpov_judge/web/kpov_judge/templates/task_greeting.html index 5a59fe0..086d6b1 100644 --- a/kpov_judge/web/kpov_judge/templates/task_greeting.html +++ b/kpov_judge/web/kpov_judge/templates/task_greeting.html @@ -10,6 +10,7 @@ img.setup { max-width: 20em; } section.data { + clear: both; columns: 2; } section.data > section { @@ -37,14 +38,14 @@ section > ul { {% include instructions %}

        -Podrobna navodila (HOWTO) +{{ _('Podrobna navodila.') }}

        -

        Računalniki

        +

        {{ _('Računalniki') }}

        -Slike diskov za to nalogo: +{{ _('Slike diskov za to nalogo:') }} {% for c in computers %}

          @@ -56,16 +57,16 @@ Slike diskov za to nalogo: {% endfor %}
        {% else %} - Slike navideznih diskov so v izdelavi in bodo kmalu na voljo. +
        {{ _('Slike navideznih diskov so v izdelavi in bodo kmalu na voljo.') }} {% endif %}
      {% endfor %}
      {% if backing_images %} -

      Osnovne slike

      +

      {{ _('Osnovne slike') }}

      -Te slike so enake za vse naloge in jih prenesete samo enkrat. +{{ _('Te slike so enake za vse naloge. Prenesite samo tiste, ki jih še nimate.') }}

        {% for b in backing_images %} @@ -77,14 +78,14 @@ Te slike so enake za vse naloge in jih prenesete samo enkrat.
      -

      Rezultati

      +

      {{ _('Rezultati') }}

      -Ogledate si lahko: +{{ _('Ogledate si lahko:') }}

      diff --git a/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po b/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po new file mode 100644 index 0000000..9708420 --- /dev/null +++ b/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po @@ -0,0 +1,86 @@ +# English translations for PROJECT. +# Copyright (C) 2018 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2018-10-13 02:41+0200\n" +"PO-Revision-Date: 2018-10-13 02:29+0200\n" +"Last-Translator: FULL NAME \n" +"Language-Team: en \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 1.3\n" + +#: templates/class_tasks.html:7 templates/index.html:7 +#, python-format +msgid "Zdravo, %(student)s." +msgstr "Hi, %(student)s." + +#: templates/class_tasks.html:10 +msgid "Naloge" +msgstr "Tasks" + +#: templates/index.html:10 +msgid "Predmeti" +msgstr "Classes" + +#: templates/task_greeting.html:41 +msgid "Podrobna navodila." +msgstr "Detalied instructions." + +#: templates/task_greeting.html:46 +msgid "Računalniki" +msgstr "Computers" + +#: templates/task_greeting.html:48 +msgid "Slike diskov za to nalogo:" +msgstr "Disk images for this task:" + +#: templates/task_greeting.html:60 +msgid "Slike navideznih diskov so v izdelavi in bodo kmalu na voljo." +msgstr "Disk images are being generated, please wait." + +#: templates/task_greeting.html:67 +msgid "Osnovne slike" +msgstr "Backing images" + +#: templates/task_greeting.html:69 +msgid "Te slike so enake za vse naloge. Prenesite samo tiste, ki jih še nimate." +msgstr "These disk images are the same for all exercises. Download only those you don’t have yet." + +#: templates/task_greeting.html:81 +msgid "Rezultati" +msgstr "Results" + +#: templates/task_greeting.html:83 +msgid "Ogledate si lahko:" +msgstr "You can view:" + +#: templates/task_greeting.html:86 +msgid "rezultate" +msgstr "results" + +#: templates/task_greeting.html:87 +msgid "parametre" +msgstr "parameters" + +#: templates/task_greeting.html:87 +msgid "opisi parametrov" +msgstr "parameter descriptions" + +#: templates/task_greeting.html:88 +msgid "preverjalni program" +msgstr "checking program" + +#~ msgid "Trenutno so na voljo naloge:" +#~ msgstr "Available tasks:" + +#~ msgid "Trenutno so na voljo predmeti:" +#~ msgstr "Available classes" + diff --git a/kpov_judge/web/kpov_judge/translations/sl/LC_MESSAGES/messages.po b/kpov_judge/web/kpov_judge/translations/sl/LC_MESSAGES/messages.po new file mode 100644 index 0000000..7027a4c --- /dev/null +++ b/kpov_judge/web/kpov_judge/translations/sl/LC_MESSAGES/messages.po @@ -0,0 +1,87 @@ +# Slovenian translations for PROJECT. +# Copyright (C) 2018 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2018-10-13 02:41+0200\n" +"PO-Revision-Date: 2018-10-13 02:29+0200\n" +"Last-Translator: FULL NAME \n" +"Language-Team: sl \n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 " +"|| n%100==4 ? 2 : 3)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 1.3\n" + +#: templates/class_tasks.html:7 templates/index.html:7 +#, python-format +msgid "Zdravo, %(student)s." +msgstr "" + +#: templates/class_tasks.html:10 +msgid "Naloge" +msgstr "" + +#: templates/index.html:10 +msgid "Predmeti" +msgstr "" + +#: templates/task_greeting.html:41 +msgid "Podrobna navodila." +msgstr "" + +#: templates/task_greeting.html:46 +msgid "Računalniki" +msgstr "" + +#: templates/task_greeting.html:48 +msgid "Slike diskov za to nalogo:" +msgstr "" + +#: templates/task_greeting.html:60 +msgid "Slike navideznih diskov so v izdelavi in bodo kmalu na voljo." +msgstr "" + +#: templates/task_greeting.html:67 +msgid "Osnovne slike" +msgstr "" + +#: templates/task_greeting.html:69 +msgid "Te slike so enake za vse naloge. Prenesite samo tiste, ki jih še nimate." +msgstr "" + +#: templates/task_greeting.html:81 +msgid "Rezultati" +msgstr "" + +#: templates/task_greeting.html:83 +msgid "Ogledate si lahko:" +msgstr "" + +#: templates/task_greeting.html:86 +msgid "rezultate" +msgstr "" + +#: templates/task_greeting.html:87 +msgid "parametre" +msgstr "" + +#: templates/task_greeting.html:87 +msgid "opisi parametrov" +msgstr "" + +#: templates/task_greeting.html:88 +msgid "preverjalni program" +msgstr "" + +#~ msgid "Trenutno so na voljo naloge:" +#~ msgstr "" + +#~ msgid "Trenutno so na voljo predmeti:" +#~ msgstr "" + -- cgit v1.2.1 From 64885ef1675f32cc3ce9d59aa0f6c31064338eec Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sat, 13 Oct 2018 03:30:56 +0200 Subject: web.results_post: call task_check with defaultdict(str) Many tasks barf on missing keys. --- kpov_judge/web/kpov_judge/kpov_judge.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'kpov_judge/web') diff --git a/kpov_judge/web/kpov_judge/kpov_judge.py b/kpov_judge/web/kpov_judge/kpov_judge.py index db2359d..2febf9a 100755 --- a/kpov_judge/web/kpov_judge/kpov_judge.py +++ b/kpov_judge/web/kpov_judge/kpov_judge.py @@ -92,8 +92,7 @@ def results_post(class_id, task_id, results): task_check_source = db.task_checkers.find_one({'class_id': class_id, 'task_id': task_id})['source'] d = {} exec(compile(task_check_source, 'checker.py', 'exec'), globals(), d) - # raise Exception(str(params)) - res, hints = d['task_check'](results, params) + res, hints = d['task_check'](collections.defaultdict(str, results), params) except Exception as e: hints = ["Checker died: " + str(e)] res = 0 -- cgit v1.2.1 From e17416d594642c5e9eaf905f37cef10021071ab1 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sat, 13 Oct 2018 19:15:56 +0200 Subject: Show results and parameters on task page --- kpov_judge/web/kpov_judge/kpov_judge.py | 26 ++++++++++++++---- kpov_judge/web/kpov_judge/static/style.css | 17 ++++++++++++ .../web/kpov_judge/templates/task_greeting.html | 31 +++++++++++++++------- 3 files changed, 59 insertions(+), 15 deletions(-) (limited to 'kpov_judge/web') 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///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 %} {% else %} @@ -70,7 +70,7 @@ section > ul {
        {% for b in backing_images %} -
      • {{b}}
      • +
      • {{b}}
      • {% endfor %}
      {% endif %} @@ -78,16 +78,27 @@ section > ul {
      -

      {{ _('Rezultati') }}

      +

      {{ _('Rezultat') }}

      -{{ _('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 %} -

      -

      +

      +{{ _('Program za preverjanje.') }} + +

      {{ _('Parametri') }}

      +
      +{% for p in params if p['value'] %} +
      {{ p['name'] }}{% if p['description'] %} … {{ p['description'] }}{% endif %}
      +
      {{ p['value'] }}
      +{% endfor %} +
      +
      {#

      -- cgit v1.2.1 From dd8f99e7b804c9e99fe40b430ee565acad8b3fca Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sat, 13 Oct 2018 19:23:10 +0200 Subject: Add language links to task page --- kpov_judge/web/kpov_judge/templates/task_greeting.html | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'kpov_judge/web') diff --git a/kpov_judge/web/kpov_judge/templates/task_greeting.html b/kpov_judge/web/kpov_judge/templates/task_greeting.html index 1825726..73294e5 100644 --- a/kpov_judge/web/kpov_judge/templates/task_greeting.html +++ b/kpov_judge/web/kpov_judge/templates/task_greeting.html @@ -2,6 +2,10 @@ -

      {{task_id}}

      +

      + {{task_id}} +[ +{% for lang in ('en', 'si') %} +{{lang}} +{% endfor %} +] +

      -- cgit v1.2.1 From 38cc4da1db6de7a558bed53e4da6fa7c2c27d164 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sat, 13 Oct 2018 19:40:56 +0200 Subject: Update translations --- .../translations/en/LC_MESSAGES/messages.po | 68 +++++++++++++--------- .../translations/sl/LC_MESSAGES/messages.po | 58 ++++++++++++------ 2 files changed, 81 insertions(+), 45 deletions(-) (limited to 'kpov_judge/web') diff --git a/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po b/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po index 9708420..df2c29d 100644 --- a/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po +++ b/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2018-10-13 02:41+0200\n" +"POT-Creation-Date: 2018-10-13 19:25+0200\n" "PO-Revision-Date: 2018-10-13 02:29+0200\n" "Last-Translator: FULL NAME \n" "Language-Team: en \n" @@ -30,53 +30,57 @@ msgstr "Tasks" msgid "Predmeti" msgstr "Classes" -#: templates/task_greeting.html:41 +#: templates/task_greeting.html:52 msgid "Podrobna navodila." msgstr "Detalied instructions." -#: templates/task_greeting.html:46 +#: templates/task_greeting.html:57 msgid "Računalniki" msgstr "Computers" -#: templates/task_greeting.html:48 +#: templates/task_greeting.html:59 msgid "Slike diskov za to nalogo:" msgstr "Disk images for this task:" -#: templates/task_greeting.html:60 +#: templates/task_greeting.html:71 msgid "Slike navideznih diskov so v izdelavi in bodo kmalu na voljo." msgstr "Disk images are being generated, please wait." -#: templates/task_greeting.html:67 +#: templates/task_greeting.html:78 msgid "Osnovne slike" msgstr "Backing images" -#: templates/task_greeting.html:69 +#: templates/task_greeting.html:80 msgid "Te slike so enake za vse naloge. Prenesite samo tiste, ki jih še nimate." -msgstr "These disk images are the same for all exercises. Download only those you don’t have yet." +msgstr "" +"These disk images are the same for all exercises. Download only those you" +" don’t have yet." -#: templates/task_greeting.html:81 -msgid "Rezultati" -msgstr "Results" +#: templates/task_greeting.html:92 +msgid "Rezultat" +msgstr "Result" -#: templates/task_greeting.html:83 -msgid "Ogledate si lahko:" -msgstr "You can view:" +#: templates/task_greeting.html:95 +msgid "Naloga nima še nobenega poskusa." +msgstr "This task has not been attempted yet." -#: templates/task_greeting.html:86 -msgid "rezultate" -msgstr "results" +#: templates/task_greeting.html:97 +#, python-format +msgid "Naloga je uspešno opravljena dne %(time)s." +msgstr "This task was solved on %(time)s." -#: templates/task_greeting.html:87 -msgid "parametre" -msgstr "parameters" +#: templates/task_greeting.html:99 +#, python-format +msgid "Naloga še ni opravljena, najvišji rezultat je %(score)s." +msgstr "This task has not been solved yet, the highest score is %(score)s." -#: templates/task_greeting.html:87 -msgid "opisi parametrov" -msgstr "parameter descriptions" +#: templates/task_greeting.html:103 +msgid "Program za preverjanje." +msgstr "Testing program." -#: templates/task_greeting.html:88 -msgid "preverjalni program" -msgstr "checking program" +#: templates/task_greeting.html:105 +msgid "Parametri" +msgstr "Parameters" #~ msgid "Trenutno so na voljo naloge:" #~ msgstr "Available tasks:" @@ -84,3 +88,15 @@ msgstr "checking program" #~ msgid "Trenutno so na voljo predmeti:" #~ msgstr "Available classes" +#~ msgid "Rezultati" +#~ msgstr "Results" + +#~ msgid "Ogledate si lahko:" +#~ msgstr "You can view:" + +#~ msgid "opisi parametrov" +#~ msgstr "parameter descriptions" + +#~ msgid "preverjalni program" +#~ msgstr "checking program" + diff --git a/kpov_judge/web/kpov_judge/translations/sl/LC_MESSAGES/messages.po b/kpov_judge/web/kpov_judge/translations/sl/LC_MESSAGES/messages.po index 7027a4c..18458f9 100644 --- a/kpov_judge/web/kpov_judge/translations/sl/LC_MESSAGES/messages.po +++ b/kpov_judge/web/kpov_judge/translations/sl/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2018-10-13 02:41+0200\n" +"POT-Creation-Date: 2018-10-13 19:25+0200\n" "PO-Revision-Date: 2018-10-13 02:29+0200\n" "Last-Translator: FULL NAME \n" "Language-Team: sl \n" @@ -31,52 +31,54 @@ msgstr "" msgid "Predmeti" msgstr "" -#: templates/task_greeting.html:41 +#: templates/task_greeting.html:52 msgid "Podrobna navodila." msgstr "" -#: templates/task_greeting.html:46 +#: templates/task_greeting.html:57 msgid "Računalniki" msgstr "" -#: templates/task_greeting.html:48 +#: templates/task_greeting.html:59 msgid "Slike diskov za to nalogo:" msgstr "" -#: templates/task_greeting.html:60 +#: templates/task_greeting.html:71 msgid "Slike navideznih diskov so v izdelavi in bodo kmalu na voljo." msgstr "" -#: templates/task_greeting.html:67 +#: templates/task_greeting.html:78 msgid "Osnovne slike" msgstr "" -#: templates/task_greeting.html:69 +#: templates/task_greeting.html:80 msgid "Te slike so enake za vse naloge. Prenesite samo tiste, ki jih še nimate." msgstr "" -#: templates/task_greeting.html:81 -msgid "Rezultati" +#: templates/task_greeting.html:92 +msgid "Rezultat" msgstr "" -#: templates/task_greeting.html:83 -msgid "Ogledate si lahko:" +#: templates/task_greeting.html:95 +msgid "Naloga nima še nobenega poskusa." msgstr "" -#: templates/task_greeting.html:86 -msgid "rezultate" +#: templates/task_greeting.html:97 +#, python-format +msgid "Naloga je uspešno opravljena dne %(time)s." msgstr "" -#: templates/task_greeting.html:87 -msgid "parametre" +#: templates/task_greeting.html:99 +#, python-format +msgid "Naloga še ni opravljena, najvišji rezultat je %(score)s." msgstr "" -#: templates/task_greeting.html:87 -msgid "opisi parametrov" +#: templates/task_greeting.html:103 +msgid "Program za preverjanje." msgstr "" -#: templates/task_greeting.html:88 -msgid "preverjalni program" +#: templates/task_greeting.html:105 +msgid "Parametri" msgstr "" #~ msgid "Trenutno so na voljo naloge:" @@ -85,3 +87,21 @@ msgstr "" #~ msgid "Trenutno so na voljo predmeti:" #~ msgstr "" +#~ msgid "Rezultati" +#~ msgstr "" + +#~ msgid "Ogledate si lahko:" +#~ msgstr "" + +#~ msgid "rezultate" +#~ msgstr "" + +#~ msgid "parametre" +#~ msgstr "" + +#~ msgid "opisi parametrov" +#~ msgstr "" + +#~ msgid "preverjalni program" +#~ msgstr "" + -- cgit v1.2.1 From 5439f75ca2e1a38803a96853b6cac0ce5c9f58ce Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sat, 13 Oct 2018 21:36:23 +0200 Subject: A couple of tweaks --- kpov_judge/web/kpov_judge/static/style.css | 3 ++- kpov_judge/web/kpov_judge/templates/task_greeting.html | 3 ++- kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) (limited to 'kpov_judge/web') diff --git a/kpov_judge/web/kpov_judge/static/style.css b/kpov_judge/web/kpov_judge/static/style.css index 69ac87c..4511302 100644 --- a/kpov_judge/web/kpov_judge/static/style.css +++ b/kpov_judge/web/kpov_judge/static/style.css @@ -10,8 +10,9 @@ body { code { background-color: #d6d6d6; + color: black; font-size: 1.2em; - padding: 0 0.25em; + padding: 0.20em 0.25em 0; } dl { diff --git a/kpov_judge/web/kpov_judge/templates/task_greeting.html b/kpov_judge/web/kpov_judge/templates/task_greeting.html index 73294e5..49288e3 100644 --- a/kpov_judge/web/kpov_judge/templates/task_greeting.html +++ b/kpov_judge/web/kpov_judge/templates/task_greeting.html @@ -19,6 +19,7 @@ section.data { } section.data > section { display: inline-block; + margin: 0 1em; } section.disks > section > h1 { margin-bottom: 0; @@ -36,7 +37,7 @@ section > ul {

      {{task_id}} -[ + [ {% for lang in ('en', 'si') %} {{lang}} {% endfor %} diff --git a/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po b/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po index df2c29d..ef9a7bb 100644 --- a/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po +++ b/kpov_judge/web/kpov_judge/translations/en/LC_MESSAGES/messages.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" "POT-Creation-Date: 2018-10-13 19:25+0200\n" -"PO-Revision-Date: 2018-10-13 02:29+0200\n" +"PO-Revision-Date: 2018-10-13 20:57+0200\n" "Last-Translator: FULL NAME \n" "Language-Team: en \n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" @@ -32,7 +32,7 @@ msgstr "Classes" #: templates/task_greeting.html:52 msgid "Podrobna navodila." -msgstr "Detalied instructions." +msgstr "Detailed instructions." #: templates/task_greeting.html:57 msgid "Računalniki" -- cgit v1.2.1