2015-08-09 12:03:22 +00:00
|
|
|
# coding=utf-8
|
|
|
|
import json
|
|
|
|
|
|
|
|
from rest_framework import serializers
|
|
|
|
|
|
|
|
from account.models import User
|
2015-08-10 09:59:39 +00:00
|
|
|
from .models import Problem, ProblemTag
|
2015-08-09 12:03:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
class ProblemSampleSerializer(serializers.ListField):
|
|
|
|
input = serializers.CharField(max_length=3000)
|
|
|
|
output = serializers.CharField(max_length=3000)
|
|
|
|
|
|
|
|
|
|
|
|
class JSONField(serializers.Field):
|
|
|
|
def to_representation(self, value):
|
|
|
|
return json.loads(value)
|
|
|
|
|
|
|
|
|
|
|
|
class CreateProblemSerializer(serializers.Serializer):
|
|
|
|
title = serializers.CharField(max_length=50)
|
|
|
|
description = serializers.CharField(max_length=10000)
|
2015-08-13 10:08:51 +00:00
|
|
|
input_description = serializers.CharField(max_length=10000)
|
|
|
|
output_description = serializers.CharField(max_length=10000)
|
2015-08-09 12:03:22 +00:00
|
|
|
# [{"input": "1 1", "output": "2"}]
|
2015-08-10 14:55:22 +00:00
|
|
|
samples = ProblemSampleSerializer()
|
2015-08-09 12:03:22 +00:00
|
|
|
test_case_id = serializers.CharField(max_length=40)
|
2016-03-31 15:42:09 +00:00
|
|
|
time_limit = serializers.IntegerField(min_value=1, max_value=10000)
|
|
|
|
memory_limit = serializers.IntegerField(min_value=16)
|
2016-04-04 08:43:43 +00:00
|
|
|
spj = serializers.BooleanField()
|
|
|
|
spj_language = serializers.IntegerField(required=False, default=None)
|
|
|
|
spj_code = serializers.CharField(max_length=10000, required=False, default=None)
|
2015-08-09 12:03:22 +00:00
|
|
|
difficulty = serializers.IntegerField()
|
2015-08-10 14:55:22 +00:00
|
|
|
tags = serializers.ListField(child=serializers.CharField(max_length=10))
|
2015-08-17 08:32:12 +00:00
|
|
|
hint = serializers.CharField(max_length=3000, allow_blank=True)
|
2015-10-17 08:49:02 +00:00
|
|
|
source = serializers.CharField(max_length=100, required=False, default=None)
|
|
|
|
visible = serializers.BooleanField()
|
2015-08-09 12:03:22 +00:00
|
|
|
|
|
|
|
|
2015-08-15 05:54:30 +00:00
|
|
|
class ProblemTagSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = ProblemTag
|
|
|
|
|
|
|
|
|
2016-02-17 02:13:48 +00:00
|
|
|
class BaseProblemSerializer(serializers.ModelSerializer):
|
2015-08-10 14:55:22 +00:00
|
|
|
samples = JSONField()
|
2015-08-15 05:54:30 +00:00
|
|
|
tags = ProblemTagSerializer(many=True)
|
2015-08-09 12:03:22 +00:00
|
|
|
|
|
|
|
class UserSerializer(serializers.ModelSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = User
|
|
|
|
fields = ["username"]
|
|
|
|
|
|
|
|
created_by = UserSerializer()
|
|
|
|
|
2016-02-17 02:13:48 +00:00
|
|
|
|
|
|
|
class ProblemSerializer(BaseProblemSerializer):
|
|
|
|
class Meta:
|
|
|
|
model = Problem
|
|
|
|
|
|
|
|
|
|
|
|
class OpenAPIProblemSerializer(BaseProblemSerializer):
|
|
|
|
|
2015-08-09 12:03:22 +00:00
|
|
|
class Meta:
|
|
|
|
model = Problem
|
2016-05-30 08:57:51 +00:00
|
|
|
exclude = ["visible", "test_case_id", "spj_language", "spj_code", "spj_version"]
|
2015-08-09 12:03:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
class EditProblemSerializer(serializers.Serializer):
|
|
|
|
id = serializers.IntegerField()
|
|
|
|
title = serializers.CharField(max_length=50)
|
|
|
|
description = serializers.CharField(max_length=10000)
|
2015-08-13 10:08:51 +00:00
|
|
|
input_description = serializers.CharField(max_length=10000)
|
|
|
|
output_description = serializers.CharField(max_length=10000)
|
2015-08-09 12:03:22 +00:00
|
|
|
test_case_id = serializers.CharField(max_length=40)
|
2015-10-17 08:49:02 +00:00
|
|
|
source = serializers.CharField(max_length=100)
|
2015-09-08 03:03:59 +00:00
|
|
|
time_limit = serializers.IntegerField(min_value=1)
|
|
|
|
memory_limit = serializers.IntegerField(min_value=1)
|
2016-04-04 08:43:43 +00:00
|
|
|
spj = serializers.BooleanField()
|
|
|
|
spj_language = serializers.IntegerField(required=False, default=None)
|
|
|
|
spj_code = serializers.CharField(max_length=10000, required=False, default=None)
|
2015-08-09 12:03:22 +00:00
|
|
|
difficulty = serializers.IntegerField()
|
2015-08-15 05:54:30 +00:00
|
|
|
tags = serializers.ListField(child=serializers.CharField(max_length=20))
|
2015-08-10 14:55:22 +00:00
|
|
|
samples = ProblemSampleSerializer()
|
2015-08-17 08:32:12 +00:00
|
|
|
hint = serializers.CharField(max_length=3000, allow_blank=True)
|
2015-10-17 08:49:02 +00:00
|
|
|
visible = serializers.BooleanField()
|