class CreateSubmissionSerializer(serializers.Serializer): # 创建 problem_id = serializers.IntegerField() language = LanguageNameChoiceField() code = serializers.CharField(max_length=1024 * 1024) contest_id = serializers.IntegerField(required=False) captcha = serializers.CharField(required=False)
class CreateEditWebsiteConfigSerializer(serializers.Serializer): # 创建编辑网站配置类 website_base_url = serializers.CharField(max_length=128) website_name = serializers.CharField(max_length=64) website_name_shortcut = serializers.CharField(max_length=64) website_footer = serializers.CharField(max_length=1024 * 1024) allow_register = serializers.BooleanField() submission_list_show_all = serializers.BooleanField()
class ContestAdminSerializer(serializers.ModelSerializer): # 比赛管理员信息 created_by = UsernameSerializer() status = serializers.CharField() contest_type = serializers.CharField() class Meta: model = Contest fields = "__all__"
class JudgeServerHeartbeatSerializer(serializers.Serializer): # 判题服务器请求响应序列化类 hostname = serializers.CharField(max_length=128) judger_version = serializers.CharField(max_length=32) cpu_core = serializers.IntegerField(min_value=1) memory = serializers.FloatField(min_value=0, max_value=100) cpu = serializers.FloatField(min_value=0, max_value=100) action = serializers.ChoiceField(choices=("heartbeat", )) service_url = serializers.CharField(max_length=256)
class EditSMTPConfigSerializer(serializers.Serializer): # 编辑邮件配置类 server = serializers.CharField(max_length=128) port = serializers.IntegerField(default=25) email = serializers.CharField(max_length=256) password = serializers.CharField(max_length=128, required=False, allow_null=True, allow_blank=True) tls = serializers.BooleanField()
class EditUserSerializer(serializers.Serializer): id = serializers.IntegerField() username = serializers.CharField(max_length=32) real_name = serializers.CharField(max_length=32, allow_blank=True, allow_null=True) password = serializers.CharField(min_length=6, allow_blank=True, required=False, default=None) email = serializers.EmailField(max_length=64) admin_type = serializers.ChoiceField(choices=(AdminType.REGULAR_USER, AdminType.ADMIN, AdminType.SUPER_ADMIN)) problem_permission = serializers.ChoiceField(choices=(ProblemPermission.NONE, ProblemPermission.OWN, ProblemPermission.ALL)) open_api = serializers.BooleanField() two_factor_auth = serializers.BooleanField() is_disabled = serializers.BooleanField()
class CreateContestSerializer(serializers.Serializer): # 创建比赛 title = serializers.CharField(max_length=128) description = serializers.CharField() start_time = serializers.DateTimeField() end_time = serializers.DateTimeField() rule_type = serializers.ChoiceField( choices=[ContestRuleType.ACM, ContestRuleType.OI]) password = serializers.CharField(allow_blank=True, max_length=32) visible = serializers.BooleanField() real_time_rank = serializers.BooleanField() allowed_ip_ranges = serializers.ListField( child=serializers.CharField(max_length=32), allow_empty=True)
class EditContestSerializer(serializers.Serializer): # 编辑提交比赛信息 id = serializers.IntegerField() title = serializers.CharField(max_length=128) description = serializers.CharField() start_time = serializers.DateTimeField() end_time = serializers.DateTimeField() password = serializers.CharField(allow_blank=True, allow_null=True, max_length=32) visible = serializers.BooleanField() real_time_rank = serializers.BooleanField() allowed_ip_ranges = serializers.ListField(child=serializers.CharField( max_length=32))
class JudgeServerSerializer(serializers.ModelSerializer): # 判题服务器类, 模板序列化 status = serializers.CharField() class Meta: model = JudgeServer fields = "__all__"
class ImportProblemSerializer(serializers.Serializer): # 导入问题的序列化器:id、标题、描述、输入输出描述、提示、测试样例分数、 # 时间限制、内存限制、例子、模板、特殊评判要求、规则类型、来源、答案、标签 display_id = serializers.CharField(max_length=128) title = serializers.CharField(max_length=128) description = FormatValueSerializer() input_description = FormatValueSerializer() output_description = FormatValueSerializer() hint = FormatValueSerializer() test_case_score = serializers.ListField(child=TestCaseScoreSerializer(), allow_null=True) time_limit = serializers.IntegerField(min_value=1, max_value=60000) memory_limit = serializers.IntegerField(min_value=1, max_value=10240) samples = serializers.ListField(child=CreateSampleSerializer()) template = serializers.DictField(child=TemplateSerializer()) spj = SPJSerializer(allow_null=True) rule_type = serializers.ChoiceField(choices=ProblemRuleType.choices()) source = serializers.CharField(max_length=200, allow_blank=True, allow_null=True) answers = serializers.ListField(child=AnswerSerializer()) tags = serializers.ListField(child=serializers.CharField())
class EditUserProfileSerializer(serializers.Serializer): real_name = serializers.CharField(max_length=32, allow_null=True, required=False) avatar = serializers.CharField(max_length=256, allow_blank=True, required=False) blog = serializers.URLField(max_length=256, allow_blank=True, required=False) mood = serializers.CharField(max_length=256, allow_blank=True, required=False) github = serializers.CharField(max_length=64, allow_blank=True, required=False) school = serializers.CharField(max_length=64, allow_blank=True, required=False) major = serializers.CharField(max_length=64, allow_blank=True, required=False) language = serializers.CharField(max_length=32, allow_blank=True, required=False)
class FPSProblemSerializer(serializers.Serializer): # 上传文件的序列化器:标题、描述、输入输出、提示、时间限制、内存限制、例子、问题来源、特殊评判、模板(头尾和附加) class UnitSerializer(serializers.Serializer): unit = serializers.ChoiceField(choices=["MB", "s", "ms"]) value = serializers.IntegerField(min_value=1, max_value=60000) title = serializers.CharField(max_length=128) description = serializers.CharField() input = serializers.CharField() output = serializers.CharField() hint = serializers.CharField(allow_blank=True, allow_null=True) time_limit = UnitSerializer() memory_limit = UnitSerializer() samples = serializers.ListField(child=CreateSampleSerializer()) source = serializers.CharField(max_length=200, allow_blank=True, allow_null=True) spj = SPJSerializer(allow_null=True) template = serializers.ListField(child=serializers.DictField(), allow_empty=True, allow_null=True) append = serializers.ListField(child=serializers.DictField(), allow_empty=True, allow_null=True) prepend = serializers.ListField(child=serializers.DictField(), allow_empty=True, allow_null=True)
class CreateContestAnnouncementSerializer(serializers.Serializer): # 创建比赛通知 contest_id = serializers.IntegerField() title = serializers.CharField(max_length=128) content = serializers.CharField() visible = serializers.BooleanField()
class CreateTestCaseScoreSerializer(serializers.Serializer): # 创建测试样例分数 input_name = serializers.CharField(max_length=32) output_name = serializers.CharField(max_length=32) score = serializers.IntegerField(min_value=0)
class EditAnnouncementSerializer(serializers.Serializer): # 编辑通知 id = serializers.IntegerField() title = serializers.CharField(max_length=64) content = serializers.CharField(max_length=1024 * 1024 * 8) visible = serializers.BooleanField()
class SPJSerializer(serializers.Serializer): # 特殊评判序列化器,源代码,语言 code = serializers.CharField() language = SPJLanguageNameChoiceField()
class AnswerSerializer(serializers.Serializer): # 答案序列化器,源代码,语言 code = serializers.CharField() language = LanguageNameChoiceField()
class TestCaseScoreSerializer(serializers.Serializer): # 测试样例总分序列化:分数,输入名称1.in,输出名称1.out score = serializers.IntegerField(min_value=1) input_name = serializers.CharField(max_length=32) output_name = serializers.CharField(max_length=32)
class TemplateSerializer(serializers.Serializer): # 模板序列化器,测试通过的示例代码模板 prepend = serializers.CharField() template = serializers.CharField() append = serializers.CharField()
class AddContestProblemSerializer(serializers.Serializer): # 添加比赛问题的序列化:比赛id、问题id、是否公开 contest_id = serializers.IntegerField() problem_id = serializers.IntegerField() display_id = serializers.CharField()
class FormatValueSerializer(serializers.Serializer): # 格式化值序列化,为HTML或者markdown二选一,值允许为空 format = serializers.ChoiceField(choices=["html", "markdown"]) value = serializers.CharField(allow_blank=True)
class ContestProblemMakePublicSerializer(serializers.Serializer): # 将比赛问题公开序列话器,id和display_id作为标识 id = serializers.IntegerField() display_id = serializers.CharField(max_length=32)
class CreateSampleSerializer(serializers.Serializer): # 创建样例,使用来对一个问题创建例子代码,例如A+B问题 input = serializers.CharField(trim_whitespace=False) output = serializers.CharField(trim_whitespace=False)
class ContestPasswordVerifySerializer(serializers.Serializer): # 比赛密码验证逻辑 contest_id = serializers.IntegerField() password = serializers.CharField(max_length=30, required=True)
class CreateAnnouncementSerializer(serializers.Serializer): # 创建通知 title = serializers.CharField(max_length=64) content = serializers.CharField(max_length=1024 * 1024 * 8) visible = serializers.BooleanField()
class CreateOrEditProblemSerializer(serializers.Serializer): # 创建或者编辑问题,此类可以作为基类 _id = serializers.CharField(max_length=32, allow_blank=True, allow_null=True) title = serializers.CharField(max_length=1024) description = serializers.CharField() input_description = serializers.CharField() output_description = serializers.CharField() samples = serializers.ListField(child=CreateSampleSerializer(), allow_empty=False) test_case_id = serializers.CharField(max_length=32) test_case_score = serializers.ListField(child=CreateTestCaseScoreSerializer(), allow_empty=True) time_limit = serializers.IntegerField(min_value=1, max_value=1000 * 60) memory_limit = serializers.IntegerField(min_value=1, max_value=1024) languages = LanguageNameMultiChoiceField() template = serializers.DictField(child=serializers.CharField(min_length=1)) rule_type = serializers.ChoiceField(choices=[ProblemRuleType.ACM, ProblemRuleType.OI]) spj = serializers.BooleanField() spj_language = SPJLanguageNameChoiceField(allow_blank=True, allow_null=True) spj_code = serializers.CharField(allow_blank=True, allow_null=True) spj_compile_ok = serializers.BooleanField(default=False) visible = serializers.BooleanField() difficulty = serializers.ChoiceField(choices=Difficulty.choices()) tags = serializers.ListField(child=serializers.CharField(max_length=32), allow_empty=False) hint = serializers.CharField(allow_blank=True, allow_null=True) source = serializers.CharField(max_length=256, allow_blank=True, allow_null=True)
class ShareSubmissionSerializer(serializers.Serializer): # 分享 id = serializers.CharField() shared = serializers.BooleanField()
class ACMContestHelperSerializer(serializers.Serializer): # 比赛帮助类 contest_id = serializers.IntegerField() problem_id = serializers.CharField() rank_id = serializers.IntegerField() checked = serializers.BooleanField()
class CompileSPJSerializer(serializers.Serializer): # 编译特殊评判序列化器 spj_language = SPJLanguageNameChoiceField() spj_code = serializers.CharField()
class EditContestAnnouncementSerializer(serializers.Serializer): # 编辑比赛通知 id = serializers.IntegerField() title = serializers.CharField(max_length=128, required=False) content = serializers.CharField(required=False, allow_blank=True) visible = serializers.BooleanField(required=False)