from django.db import models
from django.forms import Textarea
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
from oioioi.base import admin
from oioioi.base.admin import NO_CATEGORY
from oioioi.base.utils import make_html_link
from oioioi.contests.utils import is_contest_admin
from oioioi.problems.admin import ProblemAdmin
from oioioi.programs.models import Test
from oioioi.testspackages.forms import TestsPackageInlineFormSet
from oioioi.testspackages.models import TestsPackage
[docs]class TestsPackageInline(admin.TabularInline):
[docs] readonly_fields = ['package_link']
[docs] fields = ['name', 'description', 'tests', 'publish_date', 'package_link']
[docs] def has_add_permission(self, request, obj=None):
return is_contest_admin(request)
[docs] def has_delete_permission(self, request, obj=None):
return is_contest_admin(request)
[docs] def has_change_permission(self, request, obj=None):
return is_contest_admin(request)
[docs] def package_link(self, instance):
if instance.id is not None:
href = reverse(
'test',
kwargs={
'package_id': instance.id,
'contest_id': instance.problem.contest.id,
},
)
return make_html_link(href, instance.package.file.name)
return None
[docs] package_link.short_description = _("Package file")
[docs]class TestsPackageAdminMixin(object):
"""Adds :class:`~oioioi.testspackages.models.TestsPackage` to an admin
panel.
"""
def __init__(self, *args, **kwargs):
super(TestsPackageAdminMixin, self).__init__(*args, **kwargs)
self.inlines = tuple(self.inlines) + (TestsPackageInline,)
ProblemAdmin.mix_in(TestsPackageAdminMixin)