예제 #1
0
class Incident(models.Model):
  class Meta:
    db_table = 'monitor_incident'
    ordering = ['-last_dttm']

  class StatusChoices(DjangoChoices):
    NORMAL = ChoiceItem("Normal", "Normal", 1)
    WARNING = ChoiceItem("Warning", 'Warning', 2)
    CRITICAL = ChoiceItem("Critical", "Critical", 3)
    BLACKOUT = ChoiceItem("Blackout", "Blackout", 4)
    UNKNOWN = ChoiceItem("Unknown", "Unknown", 5)
    WATCHING = ChoiceItem("Watching", "Watching", 6)

  server = ForeignKey(Server, on_delete=deletion.CASCADE, null=False)
  threshold_test = ForeignKey(ThresholdTest, on_delete=deletion.ProtectedError, null=False, default='')
  start_dttm = DateTimeField(editable=False, auto_now_add=True, null=False)
  last_dttm = DateTimeField()
  closed_dttm = DateTimeField(null=True, blank=True)
  closed_sw = BooleanField(default=False)
  min_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0)
  cur_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0)
  max_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0)
  cur_test_w_values = CharField(max_length=500, null=False, default='')
  pending_status = CharField(max_length=15, null=False, default='', choices=StatusChoices.choices)
  current_status = CharField(max_length=15, null=False, choices=StatusChoices.choices, default=StatusChoices.WATCHING)
  max_status = CharField(max_length=15, null=False, choices=StatusChoices.choices, default=StatusChoices.WATCHING)
  detail_element = CharField(max_length=25, null=False, default='')
  critical_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0)
  warning_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0)
  normal_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0)
  note = CharField(max_length=4000, null=True, blank=True)
  note_by = CharField(max_length=30, null=True, blank=True)
  ticket = CharField(max_length=30, null=True, blank=True)
  created_dttm = DateTimeField(editable=False, auto_now_add=True)
  updated_dttm = DateTimeField(auto_now=True)
예제 #2
0
class Metrics_CpuLoad(models.Model):
    class Meta:
        db_table = 'metrics_cpu_load'

    server = ForeignKey(Server, on_delete=deletion.CASCADE, null=False)
    created_dttm = DateTimeField(editable=False, auto_now_add=True, null=False)
    load_1min = DecimalField(validators=[MinValueValidator(0)],
                             decimal_places=2,
                             max_digits=4,
                             null=False,
                             default=0)
    load_5min = DecimalField(validators=[MinValueValidator(0)],
                             decimal_places=2,
                             max_digits=4,
                             null=False,
                             default=0)
    load_15min = DecimalField(validators=[MinValueValidator(0)],
                              decimal_places=2,
                              max_digits=4,
                              null=False,
                              default=0)
    error_cnt = IntegerField(validators=[MinValueValidator(0)],
                             null=False,
                             default=0)
    error_msg = CharField(max_length=2000, null=False, default='')
예제 #3
0
class GamePlayerEventSerializer(serializers.Serializer):
    game = serializers.IntegerField(required=True,
                                    validators=[MinValueValidator(0)])
    player = serializers.IntegerField(required=True,
                                      validators=[MinValueValidator(0)])
    minute = serializers.IntegerField(required=True,
                                      validators=[MinValueValidator(0)])
