mirror of
https://git.vectorsigma.ru/public/tubearchivist.git
synced 2026-08-04 22:39:38 +00:00
58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
"""common serializers"""
|
|
|
|
# pylint: disable=abstract-method
|
|
|
|
from rest_framework import serializers
|
|
|
|
|
|
class ValidateUnknownFieldsMixin:
|
|
"""
|
|
Mixin to validate and reject unknown fields in a serializer.
|
|
"""
|
|
|
|
def to_internal_value(self, data):
|
|
"""check expected keys"""
|
|
allowed_fields = set(self.fields.keys())
|
|
input_fields = set(data.keys())
|
|
|
|
# Find unknown fields
|
|
unknown_fields = input_fields - allowed_fields
|
|
if unknown_fields:
|
|
raise serializers.ValidationError(
|
|
{"error": f"Unknown fields: {', '.join(unknown_fields)}"}
|
|
)
|
|
|
|
return super().to_internal_value(data)
|
|
|
|
|
|
class ErrorResponseSerializer(serializers.Serializer):
|
|
"""error message"""
|
|
|
|
error = serializers.CharField()
|
|
|
|
|
|
class PaginationSerializer(serializers.Serializer):
|
|
"""serialize paginate response"""
|
|
|
|
page_size = serializers.IntegerField()
|
|
page_from = serializers.IntegerField()
|
|
prev_pages = serializers.ListField(
|
|
child=serializers.IntegerField(), allow_null=True
|
|
)
|
|
current_page = serializers.IntegerField()
|
|
max_hits = serializers.BooleanField()
|
|
params = serializers.CharField()
|
|
last_page = serializers.BooleanField()
|
|
next_pages = serializers.ListField(
|
|
child=serializers.IntegerField(), allow_null=True
|
|
)
|
|
total_hits = serializers.IntegerField()
|
|
|
|
|
|
class AsyncTaskResponseSerializer(serializers.Serializer):
|
|
"""serialize new async task"""
|
|
|
|
message = serializers.CharField()
|
|
task_id = serializers.CharField()
|
|
filename = serializers.CharField(required=False)
|