Source code for oioioi.testrun.models

from django.conf import settings
from django.db import models
from django.utils.translation import gettext_lazy as _

from oioioi.base.fields import EnumField
from oioioi.contests.models import (
    SubmissionReport,
    submission_kinds,
    submission_report_kinds,
    submission_statuses,
)
from oioioi.filetracker.fields import FileField
from oioioi.problems.models import Problem, ProblemInstance
from oioioi.programs.models import ProgramSubmission

submission_statuses.register('TESTRUN_OK', _("No error"))
submission_kinds.register('TESTRUN', _("Test run"))
submission_report_kinds.register('TESTRUN', _("Test run report"))


[docs]def make_custom_input_filename(instance, filename): if not instance.id: instance.save() return 'testruns/%s/%d/in' % (instance.problem_instance.contest.id, instance.id)
[docs]class TestRunProgramSubmission(ProgramSubmission):
[docs] __test__ = False
[docs] input_file = FileField(upload_to=make_custom_input_filename)
[docs]def make_custom_output_filename(instance, filename): # This code is dead (it's result is ignored) with current implementation # of assigning file from filetracker to a FileField. submission = instance.submission_report.submission return 'testruns/%s/%d/%d-out' % ( submission.problem_instance.contest.id, submission.id, instance.submission_report.id, )
[docs]class TestRunConfig(models.Model): """Represents a test run config for problem instance. Test run for program is enabled iff this model exits. """
[docs] __test__ = False
[docs] problem_instance = models.OneToOneField( ProblemInstance, verbose_name=_("problem instance"), related_name='test_run_config', on_delete=models.CASCADE, )
[docs] test_runs_limit = models.IntegerField( default=settings.DEFAULT_TEST_RUNS_LIMIT, verbose_name=_("test runs limit") )
[docs] time_limit = models.IntegerField(verbose_name=_("time limit (ms)"))
[docs] memory_limit = models.IntegerField(verbose_name=_("memory limit (KiB)"))
[docs] class Meta(object):
[docs] verbose_name = _("test run config")
[docs] verbose_name_plural = _("test run configs")
[docs]class TestRunReport(models.Model):
[docs] __test__ = False
[docs] submission_report = models.ForeignKey(SubmissionReport, on_delete=models.CASCADE)
[docs] status = EnumField(submission_statuses)
[docs] comment = models.CharField(max_length=255, blank=True)
[docs] time_used = models.IntegerField(blank=True)
[docs] test_time_limit = models.IntegerField(null=True, blank=True)
[docs] output_file = FileField(upload_to=make_custom_output_filename)