예제 #4
0
class SnippetSerializer(serializers.Serializer):
    """SnippetSerializer classdoc

    create: docstring for create from serializer classdoc
    """
    id = serializers.IntegerField(read_only=True, help_text="id serializer help text")
    created = UnixTimestampField(read_only=True)
    owner = serializers.PrimaryKeyRelatedField(
        queryset=get_user_model().objects.all(),
        default=serializers.CurrentUserDefault(),
        help_text="The ID of the user that created this snippet; if none is provided, "
                  "defaults to the currently logged in user."
    )
    owner_as_string = serializers.PrimaryKeyRelatedField(
        help_text="The ID of the user that created this snippet.",
        pk_field=serializers.CharField(help_text="this help text should not show up"),
        read_only=True,
        source='owner',
    )
    title = serializers.CharField(required=False, allow_blank=True, max_length=100)
    code = serializers.CharField(style={'base_template': 'textarea.html'})
    tags = serializers.ListField(child=serializers.CharField(min_length=2), min_length=3, max_length=15)
    linenos = serializers.BooleanField(required=False)
    language = LanguageSerializer(help_text="Sample help text for language")
    styles = serializers.MultipleChoiceField(choices=STYLE_CHOICES, default=['solarized-dark'])
    lines = serializers.ListField(child=serializers.IntegerField(), allow_empty=True, allow_null=True, required=False)
    example_projects = serializers.ListSerializer(child=ExampleProjectSerializer(), read_only=True,
                                                  validators=[MaxLengthValidator(100)])
    difficulty_factor = serializers.FloatField(help_text="this is here just to test FloatField",
                                               read_only=True, default=lambda: 6.9)
    rate_as_string = serializers.DecimalField(max_digits=6, decimal_places=3, default=Decimal('0.0'),
                                              validators=[MinValueValidator(Decimal('0.0'))])
    rate = serializers.DecimalField(max_digits=6, decimal_places=3, default=Decimal('0.0'), coerce_to_string=False,
                                    validators=[MinValueValidator(Decimal('0.0'))])

    def create(self, validated_data):
        """
        Create and return a new `Snippet` instance, given the validated data.
        """
        del validated_data['styles']
        del validated_data['lines']
        del validated_data['difficulty_factor']
        return Snippet.objects.create(**validated_data)

    def update(self, instance, validated_data):
        """
        Update and return an existing `Snippet` instance, given the validated data.
        """
        instance.title = validated_data.get('title', instance.title)
        instance.code = validated_data.get('code', instance.code)
        instance.linenos = validated_data.get('linenos', instance.linenos)
        instance.language = validated_data.get('language', instance.language)
        instance.style = validated_data.get('style', instance.style)
        instance.save()
        return instance
예제 #5
0
class GameStatusSerializer(serializers.Serializer):
    shots = serializers.IntegerField(required=True,
                                     validators=[MinValueValidator(0)])
    ball_possession = serializers.IntegerField(
        required=True,
        validators=[MaxValueValidator(100),
                    MinValueValidator(0)])
    corners = serializers.IntegerField(required=True,
                                       validators=[MinValueValidator(0)])
    goals = serializers.IntegerField(required=True,
                                     validators=[MinValueValidator(0)])
예제 #6
0
class BookingSerializer(Serializer):
    row_number = IntegerField(validators=(
        MinValueValidator(1),
        DynamicMaxValueValidator(
            lambda context: context['movie_session'].hall.rows_number, ),
    ))
    seat_number = IntegerField(validators=(
        MinValueValidator(1),
        DynamicMaxValueValidator(
            lambda context: context['movie_session'].hall.seats_per_row, ),
    ))
예제 #7
0
class Process(models.Model):
    owner = models.ForeignKey('auth.User',
                              related_name='process_list',
                              on_delete=models.CASCADE)
    service = models.CharField(max_length=15, choices=SERVICE_CHOICES)
    income = models.IntegerField(default=0)
    discount = models.IntegerField(default=0)
    tax_percent = models.PositiveIntegerField(
        default=1, validators=[MinValueValidator(1),
                               MaxValueValidator(25)])
    unit = models.PositiveIntegerField(default=1,
                                       validators=[MinValueValidator(1)])
    bulk = models.BooleanField(default=False)
    stage = models.PositiveIntegerField(
        default=1, validators=[MinValueValidator(1),
                               MaxValueValidator(10)])
    created = models.DateTimeField(auto_now_add=True)

    def grand_total(self):
        return (self.income - self.discount +
                (self.tax_percent * self.income) / 100)

    def clean(self):
        # Don't allow Hardware services to have stages more than 5.
        if self.service == 'Hardware' and self.stage > 5:
            raise ValidationError(
                {'service': _('Hardware service has no more than 5 stages.')})

        if self.bulk == 0 and self.stage > 1:
            raise ValidationError({
                'bulk':
                _('Items not purchased in bulk but Unit is defined more than 1.'
                  )
            })

        if self.bulk == 1 and self.stage == 1:
            raise ValidationError(
                {'bulk': _('Items purchased in bulk but unit is equal to 1.')})

    #To call the model clean method we will override save method.
    def save(self, *args, **kwargs):
        self.clean()
        return super(Process, self).save(*args, **kwargs)

    def __str__(self):
        return "{} at stage {}".format(self.service, self.stage)

    class Meta:
        ordering = ('-created', )
