From 7be6d643f83afb47e8b1d41c5beded3481aea91c Mon Sep 17 00:00:00 2001 From: Zonkil Date: Wed, 13 Dec 2023 17:59:41 +0100 Subject: [PATCH 1/5] Added result_percentage --- oioioi/programs/handlers.py | 3 +++ oioioi/programs/models.py | 1 + .../templates/programs/report-comments.html | 19 +++++++++++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/oioioi/programs/handlers.py b/oioioi/programs/handlers.py index c7849e2c0..31167b209 100755 --- a/oioioi/programs/handlers.py +++ b/oioioi/programs/handlers.py @@ -555,6 +555,9 @@ def make_report(env, kind='NORMAL', save_scores=True, **kwargs): test_report.score = result['score'] if save_scores else None test_report.status = result['status'] test_report.time_used = result['time_used'] + percentage = result.get('result_percentage', 0.) + if percentage != 100. and percentage != 0.: + test_report.result_percentage = percentage comment = result.get('result_string', '') if comment.lower() in ['ok', 'time limit exceeded']: # Annoying diff --git a/oioioi/programs/models.py b/oioioi/programs/models.py index b7bddb62f..6a0ad70a8 100644 --- a/oioioi/programs/models.py +++ b/oioioi/programs/models.py @@ -326,6 +326,7 @@ class TestReport(models.Model): max_score = ScoreField(null=True, blank=True) time_used = models.IntegerField(blank=True) output_file = FileField(upload_to=make_output_filename, null=True, blank=True) + result_percentage = models.FloatField(null=True, blank=True) test = models.ForeignKey(Test, blank=True, null=True, on_delete=models.SET_NULL) test_name = models.CharField(max_length=30) diff --git a/oioioi/programs/templates/programs/report-comments.html b/oioioi/programs/templates/programs/report-comments.html index 98652330e..415fb370e 100644 --- a/oioioi/programs/templates/programs/report-comments.html +++ b/oioioi/programs/templates/programs/report-comments.html @@ -5,7 +5,7 @@ {% for group in groups %} {% for record in group.tests %} {% with test=record.test %} - {% if test.comment and allow_test_comments or test.get_status_display != 'OK' and allow_download_out and test.test %} + {% if test.comment or test.result_percentage and allow_test_comments or test.get_status_display != 'OK' and allow_download_out and test.test %}
  • {{ test.test_name }} {% if allow_download_out and test.test %} @@ -24,7 +24,22 @@ {% endif %} {% endif %} {% if allow_test_comments %} - {{ test.comment }} + + {% if test.comment %} + {% if test.result_percentage %} + {% blocktranslate with test.result_percentage as percentage %} + Granted {{ percentage }}% points, comment: + {% endblocktranslate %} + {% endif %} + {{ test.comment }} + {% else %} + {% if test.result_percentage %} + {% blocktranslate with test.result_percentage as percentage %} + Granted {{ percentage }}% points. + {% endblocktranslate %} + {% endif %} + {% endif %} + {% endif %}
  • {% endif %} From 5fe262767464e365f9eab5c9060babce7f074d72 Mon Sep 17 00:00:00 2001 From: Zonkil Date: Wed, 13 Dec 2023 18:00:08 +0100 Subject: [PATCH 2/5] Added migration --- .../0020_testreport_result_percentage.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 oioioi/programs/migrations/0020_testreport_result_percentage.py diff --git a/oioioi/programs/migrations/0020_testreport_result_percentage.py b/oioioi/programs/migrations/0020_testreport_result_percentage.py new file mode 100644 index 000000000..4d05fd623 --- /dev/null +++ b/oioioi/programs/migrations/0020_testreport_result_percentage.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.7 on 2023-12-13 16:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('programs', '0019_add_limits_override'), + ] + + operations = [ + migrations.AddField( + model_name='testreport', + name='result_percentage', + field=models.FloatField(blank=True, null=True), + ), + ] From c53fce6d366cb966c43b8d94d2f810533b84e66b Mon Sep 17 00:00:00 2001 From: Zonkil Date: Mon, 4 Mar 2024 13:13:28 +0100 Subject: [PATCH 3/5] Added bold to partial score % --- oioioi/programs/templates/programs/report-comments.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/oioioi/programs/templates/programs/report-comments.html b/oioioi/programs/templates/programs/report-comments.html index 415fb370e..86846aca1 100644 --- a/oioioi/programs/templates/programs/report-comments.html +++ b/oioioi/programs/templates/programs/report-comments.html @@ -28,14 +28,14 @@ {% if test.comment %} {% if test.result_percentage %} {% blocktranslate with test.result_percentage as percentage %} - Granted {{ percentage }}% points, comment: + Granted {{ percentage }}% points, comment: {% endblocktranslate %} {% endif %} {{ test.comment }} {% else %} {% if test.result_percentage %} {% blocktranslate with test.result_percentage as percentage %} - Granted {{ percentage }}% points. + Granted {{ percentage }}% points. {% endblocktranslate %} {% endif %} {% endif %} From 2a8688930aff74695df3a1bb0c205bb15d551c2b Mon Sep 17 00:00:00 2001 From: Mateusz Masiarz Date: Sun, 5 May 2024 16:37:20 +0200 Subject: [PATCH 4/5] Result percentage as fractions.Fraction --- oioioi/programs/controllers.py | 5 +++++ oioioi/programs/handlers.py | 8 +++++--- oioioi/programs/models.py | 3 ++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/oioioi/programs/controllers.py b/oioioi/programs/controllers.py index c6911504f..78638bd19 100644 --- a/oioioi/programs/controllers.py +++ b/oioioi/programs/controllers.py @@ -753,6 +753,11 @@ def render_report(self, request, report): signals_to_explain.add(signal) except ValueError: pass + if test.result_percentage_numerator and test.result_percentage_denominator: + test.result_percentage = f"""{round( + test.result_percentage_numerator / test.result_percentage_denominator, + 2 + ):g}""" tests_records = [ {'display_type': get_report_display_type(request, test), 'test': test} diff --git a/oioioi/programs/handlers.py b/oioioi/programs/handlers.py index 4bf8ebcfc..e8e26a4b6 100755 --- a/oioioi/programs/handlers.py +++ b/oioioi/programs/handlers.py @@ -1,6 +1,7 @@ import functools import logging from collections import defaultdict +from fractions import Fraction from django.conf import settings from django.db import transaction @@ -555,9 +556,10 @@ def make_report(env, kind='NORMAL', save_scores=True, **kwargs): test_report.score = result['score'] if save_scores else None test_report.status = result['status'] test_report.time_used = result['time_used'] - percentage = result.get('result_percentage', 0.) - if percentage != 100. and percentage != 0.: - test_report.result_percentage = percentage + percentage = Fraction(*result.get('result_percentage', (0, 1))) + if percentage != 100 and percentage != 0: + test_report.result_percentage_numerator = percentage.numerator + test_report.result_percentage_denominator = percentage.denominator comment = result.get('result_string', '') if comment.lower() in ['ok', 'time limit exceeded']: # Annoying diff --git a/oioioi/programs/models.py b/oioioi/programs/models.py index 6a0ad70a8..2529f67ea 100644 --- a/oioioi/programs/models.py +++ b/oioioi/programs/models.py @@ -326,7 +326,8 @@ class TestReport(models.Model): max_score = ScoreField(null=True, blank=True) time_used = models.IntegerField(blank=True) output_file = FileField(upload_to=make_output_filename, null=True, blank=True) - result_percentage = models.FloatField(null=True, blank=True) + result_percentage_numerator = models.IntegerField(null=True, blank=True) + result_percentage_denominator = models.IntegerField(null=True, blank=True) test = models.ForeignKey(Test, blank=True, null=True, on_delete=models.SET_NULL) test_name = models.CharField(max_length=30) From c73fb710d9c136a922499ee7a900a6262f1fe95e Mon Sep 17 00:00:00 2001 From: Mateusz Masiarz Date: Sun, 5 May 2024 16:37:35 +0200 Subject: [PATCH 5/5] Fix migrations --- .../0020_testreport_result_percentage.py | 18 --------------- ..._result_percentage_denominator_and_more.py | 23 +++++++++++++++++++ 2 files changed, 23 insertions(+), 18 deletions(-) delete mode 100644 oioioi/programs/migrations/0020_testreport_result_percentage.py create mode 100644 oioioi/programs/migrations/0020_testreport_result_percentage_denominator_and_more.py diff --git a/oioioi/programs/migrations/0020_testreport_result_percentage.py b/oioioi/programs/migrations/0020_testreport_result_percentage.py deleted file mode 100644 index 4d05fd623..000000000 --- a/oioioi/programs/migrations/0020_testreport_result_percentage.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 4.2.7 on 2023-12-13 16:25 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('programs', '0019_add_limits_override'), - ] - - operations = [ - migrations.AddField( - model_name='testreport', - name='result_percentage', - field=models.FloatField(blank=True, null=True), - ), - ] diff --git a/oioioi/programs/migrations/0020_testreport_result_percentage_denominator_and_more.py b/oioioi/programs/migrations/0020_testreport_result_percentage_denominator_and_more.py new file mode 100644 index 000000000..ce217f7c6 --- /dev/null +++ b/oioioi/programs/migrations/0020_testreport_result_percentage_denominator_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.11 on 2024-05-05 14:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('programs', '0019_add_limits_override'), + ] + + operations = [ + migrations.AddField( + model_name='testreport', + name='result_percentage_denominator', + field=models.IntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='testreport', + name='result_percentage_numerator', + field=models.IntegerField(blank=True, null=True), + ), + ]