MAKENTNU/web

View on GitHub
src/internal/validators.py

Summary

Maintainability
A
0 mins
Test Coverage
import re
from collections.abc import Collection

from django.core.exceptions import ValidationError
from django.core.validators import EmailValidator, RegexValidator
from django.utils.deconstruct import deconstructible
from django.utils.translation import gettext_lazy as _


@deconstructible
class WhitelistedEmailValidator(EmailValidator):
    message = _("Enter a valid email address ending in “@makentnu.no”.")

    def __init__(self, valid_domains: Collection[str], **kwargs):
        super().__init__(**kwargs)
        self.valid_domains = set(valid_domains)

    def validate_domain_part(self, domain_part):
        return domain_part in self.valid_domains


semester_string_regex = re.compile(r'^([VH])(\d{2}|\d{4})$', re.IGNORECASE)
# Used for validating user input through the form field
semester_string_validator = RegexValidator(semester_string_regex, _("Enter a valid format for a semester."))


# Used for validating the model field
def validate_semester_float(value):
    # If `value` does not end in .0 or .5:
    if value % 1 not in {0, 0.5}:
        raise ValidationError(
            "%(value)s is not a valid semester float",
            params={'value': value},
        )