aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps/api/viewsets
diff options
context:
space:
mode:
authorGravatar RohanJnr <[email protected]>2020-10-08 13:50:50 +0530
committerGravatar RohanJnr <[email protected]>2020-10-08 13:50:50 +0530
commitcb32322b8bacabecccdf896d0f7db0355177ac72 (patch)
tree76f75266f6e6bed6f0de9437d0cdff1bcd815697 /pydis_site/apps/api/viewsets
parentadd test case: test_returns_400_for_existing_user (diff)
raise ValidationError if users have same ID in request data during bulk patch
Diffstat (limited to 'pydis_site/apps/api/viewsets')
-rw-r--r--pydis_site/apps/api/viewsets/bot/user.py24
1 files changed, 15 insertions, 9 deletions
diff --git a/pydis_site/apps/api/viewsets/bot/user.py b/pydis_site/apps/api/viewsets/bot/user.py
index 740fc439..46e682d8 100644
--- a/pydis_site/apps/api/viewsets/bot/user.py
+++ b/pydis_site/apps/api/viewsets/bot/user.py
@@ -6,7 +6,7 @@ from rest_framework.decorators import action
from rest_framework.pagination import PageNumberPagination
from rest_framework.request import Request
from rest_framework.response import Response
-from rest_framework.serializers import ModelSerializer
+from rest_framework.serializers import ModelSerializer, ValidationError
from rest_framework.viewsets import ModelViewSet
from pydis_site.apps.api.models.bot.user import User
@@ -212,14 +212,20 @@ class UserViewSet(ModelViewSet):
- 404: if the user with the given id does not exist.
"""
queryset = self.get_queryset()
- try:
- object_ids = [item["id"] for item in request.data]
- except KeyError:
- # user ID not provided in request body.
- resp = {
- "Error": "User ID not provided."
- }
- return Response(resp, status=status.HTTP_400_BAD_REQUEST)
+ object_ids = set()
+ for data in request.data:
+ try:
+ if data["id"] in object_ids:
+ # If request data contains users with same ID.
+ raise ValidationError(
+ {"id": [f"User with ID {data['id']} given multiple times."]}
+ )
+ except KeyError:
+ # If user ID not provided in request body.
+ raise ValidationError(
+ {"id": ["This field is required."]}
+ )
+ object_ids.add(data["id"])
filtered_instances = queryset.filter(id__in=object_ids)