Ejemplo n.º 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)
Ejemplo n.º 2
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', )
Ejemplo n.º 3
0
class Mark(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE)
    course = models.ForeignKey(Course, on_delete=models.CASCADE)
    semester = models.ForeignKey(Semester, on_delete=models.CASCADE)
    classroom = models.ForeignKey(ClassRoom, on_delete=models.CASCADE)
    mark = models.FloatField(
        max_length=2,
        validators=[MinValueValidator(0),
                    MaxValueValidator(20)],
        default=0)

    def __str__(self):
        return '{0} | {1} | {2} | {3}'.format(self.course, self.semester,
                                              self.mark, self.student)

    def save(self,
             force_insert=False,
             force_update=False,
             using=None,
             update_fields=None):
        self.classroom = ClassRoomEnrollment.objects.get(
            semester=self.semester, student=self.student).classroom
        super(Mark, self).save()

    class Meta:
        unique_together = (("student", "course", "semester"), )
Ejemplo n.º 4
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))
Ejemplo n.º 5
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)
Ejemplo n.º 6
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)
Ejemplo n.º 7
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)])
Ejemplo n.º 8
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)
Ejemplo n.º 9
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)
Ejemplo n.º 10
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)
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')
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')
Ejemplo n.º 13
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))
Ejemplo n.º 14
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)])
Ejemplo n.º 15
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
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
Ejemplo n.º 17
0
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")
Ejemplo n.º 18
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)]))
Ejemplo n.º 19
0
class Review(models.Model):
    grade = models.IntegerField(validators=[MinValueValidator(0), MaxValueValidator(5)])
    room = models.ForeignKey(Room, on_delete=models.CASCADE)
    guest = models.ForeignKey(NormalUser, on_delete=models.CASCADE)
    comment = models.TextField()
    created_at = models.DateField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def save(self, *args, **kwargs):
        # 후기 남기고 평점 남기면 바로 계산하여 저장
        super().save(*args, **kwargs)
        average = Review.objects.filter(room_id=self.room.pk).aggregate(Avg('grade'))
        room_rate = Room.objects.get(pk=self.room.pk)
        room_rate.rate_average = average['grade__avg']
        room_rate.save()