예제 #8
0
class EducationalOpportunity(models.Model):
    id = models.UUIDField(default=uuid.uuid4, primary_key=True)
    scales = ArrayField(size=6, validators=[MinLengthValidator(6), MinLengthValidator(6)],
                        base_field=models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(100)]))
    activity = models.CharField(max_length=50)

    objects = EducationalOpportunityManager()
예제 #9
0
class Submission(models.Model):
    filename = models.FileField(upload_to='submissions/')
    info = models.TextField(default='None')

    timeTaken = models.DecimalField(null=False,
                                    default=0,
                                    decimal_places=4,
                                    max_digits=4)

    late = models.BooleanField(default=False)

    status = EnumField(choices=['start', 'in_progress', 'complete', 'late'])
    result = EnumField(choices=['pass', 'fail', 'error'])
    language = EnumField(
        choices=['python2', 'python3', 'java', 'cpp', 'c', 'ruby'],
        default='python2')

    marks = models.IntegerField(
        validators=[MinValueValidator(0),
                    MaxValueValidator(100)])
    output = models.TextField

    def __str__(self):
        return 'Submission: ' + str(self.id) + '  ' + str(self.filename)

    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE,
                             null=False)
    assessment = models.ForeignKey(Assessment,
                                   on_delete=models.CASCADE,
                                   null=False,
                                   related_name="submissions")

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
예제 #10
0
    def __init__(self,
                 max_digits,
                 decimal_places,
                 coerce_to_string=None,
                 max_value=None,
                 min_value=None,
                 **kwargs):
        self.max_digits = max_digits
        self.decimal_places = decimal_places
        self.coerce_to_string = coerce_to_string if (
            coerce_to_string is not None) else self.coerce_to_string

        self.max_value = max_value
        self.min_value = min_value

        super(DecimalField, self).__init__(**kwargs)

        if self.max_value is not None:
            message = self.error_messages['max_value'].format(
                max_value=self.max_value)
            self.validators.append(
                MaxValueValidator(self.max_value, message=message))
        if self.min_value is not None:
            message = self.error_messages['min_value'].format(
                min_value=self.min_value)
            self.validators.append(
                MinValueValidator(self.min_value, message=message))
예제 #11
0
class Submission(models.Model):
    filename = models.FileField(upload_to="submissions/")
    info = models.TextField(default="None")

    timeTaken = models.DecimalField(null=False,
                                    default=0,
                                    decimal_places=4,
                                    max_digits=6)

    late = models.BooleanField(default=False)

    status = EnumField(choices=["start", "in_progress", "complete", "late"])
    result = EnumField(choices=["pass", "fail", "error", "overtime"])
    language = EnumField(
        choices=["python2", "python3", "java", "cpp", "c", "ruby"],
        default="python2")

    marks = models.IntegerField(
        validators=[MinValueValidator(0),
                    MaxValueValidator(100)])
    output = models.TextField

    def __str__(self):
        return "Submission: " + str(self.id) + "  " + str(self.filename)

    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE,
                             null=False)
    assessment = models.ForeignKey(Assessment,
                                   on_delete=models.CASCADE,
                                   null=False,
                                   related_name="submissions")

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
예제 #12
0
class Movie(models.Model):
    title = models.CharField(max_length=256)
    price = models.DecimalField(decimal_places=2, max_digits=5)
    genre = models.PositiveSmallIntegerField(null=True,
                                             choices=choices.GENRE_CHOICES)
    score = models.IntegerField(
        default=0, validators=[MinValueValidator(0),
                               MaxValueValidator(10)])
