Update documents app serializers

Update serializers to be a subclass of
LazyExtraFieldsHyperlinkedModelSerializer to allow adding
more fields remotely.

Update URL fields to use MultiKwargHyperlinkedIdentityField.

Rename URL fields for uniformity.

Signed-off-by: Roberto Rosario <Roberto.Rosario.Gonzalez@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-02-19 03:34:56 -04:00
parent 30e8327db9
commit 9370b2effb

View File

@@ -17,8 +17,7 @@ from .settings import setting_language
from .tasks import task_upload_new_version from .tasks import task_upload_new_version
class DocumentPageSerializer(serializers.HyperlinkedModelSerializer): class DocumentPageSerializer(LazyExtraFieldsHyperlinkedModelSerializer):
#document_versions_url = serializers.SerializerMethodField()
image_url = MultiKwargHyperlinkedIdentityField( image_url = MultiKwargHyperlinkedIdentityField(
view_kwargs=( view_kwargs=(
{ {
@@ -33,7 +32,6 @@ class DocumentPageSerializer(serializers.HyperlinkedModelSerializer):
), ),
view_name='rest_api:document_page-image' view_name='rest_api:document_page-image'
) )
#url = serializers.SerializerMethodField()
document_version_url = MultiKwargHyperlinkedIdentityField( document_version_url = MultiKwargHyperlinkedIdentityField(
view_kwargs=( view_kwargs=(
{ {
@@ -62,36 +60,8 @@ class DocumentPageSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
fields = ('document_version_url', 'image_url', 'page_number', 'url') fields = ('document_version_url', 'image_url', 'page_number', 'url')
#fields = ('document_version_url', 'page_number', 'url')
model = DocumentPage model = DocumentPage
"""
def get_document_versions_url(self, instance):
return reverse(
viewname='rest_api:documentversion-detail', kwargs={
'document_id': instance.document.pk,
'document_version_id': instance.document_version.pk
}, request=self.context['request'], format=self.context['format']
)
def get_image_url(self, instance):
return reverse(
viewname='rest_api:documentpage-image', kwargs={
'document_id': instance.document.pk,
'document_version_id': instance.document_version.pk,
'document_page_id': instance.pk,
}, request=self.context['request'], format=self.context['format']
)
def get_url(self, instance):
return reverse(
viewname='rest_api:documentpage-detail', kwargs={
'document_id': instance.document.pk,
'document_version_id': instance.document_version.pk,
'document_page_id': instance.pk,
}, request=self.context['request'], format=self.context['format']
)
"""
class DocumentTypeFilenameSerializer(serializers.ModelSerializer): class DocumentTypeFilenameSerializer(serializers.ModelSerializer):
class Meta: class Meta:
@@ -116,8 +86,7 @@ class DocumentTypeSerializer(serializers.HyperlinkedModelSerializer):
} }
fields = ( fields = (
'delete_time_period', 'delete_time_unit', 'documents_url', 'delete_time_period', 'delete_time_unit', 'documents_url',
#'delete_time_period', 'delete_time_unit', #'documents_count', 'filenames',
#'documents_count', 'id', 'label', 'filenames', 'trash_time_period',
'id', 'label', 'trash_time_period', 'id', 'label', 'trash_time_period',
'trash_time_unit', 'url' 'trash_time_unit', 'url'
) )
@@ -152,16 +121,13 @@ class WritableDocumentTypeSerializer(serializers.ModelSerializer):
return obj.documents.count() return obj.documents.count()
""" """
class DocumentVersionSerializer(serializers.HyperlinkedModelSerializer): class DocumentVersionSerializer(LazyExtraFieldsHyperlinkedModelSerializer):
#document_url = serializers.SerializerMethodField()
#download_url = serializers.SerializerMethodField() #download_url = serializers.SerializerMethodField()
document_url = serializers.HyperlinkedIdentityField( document_url = serializers.HyperlinkedIdentityField(
lookup_field='document_id', lookup_url_kwarg='document_id', lookup_field='document_id', lookup_url_kwarg='document_id',
view_name='rest_api:document-detail' view_name='rest_api:document-detail'
) )
#pages_url = serializers.SerializerMethodField() document_page_list_url = MultiKwargHyperlinkedIdentityField(
pages_url = MultiKwargHyperlinkedIdentityField(
view_kwargs=( view_kwargs=(
{ {
'lookup_field': 'document_id', 'lookup_url_kwarg': 'document_id', 'lookup_field': 'document_id', 'lookup_url_kwarg': 'document_id',
@@ -174,7 +140,6 @@ class DocumentVersionSerializer(serializers.HyperlinkedModelSerializer):
) )
size = serializers.SerializerMethodField() size = serializers.SerializerMethodField()
#url = serializers.SerializerMethodField()
url = MultiKwargHyperlinkedIdentityField( url = MultiKwargHyperlinkedIdentityField(
view_kwargs=( view_kwargs=(
{ {
@@ -189,30 +154,12 @@ class DocumentVersionSerializer(serializers.HyperlinkedModelSerializer):
class Meta: class Meta:
extra_kwargs = { extra_kwargs = {
#'document': {
# 'lookup_field': 'pk', 'lookup_url_kwarg': 'document_id',
# 'view_name': 'rest_api:document-detail'
#},
'file': {'use_url': False}, 'file': {'use_url': False},
#'url': {
# 'view_kwargs': (
# {
# 'lookup_field': 'pk', 'lookup_url_kwarg': 'document_version_id',
# },
# {
# 'lookup_field': 'document__pk', 'lookup_url_kwarg': 'document_id',
# },
# ),
# #'lookup_field': 'pk', 'lookup_url_kwarg': 'document_version_id',
# 'view_name': 'rest_api:document_version-detail'
#},
} }
fields = ( fields = (
#'checksum', 'comment', 'document_url', 'download_url', 'encoding', # 'download_url',
'checksum', 'comment', 'document_url', 'encoding', 'checksum', 'comment', 'document_url', 'encoding',
#'checksum', 'comment', 'encoding', 'file', 'mimetype', 'document_page_list_url', 'size', 'timestamp', 'url'
'file', 'mimetype', 'pages_url', 'size', 'timestamp', 'url'
#'file', 'mimetype', 'size', 'timestamp', 'url'
) )
model = DocumentVersion model = DocumentVersion
read_only_fields = ('document', 'file', 'size') read_only_fields = ('document', 'file', 'size')
@@ -374,43 +321,6 @@ class DeletedDocumentSerializer(serializers.HyperlinkedModelSerializer):
return instance.document_type.label return instance.document_type.label
class HyperlinkedField(serializers.Field):
"""
Represents the instance, or a property on the instance, using hyperlinking.
"""
read_only = True
def __init__(self, *args, **kwargs):
self.view_name = kwargs.pop('view_name', None)
# Optionally the format of the target hyperlink may be specified
self.format = kwargs.pop('format', None)
# Optionally specify arguments
self.view_args = kwargs.pop('view_args', None)
super(HyperlinkedField, self).__init__(*args, **kwargs)
def to_representation(self, value):
return 'qe'
def field_to_native(self, obj, field_name):
return 'qwe'
request = self.context.get('request', None)
format = self.context.get('format', None)
view_name = self.view_name
# By default use whatever format is given for the current context
# unless the target is a different type to the source.
if format and self.format and self.format != format:
format = self.format
try:
return reverse(view_name, args=self.view_args, request=request, format=format)
except NoReverseMatch:
pass
raise Exception('Could not resolve URL for field using view name "%s"' % view_name)
class DocumentSerializer(LazyExtraFieldsHyperlinkedModelSerializer): class DocumentSerializer(LazyExtraFieldsHyperlinkedModelSerializer):
document_type = DocumentTypeSerializer(read_only=True) document_type = DocumentTypeSerializer(read_only=True)
#document_type_url = serializers.HyperlinkedIdentityField( #document_type_url = serializers.HyperlinkedIdentityField(
@@ -418,7 +328,7 @@ class DocumentSerializer(LazyExtraFieldsHyperlinkedModelSerializer):
# view_name='rest_api:document_type-detail' # view_name='rest_api:document_type-detail'
#) #)
latest_version = DocumentVersionSerializer(many=False, read_only=True) latest_version = DocumentVersionSerializer(many=False, read_only=True)
versions_url = serializers.HyperlinkedIdentityField( document_version_list_url = serializers.HyperlinkedIdentityField(
lookup_field='pk', lookup_url_kwarg='document_id', lookup_field='pk', lookup_url_kwarg='document_id',
view_name='rest_api:document_version-list' view_name='rest_api:document_version-list'
) )
@@ -436,9 +346,8 @@ class DocumentSerializer(LazyExtraFieldsHyperlinkedModelSerializer):
} }
fields = ( fields = (
'date_added', 'description', 'document_type', 'id', 'label', 'date_added', 'description', 'document_type', 'id', 'label',
#'date_added', 'description', 'document_type_url', 'id', 'label', #'document_type_url',
'language', 'latest_version', 'url', 'uuid', 'versions_url', 'language', 'latest_version', 'url', 'uuid', 'document_version_list_url',
#'language', 'url', 'uuid', 'versions_url'
) )
model = Document model = Document
#read_only_fields = ('document_type', 'label') #read_only_fields = ('document_type', 'label')