From 369bdb6fde89ec24f6e3e3f23962a4b6bb837066 Mon Sep 17 00:00:00 2001 From: Joe Banks Date: Sun, 26 May 2024 04:53:56 +0100 Subject: [PATCH] Update serializers to validate mod settings correctly --- pydis_site/apps/api/serializers.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py index a539629f12..225bf2cee5 100644 --- a/pydis_site/apps/api/serializers.py +++ b/pydis_site/apps/api/serializers.py @@ -709,7 +709,8 @@ def to_representation(self, instance: User) -> dict: if hasattr(instance, 'mod_settings') and instance.mod_settings is not None: ret['mod_settings'] = UserModSettingsSerializer(instance.mod_settings).data else: - del ret['mod_settings'] + if 'mod_settings' in ret: + del ret['mod_settings'] return ret @@ -752,11 +753,21 @@ def get_alts(self, user: User) -> list[dict]: class UserModSettingsSerializer(ModelSerializer): """A class to serialize the moderator settings for a user.""" + def validate(self, data: dict) -> dict: + """Validate the moderator settings contain the necessary fields.""" + if data.get("pings_schedule_start") and not data.get("pings_schedule_end"): + raise ValidationError("missing pings_schedule_end") + + if data.get("pings_schedule_end") and not data.get("pings_schedule_start"): + raise ValidationError("missing pings_schedule_start") + + return data + class Meta: """Meta settings for the user moderator settings serializer.""" model = UserModSettings - fields = ('pings_disabled_until', 'pings_schedule_start', 'pings_schedule_end') + fields = ('moderator', 'pings_disabled_until', 'pings_schedule_start', 'pings_schedule_end') class NominationEntrySerializer(ModelSerializer): """A class providing (de-)serialization of `NominationEntry` instances."""