old_console/core/validators.py
2024-11-02 14:12:45 +03:00

52 lines
2.2 KiB
Python

import re
from pathlib import Path
from django.core.exceptions import ValidationError
from django.core.validators import URLValidator
from django.utils.translation import gettext_lazy
def mac_address_validator(value):
""" Validator for checking if entered value is correct MAC address.
Valid MAC address formats for this validator are:
1. String, separated with '-', e.g. '01-3A-4f-Ee-23-AF'
2. String, separated with ':', e.g. '01:3E:4F:EE:23:af'
:param value: value from source for validation
:return: pass validation or raise validation error
"""
validation_error_message = gettext_lazy('Incorrect format of MAC address')
# Regex value, which will validate provided string
mac_regex = '[0-9a-f]{2}([-:]?)[0-9a-f]{2}(\\1[0-9a-f]{2}){4}$'
if not re.match(mac_regex, value.lower()):
raise ValidationError(message=validation_error_message)
def domain_or_ip_validator(value):
""" Validator for checking if entered value is IP address or domain
:param value: value from user
:return: pass validation or raise validation error
"""
validation_error_message = gettext_lazy('Please enter valid domain or IP address')
validator = URLValidator()
value_with_scheme = f'https://{value}'
try:
validator(value_with_scheme)
except ValidationError:
raise ValidationError(message=validation_error_message)
class ValidateFileExtension:
"""Custom file extension form validator"""
def __init__(self, allowed_extensions):
if allowed_extensions is not None:
allowed_extensions = [allowed_extension.lower() for allowed_extension in allowed_extensions]
self.allowed_extensions = allowed_extensions
def __call__(self, value):
self.extension = Path(value.name).suffix.lower()
self.message = gettext_lazy(
"File extension '{extension}' is not allowed. Allowed extensions are: '{allowed_extensions}'.").format(
extension=self.extension, allowed_extensions=', '.join(self.allowed_extensions))
if self.allowed_extensions is not None and self.extension not in self.allowed_extensions:
raise ValidationError(self.message)