Ejemplo n.º 20
0
class Pub(models.Model):
    name = models.CharField(max_length=50, blank=False)
    address = models.CharField(max_length=255, blank=True)
    latitude = models.FloatField(blank=False, null=False)
    longitude = models.FloatField(blank=False, null=False)
    open = models.TimeField(blank=True)
    close = models.TimeField(blank=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    cheap = models.IntegerField(
        blank=False,
        null=False,
        validators=[MinValueValidator(1),
                    MaxValueValidator(3)])

    def __str__(self):
        return self.name + ' - ' + self.address
Ejemplo n.º 21
0
class ExamPaperRandomSerializer(serializers.ModelSerializer):
    rules = ExamPaperCreateRuleSerializer(many=True, required=False)
    passing_ratio = serializers.IntegerField(
        default=60, validators=[MinValueValidator(1),
                                MaxValueValidator(100)])
    description = serializers.CharField(required=False, allow_blank=True)

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

    def create(self, validated_data):
        if 'rules' in validated_data:
            rules_data = validated_data.pop('rules')
        else:
            rules_data = []
        exam_paper = ExamPaper.objects.create(**validated_data)
        with transaction.atomic():
            for rule_data in rules_data:
                rule_serializer = ExamPaperCreateRuleSerializer(data=rule_data)
                rule_serializer.is_valid(raise_exception=True)
                ExamPaperCreateRule.objects.create(
                    exam_paper=exam_paper, **rule_serializer.validated_data)

        return exam_paper

    def update(self, exam_paper, validated_data):
        if 'rules' in validated_data:
            rules_data = validated_data.pop('rules')
        else:
            rules_data = []
        with transaction.atomic():
            exam_paper.__dict__.update(**validated_data)
            exam_paper.save()
            exam_paper.rules.all().delete()
            for rule_data in rules_data:
                if rule_data.get('id'):
                    rule_data.pop('id')

                rule_serializer = ExamPaperCreateRuleSerializer(data=rule_data)
                rule_serializer.is_valid(raise_exception=True)
                ExamPaperCreateRule.objects.create(
                    exam_paper=exam_paper, **rule_serializer.validated_data)

        return exam_paper
Ejemplo n.º 22
0
class ConfiguracionEmpleadoForm(forms.Form):
    minutos_tolerancia = forms.IntegerField(
        label='Minutos de Tolerancia',
        required=True,
        validators=[MaxValueValidator(60),
                    MinValueValidator(0)],
        widget=forms.TextInput(
            attrs={
                'class': 'col-md-4 form-control',
                "type": "number",
                "min": "0",
                "max": "60",
                "value": "10"
            }))
    empleado = forms.Field(
        label="Empleado:",
        required=True,
        widget=forms.Select(attrs={'class': 'col-md-4 form-control'}))
Ejemplo n.º 23
0
class Pizza(models.Model):
    PIZZA_TYPES = (
        ('R', 'Regular'),
        ('S', 'Sicilian'),
    )
    name = models.CharField(max_length=255)
    small_price = models.DecimalField(max_digits=5, decimal_places=2)
    large_price = models.DecimalField(max_digits=5,
                                      decimal_places=2,
                                      null=True)
    max_toppings = models.PositiveSmallIntegerField(
        default=0, validators=[MaxValueValidator(9)])
    pizza_type = models.CharField(max_length=1,
                                  choices=PIZZA_TYPES,
                                  default='R')

    def __str__(self):
        return "{pizza_type} : {pizza_name}".format(
            pizza_type=self.get_pizza_type_display(), pizza_name=self.name)
Ejemplo n.º 24
0
class BasicSerializer(serializers.Serializer):
    VIN = serializers.CharField(validators=[validate_vin], read_only=False)
    year = serializers.IntegerField(
        validators=[MinValueValidator(1980), MaxValueValidator(datetime.now().year)])
    make = serializers.CharField(max_length=100)
    model = serializers.CharField(max_length=100, allow_blank=True)
    type = serializers.CharField(max_length=100, allow_blank=True)
    color = serializers.CharField(max_length=100, allow_blank=True)
    dimensions = serializers.JSONField()
    weight = serializers.JSONField()

    def create(self, validated_data):
        """
        Create and return a new `Basic VIN detail` instance, given the validated data.
        """
        return Basic.objects.create(**validated_data)

    def update(self, instance, validated_data):
        pass
Ejemplo n.º 25
0
class Question(models.Model):
    question_id = models.AutoField(primary_key=True)
    group = models.ForeignKey(Group, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    question_type = models.CharField(max_length=6,
                                     choices=(('input', 'input'), ('select',
                                                                   'select')),
                                     default='select',
                                     null=False)
    degree = models.IntegerField(
        validators=[MinValueValidator(1),
                    MaxValueValidator(3)], null=False)
    question = models.CharField(max_length=255, null=False)
    shape_path = models.URLField(null=True)
    correct = models.CharField(max_length=255, null=False)
    choice_1 = models.CharField(max_length=255, null=True)
    choice_2 = models.CharField(max_length=255, null=True)
    choice_3 = models.CharField(max_length=255, null=True)
    choice_4 = models.CharField(max_length=255, null=True)
    is_deleted = models.BooleanField(default=False, null=False)
    create_date = models.DateTimeField(default=timezone.now, null=False)
    update_date = models.DateTimeField(default=timezone.now, null=False)
Ejemplo n.º 26
0
class Review(models.Model):

    user = models.ForeignKey(
        verbose_name='user',
        to=settings.AUTH_USER_MODEL,
        related_name='reviews',
        on_delete=models.SET_NULL,
        null=True,
    )

    restaurant = models.ForeignKey(
        Restaurant,
        related_name='reviews',
        on_delete=models.CASCADE,
    )

    content = models.TextField(verbose_name='review_content', )

    rating = models.IntegerField(
        verbose_name='restaurant_rating',
        validators=[MaxValueValidator(5),
                    MinValueValidator(1)])

    created = models.DateTimeField(
        verbose_name='date_created',
        auto_now_add=True,
    )

    modified = models.DateTimeField(
        verbose_name='date_modified',
        auto_now=True,
    )

    class Meta:
        verbose_name = 'Review'
        verbose_name_plural = 'Reviews'
        ordering = ['-modified']
        unique_together = [('user', 'restaurant')]
Ejemplo n.º 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
Ejemplo n.º 28
0
class BattleShipSerializer(serializers.ModelSerializer):
    """
    Read
    fleet_type: battleship, cruiser, ...
    is_horizontal: True/False
    staring poink: (1,1)
    board: board_id
    """
    x_axis = serializers.IntegerField(validators=[
        MinValueValidator(1),
        MaxValueValidator(settings.OCEAN_SIZE)
    ])
    y_axis = serializers.IntegerField(validators=[
        MinValueValidator(1),
        MaxValueValidator(settings.OCEAN_SIZE)
    ])
    vertical = serializers.BooleanField(default=True)

    class Meta:
        model = Fleet
        fields = [
            'id',
            'board',
            'fleet_type',
            'vertical',
            'x_axis',
            'y_axis',
        ]
        read_only_fields = ['id']

    @staticmethod
    def validate_quota(board: Board, fleet_type: ChoiceItem, ship_qty: int,
                       ship_size: int, attrs: typing.Dict):
        """Acrobatic here because data is flowing backward"""
        if Fleet.objects.filter(
                board=board,
                fleet_type=fleet_type).count() >= ship_qty * ship_size:
            raise serializers.ValidationError(
                detail={'board': f"{board} has {fleet_type} over quota"})
        else:
            return attrs

    # Can not use `validate_fleet_type()` method since I have to use `board`
    def validate(self, attrs):
        board = attrs.get('board')
        if attrs.get('fleet_type') == Fleet.FleetType.battleship:
            return self.validate_quota(board, Fleet.FleetType.battleship,
                                       settings.BATTLESHIP_QTY,
                                       settings.BATTLESHIP_SIZE, attrs)
        if attrs.get('fleet_type') == Fleet.FleetType.cruiser:
            return self.validate_quota(board, Fleet.FleetType.cruiser,
                                       settings.CRUISER_QTY,
                                       settings.CRUISER_SIZE, attrs)
        if attrs.get('fleet_type') == Fleet.FleetType.destroyer:
            return self.validate_quota(board, Fleet.FleetType.destroyer,
                                       settings.DESTROYER_QTY,
                                       settings.DESTROYER_SIZE, attrs)
        if attrs.get('fleet_type') == Fleet.FleetType.submarine:
            return self.validate_quota(board, Fleet.FleetType.submarine,
                                       settings.SUBMARINE_QTY,
                                       settings.SUBMARINE_SIZE, attrs)
        else:
            raise serializers.ValidationError(
                detail={'fleet_type': f"Unknown fleet_type"})

    def create(self, validated_data):
        # Add battleship
        if validated_data.get('fleet_type') == Fleet.FleetType.battleship:
            objs = add_battleship(validated_data.get('board'),
                                  validated_data.get('x_axis'),
                                  validated_data.get('y_axis'),
                                  validated_data.get('vertical'))
        elif validated_data.get('fleet_type') == Fleet.FleetType.cruiser:
            objs = add_cruiser(validated_data.get('board'),
                               validated_data.get('x_axis'),
                               validated_data.get('y_axis'),
                               validated_data.get('vertical'))
        elif validated_data.get('fleet_type') == Fleet.FleetType.destroyer:
            objs = add_destroyer(validated_data.get('board'),
                                 validated_data.get('x_axis'),
                                 validated_data.get('y_axis'),
                                 validated_data.get('vertical'))
        else:  # validated_data.get('fleet_type') == Fleet.FleetType.submarine:
            # With choices. I am sure it will be submarine
            objs = add_submarine(validated_data.get('board'),
                                 validated_data.get('x_axis'),
                                 validated_data.get('y_axis'),
                                 validated_data.get('vertical'))
        return objs[0]
Ejemplo n.º 29
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()