1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
from django.core.exceptions import ValidationError as DjangoValidationError
try:
from rest_framework.serializers import CharField
from rest_framework.serializers import ValidationError as DRFValidationError
except ImportError:
ModuleNotFoundError("Django REST Framework is not installed.")
from colorfield.validators import (
color_hex_validator,
color_hexa_validator,
color_rgb_validator,
color_rgba_validator,
)
class ColorField(CharField):
default_error_messages = {
"invalid": [
color_hex_validator.message,
color_hexa_validator.message,
color_rgb_validator.message,
color_rgba_validator.message,
]
}
def to_internal_value(self, data):
errors = {
"hex": False,
"hexa": False,
"rgb": False,
"rgba": False,
}
try:
color_hex_validator(data)
except DjangoValidationError:
errors["hex"] = True
try:
color_hexa_validator(data)
except DjangoValidationError:
errors["hexa"] = True
try:
color_rgb_validator(data)
except DjangoValidationError:
errors["rgb"] = True
try:
color_rgba_validator(data)
except DjangoValidationError:
errors["rgba"] = True
if all(errors.values()):
raise DRFValidationError(self.default_error_messages.get("invalid"))
return data
|