예제 #13
0
class ThresholdTest(models.Model):
  class Meta:
    db_table = 'monitor_threshold_test'

  threshold_metric = ForeignKey(ThresholdMetricLookup, on_delete=CASCADE, default='')
  detail_element = CharField(max_length=50, null=True, blank=True)
  normal_ticks = IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)], null=False, default=3)
  warning_ticks = IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)], null=False, default=3)
  warning_predicate_type = CharField(max_length=15, null=False, choices=PredicateTypeChoices.choices, default=PredicateTypeChoices.GTE)
  warning_value = CharField(max_length=100, null=False, default='')
  critical_ticks = IntegerField(validators=[MinValueValidator(1), MaxValueValidator(5)], null=False, default=3)
  critical_predicate_type = CharField(max_length=15, null=False, choices=PredicateTypeChoices.choices, default=PredicateTypeChoices.GTE)
  critical_value = CharField(max_length=100, null=False, default='')
  notification_method = ForeignKey(ThresholdNotificationMethodLookup, on_delete=CASCADE, default='')
  active_sw = BooleanField(default=True, null=False)
  created_dttm = DateTimeField(editable=False, auto_now_add=True)
  updated_dttm = DateTimeField(auto_now=True)
예제 #14
0
class IncidentDetail(models.Model):
  class Meta:
    db_table = 'monitor_incident_details'
    ordering = ['-created_dttm']

  incident = ForeignKey(Incident, on_delete=deletion.CASCADE, null=False)
  cur_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0)
  min_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0)
  max_value = DecimalField(null=False, max_digits=6, decimal_places=2, default=0)
  cur_test_w_values = CharField(max_length=500, null=False, default='')
  max_status = CharField(max_length=15, null=False, choices=Incident.StatusChoices.choices, default=Incident.StatusChoices.WATCHING)
  pending_status = CharField(max_length=15, null=False, choices=Incident.StatusChoices.choices, default=Incident.StatusChoices.WATCHING)
  current_status = CharField(max_length=15, null=False, choices=Incident.StatusChoices.choices, default=Incident.StatusChoices.WATCHING)
  critical_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0)
  warning_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0)
  normal_ticks = IntegerField(validators=[MinValueValidator(0), MaxValueValidator(3)], null=False, default=0)
  created_dttm = DateTimeField(editable=False, auto_now_add=True)
예제 #15
0
class GameMinimalSerializer(serializers.Serializer):
    date = serializers.DateField(required=True)
    journey = serializers.IntegerField(required=True,
                                       validators=[
                                           MaxValueValidator(MAX_JOURNEY),
                                           MinValueValidator(MIN_JOURNEY)
                                       ])
    stadium = serializers.CharField(required=True, max_length=200)
예제 #16
0
class OrderItem(models.Model):
    order = models.ForeignKey(
        # NOTE: naming a relation makes it easier to reference on a parent object
        Order,
        related_name="items",
        on_delete=models.CASCADE,
        null=False)
    product = models.ForeignKey(Product,
                                on_delete=models.DO_NOTHING,
                                null=False)
    quantity = models.PositiveIntegerField(null=False,
                                           validators=[MinValueValidator(1)])
    unit_price = models.DecimalField(
        null=False,
        decimal_places=2,
        max_digits=12,
        validators=[MinValueValidator(Decimal('0.01'))])
예제 #17
0
class StadiumSerializer(serializers.Serializer):
    name = serializers.CharField(required=True, max_length=200)
    address = serializers.CharField(required=True, max_length=200)
    number_seats = serializers.IntegerField(required=True,
                                            validators=[MinValueValidator(0)])
    picture = serializers.ImageField(required=False,
                                     allow_empty_file=True,
                                     allow_null=True)
class ExamPaperCreateRuleSerializer(serializers.ModelSerializer):
    grade = serializers.DecimalField(max_digits=5, decimal_places=2, default=1.00,
                                     validators=[
                                         MinValueValidator(Decimal((0, (0, 0, 1), -2))),
                                         MaxValueValidator(Decimal(100))])

    class Meta:
        model = ExamPaperCreateRule
        fields = ('section_name', 'problem_section_id', 'problem_type', 'problem_num', 'grade')
