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>
163 lines
5.3 KiB
Python
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
|