Files
mayan-edms/mayan/apps/metadata/serializers.py
Roberto Rosario 166183dff9 Update metadata app
Sort arguments. Add keyword arguments. Update URL parameters
to the '_id' form. Remove use of .check_access() from views.
Sort methods.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
2019-01-21 03:31:19 -04:00

163 lines
5.3 KiB
Python

from __future__ import unicode_literals
from django.core.exceptions import ValidationError as DjangoValidationError
from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from rest_framework.reverse import reverse
from mayan.apps.documents.serializers import (
DocumentSerializer, DocumentTypeSerializer
)
from .models import DocumentMetadata, DocumentTypeMetadataType, MetadataType
class MetadataTypeSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
extra_kwargs = {
'url': {
'lookup_field': 'pk', 'lookup_url_kwarg': 'metadata_type_pk',
'view_name': 'rest_api:metadatatype-detail'
},
}
fields = (
'default', 'id', 'label', 'lookup', 'name', 'parser', 'url',
'validation'
)
model = MetadataType
class DocumentTypeMetadataTypeSerializer(serializers.HyperlinkedModelSerializer):
document_type = DocumentTypeSerializer(read_only=True)
metadata_type = MetadataTypeSerializer(read_only=True)
url = serializers.SerializerMethodField()
class Meta:
fields = ('document_type', 'id', 'metadata_type', 'required', 'url')
model = DocumentTypeMetadataType
def get_url(self, instance):
return reverse(
viewname='rest_api:documenttypemetadatatype-detail', kwargs={
'document_type_pk': instance.document_type.pk, 'metadata_type': instance.pk
}, request=self.context['request'], format=self.context['format']
)
class NewDocumentTypeMetadataTypeSerializer(serializers.ModelSerializer):
metadata_type_pk = serializers.IntegerField(
help_text=_('Primary key of the metadata type to be added.'),
write_only=True
)
url = serializers.SerializerMethodField()
class Meta:
fields = (
'id', 'metadata_type_pk', 'required', 'url'
)
model = DocumentTypeMetadataType
def get_url(self, instance):
return reverse(
viewname='rest_api:documenttypemetadatatype-detail', kwargs={
'document_type': instance.document_type.pk, 'metadata_type': instance.pk
}, request=self.context['request'], format=self.context['format']
)
def validate(self, attrs):
attrs['document_type'] = self.context['document_type']
attrs['metadata_type'] = MetadataType.objects.get(
pk=attrs.pop('metadata_type_pk')
)
instance = DocumentTypeMetadataType(**attrs)
try:
instance.full_clean()
except DjangoValidationError as exception:
raise ValidationError(exception)
return attrs
class WritableDocumentTypeMetadataTypeSerializer(serializers.ModelSerializer):
url = serializers.SerializerMethodField()
class Meta:
fields = (
'id', 'required', 'url'
)
model = DocumentTypeMetadataType
def get_url(self, instance):
return reverse(
viewname='rest_api:documenttypemetadatatype-detail', kwargs={
'document_type_pk': instance.document_type.pk,
'metadata_type': instance.pk
}, request=self.context['request'], format=self.context['format']
)
class DocumentMetadataSerializer(serializers.HyperlinkedModelSerializer):
document = DocumentSerializer(read_only=True)
metadata_type = MetadataTypeSerializer(read_only=True)
url = serializers.SerializerMethodField()
class Meta:
fields = ('document', 'id', 'metadata_type', 'url', 'value')
model = DocumentMetadata
read_only_fields = ('document', 'metadata_type',)
def get_url(self, instance):
return reverse(
viewname='rest_api:documentmetadata-detail', kwargs={
'document_pk': instance.document.pk, 'metadata_pk': instance.pk
}, request=self.context['request'], format=self.context['format']
)
def validate(self, attrs):
self.instance.value = attrs['value']
try:
self.instance.full_clean()
except DjangoValidationError as exception:
raise ValidationError(exception)
return attrs
class NewDocumentMetadataSerializer(serializers.ModelSerializer):
metadata_type_pk = serializers.IntegerField(
help_text=_(
'Primary key of the metadata type to be added to the document.'
),
write_only=True
)
url = serializers.SerializerMethodField()
class Meta:
fields = ('id', 'metadata_type_pk', 'url', 'value')
model = DocumentMetadata
def get_url(self, instance):
return reverse(
viewname='rest_api:documentmetadata-detail', kwargs={
'document_pk': instance.document.pk, 'metadata_pk': instance.pk
}, request=self.context['request'], format=self.context['format']
)
def validate(self, attrs):
attrs['document'] = self.context['document']
attrs['metadata_type'] = MetadataType.objects.get(
pk=attrs.pop('metadata_type_pk')
)
instance = DocumentMetadata(**attrs)
try:
instance.full_clean()
except DjangoValidationError as exception:
raise ValidationError(exception)
return attrs