Source code for oioioi.problems.management.commands.showbrokensolutions
from django.core.management.base import BaseCommand
from django.db.models import F
from django.utils.translation import gettext as _
from oioioi.problems.models import Problem
from oioioi.programs.models import ModelProgramSubmission
[docs]class Command(BaseCommand):
[docs] help = str(
_(
"Prints problems without 100-scored model solution. If "
"username is provided it shows only problems added by that "
"user."
)
)
[docs] def add_arguments(self, parser):
parser.add_argument(
'--user',
metavar='USERNAME',
help='Optional username for filtering problems.',
)
[docs] def handle(self, *args, **options):
username = options.get('user')
problems = self.get_problems_without_correct_modelsolution(username)
self.stdout.write('Problems: ' + str(len(problems)) + '\n')
for problem in problems:
message = u'- {name} / {short_name} ; id = {id}\n'.format(
name=problem.name, short_name=problem.short_name, id=str(problem.pk)
)
self.stdout.write(message)
[docs] def get_problems_without_correct_modelsolution(self, username=None):
if username is not None:
problems = Problem.objects.filter(author__username=username)
else:
problems = Problem.objects.all()
bad_problems = []
for problem in problems:
correct_model_submissions = ModelProgramSubmission.objects.filter(
score=F('submissionreport__scorereport__max_score'),
model_solution__problem=problem,
).order_by('id')
if not correct_model_submissions:
bad_problems.append(problem)
return bad_problems