Files
mayan-edms/mayan/apps/metadata/serializers.py

72 lines
2.3 KiB
Python

from __future__ import unicode_literals
from django.db import IntegrityError
from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from .models import DocumentMetadata, MetadataType, DocumentTypeMetadataType
class MetadataTypeSerializer(serializers.ModelSerializer):
class Meta:
fields = (
'id', 'name', 'label', 'default', 'lookup', 'parser', 'validation'
)
model = MetadataType
class DocumentMetadataSerializer(serializers.ModelSerializer):
document = serializers.PrimaryKeyRelatedField(read_only=True)
class Meta:
fields = ('document', 'id', 'metadata_type', 'value',)
model = DocumentMetadata
read_only_fields = ('metadata_type',)
class DocumentTypeMetadataTypeSerializer(serializers.ModelSerializer):
class Meta:
fields = ('metadata_type',)
model = DocumentTypeMetadataType
class DocumentNewMetadataSerializer(serializers.Serializer):
metadata_type_pk = serializers.IntegerField(
help_text=_('Primary key of the metadata type to be added.'),
write_only=True
)
metadata_type = MetadataTypeSerializer(read_only=True)
pk = serializers.IntegerField(
help_text=_('Primary key of the document metadata type.'),
read_only=True
)
value = serializers.CharField(
max_length=255,
help_text=_('Value of the corresponding metadata type instance.')
)
def create(self, validated_data):
metadata_type = MetadataType.objects.get(
pk=validated_data['metadata_type_pk']
)
try:
instance = self.document.metadata.create(
metadata_type=metadata_type, value=validated_data['value']
)
return instance
except IntegrityError:
detail = 'Metadata type with pk {} is already defined for Document with pk {}'.format(metadata_type.pk,
self.document.pk)
raise ValidationError(detail)
class DocumentTypeNewMetadataTypeSerializer(serializers.Serializer):
metadata_type_pk = serializers.IntegerField(
help_text=_('Primary key of the metadata type to be added.')
)