* remove pyright Signed-off-by: Jens Langhammer <jens@goauthentik.io> * remove pylint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * replace pylint with ruff Signed-off-by: Jens Langhammer <jens@goauthentik.io> * ruff fix Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix UP038 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix DJ012 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix default arg Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix UP031 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * rename stage type to view Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix DJ008 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix remaining upgrade Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix PLR2004 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix B904 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix PLW2901 Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix remaining issues Signed-off-by: Jens Langhammer <jens@goauthentik.io> * prevent ruff from breaking the code Signed-off-by: Jens Langhammer <jens@goauthentik.io> * stages/prompt: refactor field building Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> * fix tests Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix lint Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fully remove isort Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io> Signed-off-by: Marc 'risson' Schmitt <marc.schmitt@risson.space> Co-authored-by: Marc 'risson' Schmitt <marc.schmitt@risson.space>
32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
"""Serializer validators"""
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
from rest_framework.exceptions import ValidationError
|
|
from rest_framework.serializers import Serializer
|
|
from rest_framework.utils.representation import smart_repr
|
|
|
|
|
|
class RequiredTogetherValidator:
|
|
"""Serializer-level validator that ensures all fields in `fields` are only
|
|
used together"""
|
|
|
|
fields: list[str]
|
|
requires_context = True
|
|
message = _("The fields {field_names} must be used together.")
|
|
|
|
def __init__(self, fields: list[str], message: str | None = None) -> None:
|
|
self.fields = fields
|
|
self.message = message or self.message
|
|
|
|
def __call__(self, attrs: dict, serializer: Serializer):
|
|
"""Check that if any of the fields in `self.fields` are set, all of them must be set"""
|
|
if any(field in attrs for field in self.fields) and not all(
|
|
field in attrs for field in self.fields
|
|
):
|
|
field_names = ", ".join(self.fields)
|
|
message = self.message.format(field_names=field_names)
|
|
raise ValidationError(message, code="required")
|
|
|
|
def __repr__(self):
|
|
return f"<{self.__class__.__name__}(fields={smart_repr(self.fields)})>"
|