예제 #19
0
class Product(models.Model):
    name = models.TextField(null=False, blank=False)
    unit_price = models.DecimalField(
        null=False,
        decimal_places=2,
        max_digits=12,

        # NOTE: in validator context a decimal object must be declared (0.01 can't be inferred)
        validators=[MinValueValidator(Decimal('0.01'))])
    multiplier = models.PositiveIntegerField(null=True)
예제 #20
0
 def __init__(self, **kwargs):
     self.max_value = kwargs.pop('max_value', None)
     self.min_value = kwargs.pop('min_value', None)
     super(FloatField, self).__init__(**kwargs)
     if self.max_value is not None:
         message = self.error_messages['max_value'].format(max_value=self.max_value)
         self.validators.append(MaxValueValidator(self.max_value, message=message))
     if self.min_value is not None:
         message = self.error_messages['min_value'].format(min_value=self.min_value)
         self.validators.append(MinValueValidator(self.min_value, message=message))
class ExamPaperProblemsSerializer(serializers.ModelSerializer):
    content = serializers.JSONField(required=True)
    grade = serializers.DecimalField(max_digits=5, decimal_places=2,
                                     validators=[
                                         MinValueValidator(Decimal((0, (0, 0, 1), -2))),
                                         MaxValueValidator(Decimal(100))])

    class Meta:
        model = ExamPaperProblems
        fields = ('sequence', 'problem_id', 'grade', 'problem_type', 'content')
예제 #22
0
class Metrics_CollectionError(models.Model):
    class Meta:
        db_table = 'metrics_collections_error'

    server = ForeignKey(Server, on_delete=deletion.CASCADE, null=False)
    created_dttm = DateTimeField(editable=False, null=False)
    metric_name = CharField(max_length=40, null=False, blank=True)
    error_cnt = IntegerField(validators=[MinValueValidator(0)],
                             null=False,
                             default=0)
    error_msg = CharField(max_length=2000, null=False, default='')
예제 #23
0
class Ingestor(models.Model):
    value = models.IntegerField(null=False, blank=False, validators=[MinValueValidator(0)])
    msd = models.IntegerField(null=True, blank=True)

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        self.msd = self.get_msd(self.value)
        super().save()

    @staticmethod
    def get_msd(num):
        return num // (10 ** floor(log10(num)))
예제 #24
0
class ExamPaperFixedSerializer(serializers.ModelSerializer):
    problems = ExamPaperProblemsSerializer(many=True, required=False)
    description = serializers.CharField(required=False, allow_blank=True)
    passing_ratio = serializers.IntegerField(
        default=60, validators=[MinValueValidator(1),
                                MaxValueValidator(100)])

    class Meta:
        model = ExamPaper
        fields = (
            'name',
            'description',
            'create_type',
            'creator',
            'passing_ratio',
            'problems',
        )

    def create(self, validated_data):
        if 'problems' in validated_data:
            problems_data = validated_data.pop('problems')
        else:
            problems_data = []
        exam_paper = ExamPaper.objects.create(**validated_data)
        with transaction.atomic():
            for problem_data in problems_data:
                problem_serializer = ExamPaperProblemsSerializer(
                    data=problem_data)
                problem_serializer.is_valid(raise_exception=True)
                ExamPaperProblems.objects.create(
                    exam_paper=exam_paper, **problem_serializer.validated_data)

        return exam_paper

    def update(self, exam_paper, validated_data):
        if 'problems' in validated_data:
            problems_data = validated_data.pop('problems')
        else:
            problems_data = []
        with transaction.atomic():
            exam_paper.__dict__.update(**validated_data)
            exam_paper.save()
            exam_paper.problems.all().delete()
            for problem_data in problems_data:
                if problem_data.get('id'):
                    problem_data.pop('id')
                problem_serializer = ExamPaperProblemsSerializer(
                    data=problem_data)
                problem_serializer.is_valid(raise_exception=True)
                ExamPaperProblems.objects.create(
                    exam_paper=exam_paper, **problem_serializer.validated_data)

        return exam_paper
