See #190: API and serializers to manage import requests

This commit is contained in:
Eliot Berriot 2018-06-21 23:31:12 +02:00
parent a443f9431e
commit 9767c8f415
No known key found for this signature in database
GPG key ID: DD6965E2476E5C27
9 changed files with 186 additions and 11 deletions

View file

@ -2,10 +2,10 @@ from rest_framework import serializers
class Action(object):
def __init__(self, name, allow_all=False, filters=None):
def __init__(self, name, allow_all=False, qs_filter=None):
self.name = name
self.allow_all = allow_all
self.filters = filters or {}
self.qs_filter = qs_filter
def __repr__(self):
return "<Action {}>".format(self.name)
@ -65,7 +65,6 @@ class ActionSerializer(serializers.Serializer):
"You cannot apply this action on all objects"
)
final_filters = data.get("filters", {}) or {}
final_filters.update(data["action"].filters)
if self.filterset_class and final_filters:
qs_filterset = self.filterset_class(final_filters, queryset=data["objects"])
try:
@ -74,6 +73,9 @@ class ActionSerializer(serializers.Serializer):
raise serializers.ValidationError("Invalid filters")
data["objects"] = qs_filterset.qs
if data["action"].qs_filter:
data["objects"] = data["action"].qs_filter(data["objects"])
data["count"] = data["objects"].count()
if data["count"] < 1:
raise serializers.ValidationError("No object matching your request")