Simplify document metadata API endpoints, make document metadata endpoints more consistent, improve error reporting
This commit is contained in:
@@ -25,7 +25,7 @@ from .permissions import (PERMISSION_METADATA_DOCUMENT_ADD,
|
||||
PERMISSION_METADATA_TYPE_EDIT,
|
||||
PERMISSION_METADATA_TYPE_VIEW)
|
||||
from .serializers import (DocumentMetadataSerializer,
|
||||
DocumentMetadataNestedSerializer,
|
||||
DocumentNewMetadataSerializer,
|
||||
DocumentTypeNewMetadataTypeSerializer,
|
||||
MetadataTypeSerializer)
|
||||
|
||||
@@ -94,9 +94,9 @@ class APIDocumentMetadataListView(generics.ListCreateAPIView):
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.method == 'GET':
|
||||
return DocumentMetadataNestedSerializer
|
||||
elif self.request.method == 'POST':
|
||||
return DocumentMetadataSerializer
|
||||
elif self.request.method == 'POST':
|
||||
return DocumentNewMetadataSerializer
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
"""Returns a list of selected document's metadata types and values."""
|
||||
@@ -114,15 +114,15 @@ class APIDocumentMetadataListView(generics.ListCreateAPIView):
|
||||
serializer = self.get_serializer(data=self.request.POST)
|
||||
|
||||
if serializer.is_valid():
|
||||
metadata_type = get_object_or_404(MetadataType, pk=serializer.data['metadata_type'])
|
||||
metadata_type = get_object_or_404(MetadataType, pk=serializer.data['metadata_type_pk'])
|
||||
try:
|
||||
document.document_metadata.create(metadata_type=metadata_type, value=serializer.data['value'])
|
||||
document.metadata.create(metadata_type=metadata_type, value=serializer.data['value'])
|
||||
except Exception as exception:
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST, data={'non_field_errors': unicode(exception)})
|
||||
else:
|
||||
return Response(status=status.HTTP_201_CREATED)
|
||||
else:
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST, data=serializer.errors)
|
||||
|
||||
|
||||
class APIDocumentMetadataView(generics.RetrieveUpdateDestroyAPIView):
|
||||
@@ -142,7 +142,7 @@ class APIDocumentMetadataView(generics.RetrieveUpdateDestroyAPIView):
|
||||
try:
|
||||
return super(APIDocumentMetadataView, self).delete(*args, **kwargs)
|
||||
except Exception as exception:
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST, data={'non_fields_errors': unicode(exception)})
|
||||
|
||||
def get(self, *args, **kwargs):
|
||||
"""Return the details of the selected document metadata type and value."""
|
||||
@@ -150,11 +150,18 @@ class APIDocumentMetadataView(generics.RetrieveUpdateDestroyAPIView):
|
||||
|
||||
def patch(self, *args, **kwargs):
|
||||
"""Edit the selected document metadata type and value."""
|
||||
return super(APIDocumentMetadataView, self).patch(*args, **kwargs)
|
||||
try:
|
||||
return super(APIDocumentMetadataView, self).patch(*args, **kwargs)
|
||||
except Exception as exception:
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST, data={'non_fields_errors': unicode(exception)})
|
||||
|
||||
def put(self, *args, **kwargs):
|
||||
"""Edit the selected document metadata type and value."""
|
||||
return super(APIDocumentMetadataView, self).put(*args, **kwargs)
|
||||
try:
|
||||
return super(APIDocumentMetadataView, self).put(*args, **kwargs)
|
||||
except Exception as exception:
|
||||
return Response(status=status.HTTP_400_BAD_REQUEST, data={'non_fields_errors': unicode(exception)})
|
||||
|
||||
|
||||
|
||||
class APIDocumentTypeMetadataTypeOptionalListView(generics.ListCreateAPIView):
|
||||
|
||||
@@ -13,19 +13,16 @@ class MetadataTypeSerializer(serializers.ModelSerializer):
|
||||
model = MetadataType
|
||||
|
||||
|
||||
class DocumentMetadataNestedSerializer(serializers.ModelSerializer):
|
||||
metadata_type = MetadataTypeSerializer()
|
||||
|
||||
class Meta:
|
||||
fields = ('id', 'metadata_type', 'value')
|
||||
model = DocumentMetadata
|
||||
|
||||
|
||||
class DocumentMetadataSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
fields = ('id', 'metadata_type', 'value')
|
||||
model = DocumentMetadata
|
||||
|
||||
|
||||
class DocumentNewMetadataSerializer(serializers.Serializer):
|
||||
metadata_type_pk = serializers.IntegerField(help_text=_('Primary key of the metadata type to be added.'))
|
||||
value = serializers.CharField(max_length=255, help_text=_('Value of the corresponding metadata type instance.'))
|
||||
|
||||
|
||||
class DocumentTypeNewMetadataTypeSerializer(serializers.Serializer):
|
||||
metadata_type_pk = serializers.IntegerField(help_text=_('Primary key of the metadata type to be added.'))
|
||||
|
||||
@@ -27,8 +27,8 @@ urlpatterns = patterns('metadata.views',
|
||||
api_urls = patterns('',
|
||||
url(r'^metadatatypes/$', APIMetadataTypeListView.as_view(), name='metadatatype-list'),
|
||||
url(r'^metadatatypes/(?P<pk>[0-9]+)/$', APIMetadataTypeView.as_view(), name='metadatatype-detail'),
|
||||
url(r'^document/metadata/(?P<pk>[0-9]+)/$', APIDocumentMetadataView.as_view(), name='documentmetadata-detail'),
|
||||
url(r'^document/(?P<document_pk>[0-9]+)/metadata/$', APIDocumentMetadataListView.as_view(), name='documentmetadata-list'),
|
||||
url(r'^document/(?P<document_pk>[0-9]+)/metadata/(?P<pk>[0-9]+)/$', APIDocumentMetadataView.as_view(), name='documentmetadata-detail'),
|
||||
url(r'^document_type/(?P<document_type_pk>[0-9]+)/metadatatypes/optional/$', APIDocumentTypeMetadataTypeOptionalListView.as_view(), name='documenttypemetadatatype-list'),
|
||||
url(r'^document_type/(?P<document_type_pk>[0-9]+)/metadatatypes/required/$', APIDocumentTypeMetadataTypeRequiredListView.as_view(), name='documenttypemetadatatype-list'),
|
||||
url(r'^document_type/(?P<document_type_pk>[0-9]+)/metadatatypes/(?P<metadata_type_pk>[0-9]+)/$', APIDocumentTypeMetadataTypeRequiredView.as_view(), name='documenttypemetadatatype-detail'),
|
||||
|
||||
Reference in New Issue
Block a user