예제 #25
0
class Ingredient(models.Model):
    recipe = models.ForeignKey(Recipe,
                               related_name='ingredient_recipe',
                               on_delete=models.CASCADE)
    number = models.FloatField(default=0, validators=[
        MinValueValidator(0),
    ])
    unit = models.ForeignKey(Unit,
                             related_name='ingredient_unit',
                             on_delete=models.PROTECT)
    ingredient = models.CharField(max_length=100)
    comment = models.CharField(max_length=300, blank=True)
class GetQuestionValidateSerializer(serializers.Serializer):
    """問題取得用シリアライザー"""
    group_id = serializers.UUIDField(required=True)
    limit = serializers.IntegerField(required=False)
    degree = serializers.IntegerField(
        required=True, validators=[MinValueValidator(1),
                                   MaxValueValidator(3)])

    def validate_group_id(self, value):
        if not Question.objects.filter(group=value).values().exists():
            raise ValidationError(
                detail="group_id is not found. group_id={}".format(value))
        return value
예제 #27
0
class Book(models.Model):
    category_id = models.ForeignKey(Category, blank=True)
    author_id =  models.ForeignKey(Author, blank=False)
    name = models.CharField(max_length=30, blank=False)
    price = models.FloatField(blank=False)
    author_percentage = models.IntegerField(blank=False, validators=[MinValueValidator(1), MaxValueValidator(100)])
    description = models.TextField(blank=True)

    class Meta:
        db_table = 'book'

    def __str__(self):
        return self.name
예제 #28
0
파일: models.py 프로젝트: samudm98/nigth-on
class Comment(models.Model):
    name = models.CharField(max_length=128, blank=False)
    description = models.CharField(max_length=255, blank=True)
    image = models.ImageField(upload_to='img', null=True)
    stars = models.IntegerField(
        blank=False,
        null=False,
        validators=[MinValueValidator(1),
                    MaxValueValidator(5)])
    pub = models.ForeignKey(Pub,
                            null=False,
                            on_delete=models.CASCADE,
                            related_name="comments")
예제 #29
0
class Metrics_HostDetail(models.Model):
    class Meta:
        db_table = 'metrics_host_detail'

    server = ForeignKey(Server, on_delete=deletion.CASCADE, null=False)
    created_dttm = DateTimeField(editable=False, auto_now_add=True, null=False)
    ipAddress = CharField(max_length=20, null=True, blank=True)
    last_reboot = DateTimeField(null=True, blank=True)
    cpu = IntegerField(validators=[MinValueValidator(0)],
                       null=True,
                       blank=True)
    ram_gb = IntegerField(validators=[MinValueValidator(0)],
                          null=True,
                          blank=True)
    os_version = CharField(max_length=40, null=True, blank=True)
    db_version = CharField(max_length=30, null=True, blank=True)
    db_version_number = IntegerField(validators=[MinValueValidator(0)],
                                     null=True,
                                     blank=True)
    error_cnt = IntegerField(validators=[MinValueValidator(0)],
                             null=True,
                             blank=True)
    error_msg = CharField(max_length=2000, null=False, default='')
예제 #30
0
class GameSerializer(serializers.Serializer):
    # TODO -> EXTENDER DO GameSerializer
    date = serializers.DateField(required=True)
    journey = serializers.IntegerField(required=True,
                                       validators=[
                                           MaxValueValidator(MAX_JOURNEY),
                                           MinValueValidator(MIN_JOURNEY)
                                       ])
    stadium = serializers.CharField(required=True, max_length=200)
    teams = serializers.ListField(required=True,
                                  min_length=2,
                                  max_length=2,
                                  child=serializers.CharField(max_length=200))
    goals = serializers.ListField(
        required=True,
        min_length=2,
        max_length=2,
        child=serializers.IntegerField(validators=[MinValueValidator(0)]))
    shots = serializers.ListField(
        required=True,
        min_length=2,
        max_length=2,
        child=serializers.IntegerField(validators=[MinValueValidator(0)]))
    ball_possessions = serializers.ListField(
        required=True,
        min_length=2,
        max_length=2,
        child=serializers.IntegerField(
            required=True,
            validators=[MaxValueValidator(100),
                        MinValueValidator(0)]))
    corners = serializers.ListField(
        required=True,
        min_length=2,
        max_length=2,
        child=serializers.IntegerField(validators=[MinValueValidator(0)]))