authentik.lib.validators
Serializer validators
1"""Serializer validators""" 2 3from django.utils.translation import gettext_lazy as _ 4from rest_framework.exceptions import ValidationError 5from rest_framework.serializers import Serializer 6from rest_framework.utils.representation import smart_repr 7 8 9class RequiredTogetherValidator: 10 """Serializer-level validator that ensures all fields in `fields` are only 11 used together""" 12 13 fields: list[str] 14 requires_context = True 15 message = _("The fields {field_names} must be used together.") 16 17 def __init__(self, fields: list[str], message: str | None = None) -> None: 18 self.fields = fields 19 self.message = message or self.message 20 21 def __call__(self, attrs: dict, serializer: Serializer): 22 """Check that if any of the fields in `self.fields` are set, all of them must be set""" 23 if any(field in attrs for field in self.fields) and not all( 24 field in attrs for field in self.fields 25 ): 26 field_names = ", ".join(self.fields) 27 message = self.message.format(field_names=field_names) 28 raise ValidationError(message, code="required") 29 30 def __repr__(self): 31 return f"<{self.__class__.__name__}(fields={smart_repr(self.fields)})>"
class
RequiredTogetherValidator:
10class RequiredTogetherValidator: 11 """Serializer-level validator that ensures all fields in `fields` are only 12 used together""" 13 14 fields: list[str] 15 requires_context = True 16 message = _("The fields {field_names} must be used together.") 17 18 def __init__(self, fields: list[str], message: str | None = None) -> None: 19 self.fields = fields 20 self.message = message or self.message 21 22 def __call__(self, attrs: dict, serializer: Serializer): 23 """Check that if any of the fields in `self.fields` are set, all of them must be set""" 24 if any(field in attrs for field in self.fields) and not all( 25 field in attrs for field in self.fields 26 ): 27 field_names = ", ".join(self.fields) 28 message = self.message.format(field_names=field_names) 29 raise ValidationError(message, code="required") 30 31 def __repr__(self): 32 return f"<{self.__class__.__name__}(fields={smart_repr(self.fields)})>"
Serializer-level validator that ensures all fields in fields are only
used together