This commit is contained in:
@@ -21,6 +21,7 @@ Changes
|
||||
- Add API endpoints for the document states app.
|
||||
- Add API endpoints for the messsage of the day (MOTD) app.
|
||||
- Add Smart link API endpoints.
|
||||
- Add writable versions of the Document and Document Type serializers (GitLab issues #348 and #349).
|
||||
|
||||
Removals
|
||||
--------
|
||||
@@ -75,6 +76,7 @@ Backward incompatible changes
|
||||
Bugs fixed or issues closed
|
||||
===========================
|
||||
|
||||
* None
|
||||
* `GitLab issue #348 <https://gitlab.com/mayan-edms/mayan-edms/issues/348>`_ REST API: Document version comments are not getting updated
|
||||
* `GitLab issue #349 <https://gitlab.com/mayan-edms/mayan-edms/issues/349>`_ REST API: Document Label, Description are not able to update
|
||||
|
||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||
|
||||
@@ -31,7 +31,9 @@ from .serializers import (
|
||||
DocumentPageSerializer, DocumentSerializer,
|
||||
DocumentTypeSerializer, DocumentVersionSerializer,
|
||||
DocumentVersionRevertSerializer, NewDocumentSerializer,
|
||||
NewDocumentVersionSerializer, RecentDocumentSerializer
|
||||
NewDocumentVersionSerializer, RecentDocumentSerializer,
|
||||
WritableDocumentSerializer, WritableDocumentTypeSerializer,
|
||||
WritableDocumentVersionSerializer
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -190,7 +192,6 @@ class APIDocumentView(generics.RetrieveUpdateDestroyAPIView):
|
||||
}
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = Document.objects.all()
|
||||
serializer_class = DocumentSerializer
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
"""
|
||||
@@ -206,6 +207,12 @@ class APIDocumentView(generics.RetrieveUpdateDestroyAPIView):
|
||||
|
||||
return super(APIDocumentView, self).get(*args, **kwargs)
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.method == 'GET':
|
||||
return DocumentSerializer
|
||||
else:
|
||||
return WritableDocumentSerializer
|
||||
|
||||
def patch(self, *args, **kwargs):
|
||||
"""
|
||||
Edit the properties of the selected document.
|
||||
@@ -289,6 +296,12 @@ class APIDocumentTypeListView(generics.ListCreateAPIView):
|
||||
|
||||
return super(APIDocumentTypeListView, self).get(*args, **kwargs)
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.method == 'GET':
|
||||
return DocumentTypeSerializer
|
||||
else:
|
||||
return WritableDocumentTypeSerializer
|
||||
|
||||
def post(self, *args, **kwargs):
|
||||
"""
|
||||
Create a new document type.
|
||||
@@ -310,7 +323,6 @@ class APIDocumentTypeView(generics.RetrieveUpdateDestroyAPIView):
|
||||
}
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentType.objects.all()
|
||||
serializer_class = DocumentTypeSerializer
|
||||
|
||||
def delete(self, *args, **kwargs):
|
||||
"""
|
||||
@@ -326,6 +338,12 @@ class APIDocumentTypeView(generics.RetrieveUpdateDestroyAPIView):
|
||||
|
||||
return super(APIDocumentTypeView, self).get(*args, **kwargs)
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.method == 'GET':
|
||||
return DocumentTypeSerializer
|
||||
else:
|
||||
return WritableDocumentTypeSerializer
|
||||
|
||||
def patch(self, *args, **kwargs):
|
||||
"""
|
||||
Edit the properties of the selected document type.
|
||||
@@ -436,7 +454,12 @@ class APIDocumentVersionView(generics.RetrieveUpdateAPIView):
|
||||
mayan_permission_attribute_check = 'document'
|
||||
permission_classes = (MayanPermission,)
|
||||
queryset = DocumentVersion.objects.all()
|
||||
serializer_class = DocumentVersionSerializer
|
||||
|
||||
def get_serializer_class(self):
|
||||
if self.request.method == 'GET':
|
||||
return DocumentVersionSerializer
|
||||
else:
|
||||
return WritableDocumentVersionSerializer
|
||||
|
||||
def patch(self, *args, **kwargs):
|
||||
"""
|
||||
|
||||
@@ -51,9 +51,27 @@ class DocumentTypeSerializer(serializers.HyperlinkedModelSerializer):
|
||||
)
|
||||
documents_count = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
extra_kwargs = {
|
||||
'url': {'view_name': 'rest_api:documenttype-detail'},
|
||||
}
|
||||
fields = (
|
||||
'delete_time_period', 'delete_time_unit', 'documents_url',
|
||||
'documents_count', 'id', 'label', 'trash_time_period',
|
||||
'trash_time_unit', 'url'
|
||||
)
|
||||
model = DocumentType
|
||||
|
||||
def get_documents_count(self, obj):
|
||||
return obj.documents.count()
|
||||
|
||||
|
||||
class WritableDocumentTypeSerializer(serializers.ModelSerializer):
|
||||
documents_url = serializers.HyperlinkedIdentityField(
|
||||
view_name='rest_api:documenttype-document-list',
|
||||
)
|
||||
documents_count = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
extra_kwargs = {
|
||||
'url': {'view_name': 'rest_api:documenttype-detail'},
|
||||
@@ -65,6 +83,9 @@ class DocumentTypeSerializer(serializers.HyperlinkedModelSerializer):
|
||||
)
|
||||
model = DocumentType
|
||||
|
||||
def get_documents_count(self, obj):
|
||||
return obj.documents.count()
|
||||
|
||||
|
||||
class DocumentVersionSerializer(serializers.HyperlinkedModelSerializer):
|
||||
pages = DocumentPageSerializer(many=True, required=False, read_only=True)
|
||||
@@ -82,6 +103,26 @@ class DocumentVersionSerializer(serializers.HyperlinkedModelSerializer):
|
||||
read_only_fields = ('document', 'file')
|
||||
|
||||
|
||||
class WritableDocumentVersionSerializer(serializers.ModelSerializer):
|
||||
document = serializers.HyperlinkedIdentityField(
|
||||
view_name='rest_api:document-detail'
|
||||
)
|
||||
pages = DocumentPageSerializer(many=True, required=False, read_only=True)
|
||||
revert = serializers.HyperlinkedIdentityField(
|
||||
view_name='rest_api:documentversion-revert'
|
||||
)
|
||||
url = serializers.HyperlinkedIdentityField(
|
||||
view_name='rest_api:documentversion-detail'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
extra_kwargs = {
|
||||
'file': {'use_url': False},
|
||||
}
|
||||
model = DocumentVersion
|
||||
read_only_fields = ('document', 'file')
|
||||
|
||||
|
||||
class DocumentVersionRevertSerializer(DocumentVersionSerializer):
|
||||
class Meta(DocumentVersionSerializer.Meta):
|
||||
read_only_fields = ('comment', 'document',)
|
||||
@@ -136,9 +177,6 @@ class DocumentSerializer(serializers.HyperlinkedModelSerializer):
|
||||
view_name='rest_api:document-version-list',
|
||||
)
|
||||
|
||||
def get_document_type_label(self, instance):
|
||||
return instance.document_type.label
|
||||
|
||||
class Meta:
|
||||
extra_kwargs = {
|
||||
'document_type': {'view_name': 'rest_api:documenttype-detail'},
|
||||
@@ -152,6 +190,32 @@ class DocumentSerializer(serializers.HyperlinkedModelSerializer):
|
||||
model = Document
|
||||
read_only_fields = ('document_type',)
|
||||
|
||||
def get_document_type_label(self, instance):
|
||||
return instance.document_type.label
|
||||
|
||||
|
||||
class WritableDocumentSerializer(serializers.ModelSerializer):
|
||||
document_type_label = serializers.SerializerMethodField()
|
||||
latest_version = DocumentVersionSerializer(many=False, read_only=True)
|
||||
versions = serializers.HyperlinkedIdentityField(
|
||||
view_name='rest_api:document-version-list',
|
||||
)
|
||||
url = serializers.HyperlinkedIdentityField(
|
||||
view_name='rest_api:document-detail',
|
||||
)
|
||||
|
||||
class Meta:
|
||||
fields = (
|
||||
'date_added', 'description', 'document_type',
|
||||
'document_type_label', 'id', 'label', 'language',
|
||||
'latest_version', 'url', 'uuid', 'versions',
|
||||
)
|
||||
model = Document
|
||||
read_only_fields = ('document_type',)
|
||||
|
||||
def get_document_type_label(self, instance):
|
||||
return instance.document_type.label
|
||||
|
||||
|
||||
class NewDocumentSerializer(serializers.ModelSerializer):
|
||||
file = serializers.FileField(write_only=True)
|
||||
|
||||
@@ -49,12 +49,13 @@ class DocumentTypeAPITestCase(APITestCase):
|
||||
def test_document_type_create(self):
|
||||
self.assertEqual(DocumentType.objects.all().count(), 0)
|
||||
|
||||
self.client.post(
|
||||
response = self.client.post(
|
||||
reverse('rest_api:documenttype-list'), data={
|
||||
'label': TEST_DOCUMENT_TYPE
|
||||
}
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 201)
|
||||
self.assertEqual(DocumentType.objects.all().count(), 1)
|
||||
self.assertEqual(
|
||||
DocumentType.objects.all().first().label, TEST_DOCUMENT_TYPE
|
||||
|
||||
Reference in New Issue
Block a user