mirror of
https://github.com/QingdaoU/OnlineJudge.git
synced 2025-11-04 14:49:58 +08:00
后端增加题目 io mode 相关逻辑
This commit is contained in:
parent
1adfd35615
commit
d969c6fe5e
20
problem/migrations/0013_problem_io_mode.py
Normal file
20
problem/migrations/0013_problem_io_mode.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Generated by Django 2.1.7 on 2019-03-12 07:13
|
||||||
|
|
||||||
|
import django.contrib.postgres.fields.jsonb
|
||||||
|
from django.db import migrations
|
||||||
|
import problem.models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('problem', '0012_auto_20180501_0436'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='problem',
|
||||||
|
name='io_mode',
|
||||||
|
field=django.contrib.postgres.fields.jsonb.JSONField(default=problem.models._default_io_mode),
|
||||||
|
),
|
||||||
|
]
|
||||||
@ -25,6 +25,15 @@ class ProblemDifficulty(object):
|
|||||||
Low = "Low"
|
Low = "Low"
|
||||||
|
|
||||||
|
|
||||||
|
class ProblemIOMode(Choices):
|
||||||
|
standard = "Standard IO"
|
||||||
|
file = "File IO"
|
||||||
|
|
||||||
|
|
||||||
|
def _default_io_mode():
|
||||||
|
return {"io_mode": ProblemIOMode.standard, "input": "input.txt", "output": "output.txt"}
|
||||||
|
|
||||||
|
|
||||||
class Problem(models.Model):
|
class Problem(models.Model):
|
||||||
# display ID
|
# display ID
|
||||||
_id = models.TextField(db_index=True)
|
_id = models.TextField(db_index=True)
|
||||||
@ -52,6 +61,8 @@ class Problem(models.Model):
|
|||||||
time_limit = models.IntegerField()
|
time_limit = models.IntegerField()
|
||||||
# MB
|
# MB
|
||||||
memory_limit = models.IntegerField()
|
memory_limit = models.IntegerField()
|
||||||
|
# io mode
|
||||||
|
io_mode = JSONField(default=_default_io_mode)
|
||||||
# special judge related
|
# special judge related
|
||||||
spj = models.BooleanField(default=False)
|
spj = models.BooleanField(default=False)
|
||||||
spj_language = models.TextField(null=True)
|
spj_language = models.TextField(null=True)
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import re
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
from options.options import SysOptions
|
from options.options import SysOptions
|
||||||
@ -5,7 +7,7 @@ from utils.api import UsernameSerializer, serializers
|
|||||||
from utils.constants import Difficulty
|
from utils.constants import Difficulty
|
||||||
from utils.serializers import LanguageNameMultiChoiceField, SPJLanguageNameChoiceField, LanguageNameChoiceField
|
from utils.serializers import LanguageNameMultiChoiceField, SPJLanguageNameChoiceField, LanguageNameChoiceField
|
||||||
|
|
||||||
from .models import Problem, ProblemRuleType, ProblemTag
|
from .models import Problem, ProblemRuleType, ProblemTag, ProblemIOMode
|
||||||
from .utils import parse_problem_template
|
from .utils import parse_problem_template
|
||||||
|
|
||||||
|
|
||||||
@ -29,6 +31,19 @@ class CreateProblemCodeTemplateSerializer(serializers.Serializer):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ProblemIOModeSerializer(serializers.Serializer):
|
||||||
|
io_mode = serializers.ChoiceField(choices=ProblemIOMode.choices())
|
||||||
|
input = serializers.CharField()
|
||||||
|
output = serializers.CharField()
|
||||||
|
|
||||||
|
def validate(self, attrs):
|
||||||
|
if attrs["input"] == attrs["output"]:
|
||||||
|
raise serializers.ValidationError("Invalid io mode")
|
||||||
|
for item in (attrs["input"], attrs["output"]):
|
||||||
|
if not re.match("^[a-zA-Z0-9.]+$", item):
|
||||||
|
raise serializers.ValidationError("Invalid io file name format")
|
||||||
|
return attrs
|
||||||
|
|
||||||
class CreateOrEditProblemSerializer(serializers.Serializer):
|
class CreateOrEditProblemSerializer(serializers.Serializer):
|
||||||
_id = serializers.CharField(max_length=32, allow_blank=True, allow_null=True)
|
_id = serializers.CharField(max_length=32, allow_blank=True, allow_null=True)
|
||||||
title = serializers.CharField(max_length=1024)
|
title = serializers.CharField(max_length=1024)
|
||||||
@ -43,6 +58,7 @@ class CreateOrEditProblemSerializer(serializers.Serializer):
|
|||||||
languages = LanguageNameMultiChoiceField()
|
languages = LanguageNameMultiChoiceField()
|
||||||
template = serializers.DictField(child=serializers.CharField(min_length=1))
|
template = serializers.DictField(child=serializers.CharField(min_length=1))
|
||||||
rule_type = serializers.ChoiceField(choices=[ProblemRuleType.ACM, ProblemRuleType.OI])
|
rule_type = serializers.ChoiceField(choices=[ProblemRuleType.ACM, ProblemRuleType.OI])
|
||||||
|
io_mode = ProblemIOModeSerializer()
|
||||||
spj = serializers.BooleanField()
|
spj = serializers.BooleanField()
|
||||||
spj_language = SPJLanguageNameChoiceField(allow_blank=True, allow_null=True)
|
spj_language = SPJLanguageNameChoiceField(allow_blank=True, allow_null=True)
|
||||||
spj_code = serializers.CharField(allow_blank=True, allow_null=True)
|
spj_code = serializers.CharField(allow_blank=True, allow_null=True)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user