Update documents app to comply with MERCs 5

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2018-12-31 02:54:30 -04:00
parent ccd935d752
commit 35ef8ba7b8
20 changed files with 692 additions and 439 deletions

View File

@@ -46,6 +46,7 @@ class APIDeletedDocumentListView(generics.ListAPIView):
Returns a list of all the trashed documents.
"""
filter_backends = (MayanObjectPermissionsFilter,)
lookup_url_kwarg = 'document_pk'
mayan_object_permissions = {'GET': (permission_document_view,)}
permission_classes = (MayanPermission,)
queryset = Document.trash.all()
@@ -58,6 +59,7 @@ class APIDeletedDocumentView(generics.RetrieveDestroyAPIView):
delete: Delete the trashed document.
get: Retreive the details of the trashed document.
"""
lookup_url_kwarg = 'document_pk'
mayan_object_permissions = {
'DELETE': (permission_document_delete,),
'GET': (permission_document_view,)
@@ -71,6 +73,7 @@ class APIDeletedDocumentRestoreView(generics.GenericAPIView):
"""
post: Restore a trashed document.
"""
lookup_url_kwarg = 'document_pk'
mayan_object_permissions = {
'POST': (permission_document_restore,)
}
@@ -92,6 +95,7 @@ class APIDocumentDownloadView(DownloadMixin, generics.RetrieveAPIView):
"""
get: Download the latest version of a document.
"""
lookup_url_kwarg = 'document_pk'
mayan_object_permissions = {
'GET': (permission_document_download,)
}
@@ -152,7 +156,7 @@ class APIDocumentPageImageView(generics.RetrieveAPIView):
"""
get: Returns an image representation of the selected document.
"""
lookup_url_kwarg = 'page_pk'
lookup_url_kwarg = 'document_page_pk'
def get_document(self):
if self.request.method == 'GET':
@@ -160,7 +164,9 @@ class APIDocumentPageImageView(generics.RetrieveAPIView):
else:
permission_required = permission_document_edit
document = get_object_or_404(klass=Document.passthrough, pk=self.kwargs['pk'])
document = get_object_or_404(
klass=Document.passthrough, pk=self.kwargs['document_pk']
)
AccessControlList.objects.check_access(
permission_required, self.request.user, document
@@ -169,7 +175,7 @@ class APIDocumentPageImageView(generics.RetrieveAPIView):
def get_document_version(self):
return get_object_or_404(
klass=self.get_document().versions.all(), pk=self.kwargs['version_pk']
klass=self.get_document().versions.all(), pk=self.kwargs['document_version_pk']
)
def get_queryset(self):
@@ -247,7 +253,7 @@ class APIDocumentPageView(generics.RetrieveUpdateAPIView):
patch: Edit the selected document page.
put: Edit the selected document page.
"""
lookup_url_kwarg = 'page_pk'
lookup_url_kwarg = 'document_page_pk'
serializer_class = DocumentPageSerializer
def get_document(self):
@@ -256,7 +262,9 @@ class APIDocumentPageView(generics.RetrieveUpdateAPIView):
else:
permission_required = permission_document_edit
document = get_object_or_404(klass=Document, pk=self.kwargs['pk'])
document = get_object_or_404(
klass=Document, pk=self.kwargs['document_pk']
)
AccessControlList.objects.check_access(
permission_required, self.request.user, document
@@ -265,7 +273,8 @@ class APIDocumentPageView(generics.RetrieveUpdateAPIView):
def get_document_version(self):
return get_object_or_404(
klass=self.get_document().versions.all(), pk=self.kwargs['version_pk']
klass=self.get_document().versions.all(),
pk=self.kwargs['document_version_pk']
)
def get_queryset(self):
@@ -278,6 +287,7 @@ class APIDocumentTypeListView(generics.ListCreateAPIView):
post: Create a new document type.
"""
filter_backends = (MayanObjectPermissionsFilter,)
lookup_url_kwarg = 'document_type_pk'
mayan_object_permissions = {'GET': (permission_document_type_view,)}
mayan_view_permissions = {'POST': (permission_document_type_create,)}
permission_classes = (MayanPermission,)
@@ -304,6 +314,7 @@ class APIDocumentTypeView(generics.RetrieveUpdateDestroyAPIView):
patch: Edit the properties of the selected document type.
put: Edit the properties of the selected document type.
"""
lookup_url_kwarg = 'document_type_pk'
mayan_object_permissions = {
'GET': (permission_document_type_view,),
'PUT': (permission_document_type_edit,),
@@ -331,11 +342,14 @@ class APIDocumentTypeDocumentListView(generics.ListAPIView):
Returns a list of all the documents of a particular document type.
"""
filter_backends = (MayanObjectPermissionsFilter,)
lookup_url_kwarg = 'document_type_pk'
mayan_object_permissions = {'GET': (permission_document_view,)}
serializer_class = DocumentSerializer
def get_queryset(self):
document_type = get_object_or_404(klass=DocumentType, pk=self.kwargs['pk'])
document_type = get_object_or_404(
klass=DocumentType, pk=self.kwargs['document_type_pk']
)
AccessControlList.objects.check_access(
permissions=permission_document_type_view, user=self.request.user,
obj=document_type
@@ -348,10 +362,12 @@ class APIDocumentVersionDownloadView(DownloadMixin, generics.RetrieveAPIView):
"""
get: Download a document version.
"""
lookup_url_kwarg = 'version_pk'
lookup_url_kwarg = 'document_version_pk'
def get_document(self):
document = get_object_or_404(klass=Document, pk=self.kwargs['pk'])
document = get_object_or_404(
klass=Document, pk=self.kwargs['document_pk']
)
AccessControlList.objects.check_access(
permissions=(permission_document_download,), user=self.request.user,
@@ -402,6 +418,7 @@ class APIDocumentView(generics.RetrieveUpdateDestroyAPIView):
patch: Edit the properties of the selected document.
put: Edit the properties of the selected document.
"""
lookup_url_kwarg = 'document_pk'
mayan_object_permissions = {
'GET': (permission_document_view,),
'PUT': (permission_document_properties_edit,),
@@ -445,7 +462,9 @@ class APIDocumentVersionPageListView(generics.ListAPIView):
serializer_class = DocumentPageSerializer
def get_document(self):
document = get_object_or_404(klass=Document, pk=self.kwargs['pk'])
document = get_object_or_404(
klass=Document, pk=self.kwargs['document_pk']
)
AccessControlList.objects.check_access(
permission_document_view, self.request.user, document
@@ -454,7 +473,8 @@ class APIDocumentVersionPageListView(generics.ListAPIView):
def get_document_version(self):
return get_object_or_404(
klass=self.get_document().versions.all(), pk=self.kwargs['version_pk']
klass=self.get_document().versions.all(),
pk=self.kwargs['document_version_pk']
)
def get_queryset(self):
@@ -493,10 +513,14 @@ class APIDocumentVersionsListView(generics.ListCreateAPIView):
return NewDocumentVersionSerializer
def get_queryset(self):
return get_object_or_404(klass=Document, pk=self.kwargs['pk']).versions.all()
return get_object_or_404(
klass=Document, pk=self.kwargs['document_pk']
).versions.all()
def perform_create(self, serializer):
document = get_object_or_404(klass=Document, pk=self.kwargs['pk'])
document = get_object_or_404(
klass=Document, pk=self.kwargs['document_pk']
)
AccessControlList.objects.check_access(
permissions=(permission_document_new_version,),
@@ -512,7 +536,7 @@ class APIDocumentVersionView(generics.RetrieveUpdateDestroyAPIView):
patch: Edit the selected document version.
put: Edit the selected document version.
"""
lookup_url_kwarg = 'version_pk'
lookup_url_kwarg = 'document_version_pk'
def get_document(self):
if self.request.method == 'GET':
@@ -522,7 +546,9 @@ class APIDocumentVersionView(generics.RetrieveUpdateDestroyAPIView):
else:
permission_required = permission_document_edit
document = get_object_or_404(klass=Document, pk=self.kwargs['pk'])
document = get_object_or_404(
klass=Document, pk=self.kwargs['document_pk']
)
AccessControlList.objects.check_access(
permission_required, self.request.user, document

View File

@@ -21,8 +21,8 @@ class DashboardWidgetDocumentPagesTotal(DashboardWidgetNumeric):
icon_class = icon_dashboard_pages_per_month
label = _('Total pages')
link = reverse_lazy(
'statistics:statistic_detail',
args=('total-document-pages-at-each-month',)
viewname='statistics:statistic_detail',
kwargs={'slug': 'total-document-pages-at-each-month'}
)
def render(self, request):
@@ -100,8 +100,8 @@ class DashboardWidgetDocumentsNewThisMonth(DashboardWidgetNumeric):
icon_class = icon_dashboard_new_documents_this_month
label = _('New documents this month')
link = reverse_lazy(
'statistics:statistic_detail',
args=('new-documents-per-month',)
viewname='statistics:statistic_detail',
kwargs={'slug': 'new-documents-per-month'}
)
def render(self, request):
@@ -113,8 +113,8 @@ class DashboardWidgetDocumentsPagesNewThisMonth(DashboardWidgetNumeric):
icon_class = icon_dashboard_pages_per_month
label = _('New pages this month')
link = reverse_lazy(
'statistics:statistic_detail',
args=('new-document-pages-per-month',)
viewname='statistics:statistic_detail',
kwargs={'slug': 'new-document-pages-per-month'}
)
def render(self, request):

View File

@@ -135,7 +135,10 @@ class Document(models.Model):
return False
def get_absolute_url(self):
return reverse('documents:document_preview', args=(self.pk,))
return reverse(
viewname='documents:document_preview',
kwargs={'document_pk': self.pk}
)
def get_api_image_url(self, *args, **kwargs):
latest_version = self.latest_version

View File

@@ -101,7 +101,10 @@ class DocumentPage(models.Model):
return combined_cache_filename
def get_absolute_url(self):
return reverse('documents:document_page_view', args=(self.pk,))
return reverse(
viewname='documents:document_page_view',
kwargs={'document_page_pk': self.pk}
)
def get_api_image_url(self, *args, **kwargs):
"""
@@ -123,9 +126,11 @@ class DocumentPage(models.Model):
final_url = furl()
final_url.args = kwargs
final_url.path = reverse(
'rest_api:documentpage-image', args=(
self.document.pk, self.document_version.pk, self.pk
)
viewname='rest_api:documentpage-image', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document_version.pk,
'document_page_pk': self.pk
}
)
final_url.args['_hash'] = transformations_hash
count = 1

View File

@@ -82,7 +82,8 @@ class DocumentType(models.Model):
def get_absolute_url(self):
return reverse(
'documents:document_type_document_list', args=(self.pk,)
viewname='documents:document_type_document_list',
kwargs={'document_type_pk': self.pk}
)
def get_document_count(self, user):

View File

@@ -149,7 +149,10 @@ class DocumentVersion(models.Model):
)
def get_absolute_url(self):
return reverse('documents:document_version_view', args=(self.pk,))
return reverse(
viewname='documents:document_version_view',
kwargs={'document_version_pk': self.pk}
)
def get_api_image_url(self, *args, **kwargs):
first_page = self.pages.first()

View File

@@ -26,25 +26,28 @@ class DocumentPageSerializer(serializers.HyperlinkedModelSerializer):
def get_document_version_url(self, instance):
return reverse(
'rest_api:documentversion-detail', args=(
instance.document.pk, instance.document_version.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:documentversion-detail', kwargs={
'document_pk': instance.document.pk,
'document_version_pk': instance.document_version.pk
}, request=self.context['request'], format=self.context['format']
)
def get_image_url(self, instance):
return reverse(
'rest_api:documentpage-image', args=(
instance.document.pk, instance.document_version.pk,
instance.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:documentpage-image', kwargs={
'document_pk': instance.document.pk,
'document_version_pk': instance.document_version.pk,
'document_page_pk': instance.pk,
}, request=self.context['request'], format=self.context['format']
)
def get_url(self, instance):
return reverse(
'rest_api:documentpage-detail', args=(
instance.document.pk, instance.document_version.pk,
instance.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:documentpage-detail', kwargs={
'document_pk': instance.document.pk,
'document_version_pk': instance.document_version.pk,
'document_page_pk': instance.pk,
}, request=self.context['request'], format=self.context['format']
)
@@ -56,14 +59,18 @@ class DocumentTypeFilenameSerializer(serializers.ModelSerializer):
class DocumentTypeSerializer(serializers.HyperlinkedModelSerializer):
documents_url = serializers.HyperlinkedIdentityField(
view_name='rest_api:documenttype-document-list',
lookup_field='pk', lookup_url_kwarg='document_type_pk',
view_name='rest_api:documenttype-document-list'
)
documents_count = serializers.SerializerMethodField()
filenames = DocumentTypeFilenameSerializer(many=True, read_only=True)
class Meta:
extra_kwargs = {
'url': {'view_name': 'rest_api:documenttype-detail'},
'url': {
'lookup_field': 'pk', 'lookup_url_kwarg': 'document_type_pk',
'view_name': 'rest_api:documenttype-detail'
}
}
fields = (
'delete_time_period', 'delete_time_unit', 'documents_url',
@@ -78,13 +85,17 @@ class DocumentTypeSerializer(serializers.HyperlinkedModelSerializer):
class WritableDocumentTypeSerializer(serializers.ModelSerializer):
documents_url = serializers.HyperlinkedIdentityField(
view_name='rest_api:documenttype-document-list',
lookup_field='pk', lookup_url_kwarg='document_type_pk',
view_name='rest_api:documenttype-document-list'
)
documents_count = serializers.SerializerMethodField()
class Meta:
extra_kwargs = {
'url': {'view_name': 'rest_api:documenttype-detail'},
'url': {
'lookup_field': 'pk', 'lookup_url_kwarg': 'document_type_pk',
'view_name': 'rest_api:documenttype-detail'
}
}
fields = (
'delete_time_period', 'delete_time_unit', 'documents_url',
@@ -106,7 +117,10 @@ class DocumentVersionSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
extra_kwargs = {
'document': {'view_name': 'rest_api:document-detail'},
'document': {
'lookup_field': 'pk', 'lookup_url_kwarg': 'document_pk',
'view_name': 'rest_api:document-detail'
},
'file': {'use_url': False},
}
fields = (
@@ -121,30 +135,33 @@ class DocumentVersionSerializer(serializers.HyperlinkedModelSerializer):
def get_document_url(self, instance):
return reverse(
'rest_api:document-detail', args=(
instance.document.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:document-detail', kwargs={
'document_pk': instance.document.pk
}, request=self.context['request'], format=self.context['format']
)
def get_download_url(self, instance):
return reverse(
'rest_api:documentversion-download', args=(
instance.document.pk, instance.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:documentversion-download', kwargs={
'document_pk': instance.document.pk,
'document_version_pk': instance.pk
}, request=self.context['request'], format=self.context['format']
)
def get_pages_url(self, instance):
return reverse(
'rest_api:documentversion-page-list', args=(
instance.document.pk, instance.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:documentversion-page-list', kwargs={
'document_pk': instance.document.pk,
'document_version_pk': instance.pk
}, request=self.context['request'], format=self.context['format']
)
def get_url(self, instance):
return reverse(
'rest_api:documentversion-detail', args=(
instance.document.pk, instance.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:documentversion-detail', kwargs={
'document_pk': instance.document.pk,
'document_version_pk': instance.pk
}, request=self.context['request'], format=self.context['format']
)
@@ -167,30 +184,33 @@ class WritableDocumentVersionSerializer(serializers.ModelSerializer):
def get_document_url(self, instance):
return reverse(
'rest_api:document-detail', args=(
instance.document.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:document-detail', kwargs={
'document_pk': instance.document.pk
}, request=self.context['request'], format=self.context['format']
)
def get_download_url(self, instance):
return reverse(
'rest_api:documentversion-download', args=(
instance.document.pk, instance.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:documentversion-download', kwargs={
'document_pk': instance.document.pk,
'document_version_pk': instance.pk
}, request=self.context['request'], format=self.context['format']
)
def get_pages_url(self, instance):
return reverse(
'rest_api:documentversion-page-list', args=(
instance.document.pk, instance.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:documentversion-page-list', kwargs={
'document_pk': instance.document.pk,
'document_version_pk': instance.pk
}, request=self.context['request'], format=self.context['format']
)
def get_url(self, instance):
return reverse(
'rest_api:documentversion-detail', args=(
instance.document.pk, instance.pk,
), request=self.context['request'], format=self.context['format']
viewname='rest_api:documentversion-detail', kwargs={
'document_pk': instance.document.pk,
'document_version_pk': instance.pk
}, request=self.context['request'], format=self.context['format']
)
@@ -213,13 +233,20 @@ class NewDocumentVersionSerializer(serializers.Serializer):
class DeletedDocumentSerializer(serializers.HyperlinkedModelSerializer):
document_type_label = serializers.SerializerMethodField()
restore = serializers.HyperlinkedIdentityField(
lookup_field='pk', lookup_url_kwarg='document_pk',
view_name='rest_api:trasheddocument-restore'
)
class Meta:
extra_kwargs = {
'document_type': {'view_name': 'rest_api:documenttype-detail'},
'url': {'view_name': 'rest_api:trasheddocument-detail'}
'document_type': {
'lookup_field': 'pk', 'lookup_url_kwarg': 'document_type_pk',
'view_name': 'rest_api:documenttype-detail'
},
'url': {
'lookup_field': 'pk', 'lookup_url_kwarg': 'document_pk',
'view_name': 'rest_api:trasheddocument-detail'
}
}
fields = (
'date_added', 'deleted_date_time', 'description', 'document_type',
@@ -240,13 +267,20 @@ class DocumentSerializer(serializers.HyperlinkedModelSerializer):
document_type = DocumentTypeSerializer()
latest_version = DocumentVersionSerializer(many=False, read_only=True)
versions_url = serializers.HyperlinkedIdentityField(
view_name='rest_api:document-version-list',
lookup_field='pk', lookup_url_kwarg='document_pk',
view_name='rest_api:document-version-list'
)
class Meta:
extra_kwargs = {
'document_type': {'view_name': 'rest_api:documenttype-detail'},
'url': {'view_name': 'rest_api:document-detail'}
'document_type': {
'lookup_field': 'pk', 'lookup_url_kwarg': 'document_type_pk',
'view_name': 'rest_api:documenttype-detail'
},
'url': {
'lookup_field': 'pk', 'lookup_url_kwarg': 'document_pk',
'view_name': 'rest_api:document-detail'
}
}
fields = (
'date_added', 'description', 'document_type', 'id', 'label',
@@ -260,9 +294,11 @@ class WritableDocumentSerializer(serializers.ModelSerializer):
document_type = DocumentTypeSerializer(read_only=True)
latest_version = DocumentVersionSerializer(many=False, read_only=True)
versions = serializers.HyperlinkedIdentityField(
view_name='rest_api:document-version-list',
lookup_field='pk', lookup_url_kwarg='document_pk',
view_name='rest_api:document-version-list'
)
url = serializers.HyperlinkedIdentityField(
lookup_field='pk', lookup_url_kwarg='document_pk',
view_name='rest_api:document-detail',
)

View File

@@ -60,9 +60,9 @@ class DocumentTypeAPITestCase(BaseAPITestCase):
def _request_document_type_patch(self):
return self.patch(
viewname='rest_api:documenttype-detail', args=(
self.document_type.pk,
), data={'label': TEST_DOCUMENT_TYPE_LABEL_EDITED}
viewname='rest_api:documenttype-detail', kwargs={
'document_type_pk': self.document_type.pk
}, data={'label': TEST_DOCUMENT_TYPE_LABEL_EDITED}
)
def test_document_type_edit_via_patch_no_permission(self):
@@ -89,9 +89,9 @@ class DocumentTypeAPITestCase(BaseAPITestCase):
def _request_document_type_put(self):
return self.put(
viewname='rest_api:documenttype-detail', args=(
self.document_type.pk,
), data={'label': TEST_DOCUMENT_TYPE_LABEL_EDITED}
viewname='rest_api:documenttype-detail', kwargs={
'document_type_pk': self.document_type.pk
}, data={'label': TEST_DOCUMENT_TYPE_LABEL_EDITED}
)
def test_document_type_edit_via_put_no_permission(self):
@@ -118,9 +118,9 @@ class DocumentTypeAPITestCase(BaseAPITestCase):
def _request_document_type_delete(self):
return self.delete(
viewname='rest_api:documenttype-detail', args=(
self.document_type.pk,
)
viewname='rest_api:documenttype-detail', kwargs={
'document_type_pk': self.document_type.pk
}
)
def test_document_type_delete_no_permission(self):
@@ -206,9 +206,9 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
with open(TEST_DOCUMENT_PATH, mode='rb') as file_descriptor:
return self.post(
viewname='rest_api:document-version-list', args=(
self.document.pk,
), data={
viewname='rest_api:document-version-list', kwargs={
'document_pk': self.document.pk
}, data={
'comment': '', 'file': file_descriptor,
}
)
@@ -246,9 +246,10 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_version_revert(self):
return self.delete(
viewname='rest_api:documentversion-detail', args=(
self.document.pk, self.document.latest_version.pk
)
viewname='rest_api:documentversion-detail', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document.latest_version.pk
}
)
def test_document_version_revert_no_permission(self):
@@ -273,7 +274,8 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_version_list(self):
return self.get(
viewname='rest_api:document-version-list', args=(self.document.pk,)
viewname='rest_api:document-version-list',
kwargs={'document_pk': self.document.pk}
)
def test_document_version_list_no_permission(self):
@@ -298,7 +300,8 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_download(self):
return self.get(
viewname='rest_api:document-download', args=(self.document.pk,)
viewname='rest_api:document-download',
kwargs={'document_pk': self.document.pk}
)
def test_document_download_no_permission(self):
@@ -325,9 +328,10 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_version_download(self):
return self.get(
viewname='rest_api:documentversion-download', args=(
self.document.pk, self.document.latest_version.pk,
)
viewname='rest_api:documentversion-download', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document.latest_version.pk,
}
)
def test_document_version_download_no_permission(self):
@@ -357,9 +361,10 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
self.document = self.upload_document()
response = self.get(
viewname='rest_api:documentversion-download', args=(
self.document.pk, self.document.latest_version.pk,
), data={'preserve_extension': True}
viewname='rest_api:documentversion-download', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document.latest_version.pk,
}, data={'preserve_extension': True}
)
with self.document.latest_version.open() as file_object:
@@ -374,9 +379,10 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_version_edit_via_patch(self):
return self.patch(
viewname='rest_api:documentversion-detail', args=(
self.document.pk, self.document.latest_version.pk,
), data={'comment': TEST_DOCUMENT_VERSION_COMMENT_EDITED}
viewname='rest_api:documentversion-detail', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document.latest_version.pk,
}, data={'comment': TEST_DOCUMENT_VERSION_COMMENT_EDITED}
)
def test_document_version_edit_via_patch_no_permission(self):
@@ -400,9 +406,10 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_version_edit_via_put(self):
return self.put(
viewname='rest_api:documentversion-detail', args=(
self.document.pk, self.document.latest_version.pk,
), data={'comment': TEST_DOCUMENT_VERSION_COMMENT_EDITED}
viewname='rest_api:documentversion-detail', kwargs={
'document_pk': self.document.pk,
'document_version_pk': self.document.latest_version.pk,
}, data={'comment': TEST_DOCUMENT_VERSION_COMMENT_EDITED}
)
def test_document_version_edit_via_put_no_permission(self):
@@ -426,7 +433,8 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_description_edit_via_patch(self):
return self.patch(
viewname='rest_api:document-detail', args=(self.document.pk,),
viewname='rest_api:document-detail',
kwargs={'document_pk': self.document.pk},
data={'description': TEST_DOCUMENT_DESCRIPTION_EDITED}
)
@@ -450,7 +458,8 @@ class DocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_description_edit_via_put(self):
return self.put(
viewname='rest_api:document-detail', args=(self.document.pk,),
viewname='rest_api:document-detail',
kwargs={'document_pk': self.document.pk},
data={'description': TEST_DOCUMENT_DESCRIPTION_EDITED}
)
@@ -481,9 +490,10 @@ class DocumentPageAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_page_image(self):
page = self.document.pages.first()
return self.get(
viewname='rest_api:documentpage-image', args=(
page.document.pk, page.document_version.pk, page.pk
),
viewname='rest_api:documentpage-image', kwargs={
'document_pk': page.document.pk,
'document_version_pk': page.document_version.pk, 'document_page_pk': page.pk
}
)
def test_document_page_image_view_no_access(self):
@@ -507,7 +517,8 @@ class TrashedDocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_document_move_to_trash(self):
return self.delete(
viewname='rest_api:document-detail', args=(self.document.pk,)
viewname='rest_api:document-detail',
kwargs={'document_pk': self.document.pk}
)
def test_document_move_to_trash_no_permission(self):
@@ -528,7 +539,8 @@ class TrashedDocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_trashed_document_delete_view(self):
return self.delete(
viewname='rest_api:trasheddocument-detail', args=(self.document.pk,)
viewname='rest_api:trasheddocument-detail',
kwargs={'document_pk': self.document.pk}
)
def test_trashed_document_delete_from_trash_no_access(self):
@@ -550,7 +562,8 @@ class TrashedDocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_trashed_document_detail_view(self):
return self.get(
viewname='rest_api:trasheddocument-detail', args=(self.document.pk,)
viewname='rest_api:trasheddocument-detail',
kwargs={'document_pk': self.document.pk}
)
def test_trashed_document_detail_view_no_access(self):
@@ -594,7 +607,8 @@ class TrashedDocumentAPITestCase(DocumentTestMixin, BaseAPITestCase):
def _request_trashed_document_restore_view(self):
return self.post(
viewname='rest_api:trasheddocument-restore', args=(self.document.pk,)
viewname='rest_api:trasheddocument-restore',
kwargs={'document_pk': self.document.pk}
)
def test_trashed_document_restore_no_access(self):

View File

@@ -16,7 +16,8 @@ class DeletedDocumentTestCase(GenericDocumentViewTestCase):
def _request_document_restore_view(self):
return self.post(
viewname='documents:document_restore', args=(self.document.pk,)
viewname='documents:document_restore',
kwargs={'document_pk': self.document.pk}
)
def test_document_restore_view_no_permission(self):
@@ -42,7 +43,8 @@ class DeletedDocumentTestCase(GenericDocumentViewTestCase):
def _request_document_trash_view(self):
return self.post(
viewname='documents:document_trash', args=(self.document.pk,)
viewname='documents:document_trash',
kwargs={'document_pk': self.document.pk}
)
def test_document_trash_no_permissions(self):
@@ -63,7 +65,8 @@ class DeletedDocumentTestCase(GenericDocumentViewTestCase):
def _request_document_delete_view(self):
return self.post(
viewname='documents:document_delete', args=(self.document.pk,),
viewname='documents:document_delete',
kwargs={'document_pk': self.document.pk}
)
def test_document_delete_no_permissions(self):

View File

@@ -1,8 +1,11 @@
from __future__ import unicode_literals
from django.utils.encoding import force_text
from ..permissions import permission_document_view
from .base import GenericDocumentViewTestCase
from .literals import TEST_MULTI_PAGE_TIFF
class DocumentPageViewTestCase(GenericDocumentViewTestCase):
@@ -12,7 +15,8 @@ class DocumentPageViewTestCase(GenericDocumentViewTestCase):
def _document_page_list_view(self):
return self.get(
viewname='documents:document_pages', args=(self.document.pk,)
viewname='documents:document_pages',
kwargs={'document_pk': self.document.pk}
)
def test_document_page_list_view_no_permission(self):
@@ -27,3 +31,87 @@ class DocumentPageViewTestCase(GenericDocumentViewTestCase):
self.assertContains(
response=response, text=self.document.label, status_code=200
)
class DocumentPageNavigationViewTestCase(GenericDocumentViewTestCase):
test_document_filename = TEST_MULTI_PAGE_TIFF
def setUp(self):
super(DocumentPageNavigationViewTestCase, self).setUp()
self.login_user()
def _request_document_page_navigation_next_view(self):
return self.get(
viewname='documents:document_page_navigation_next',
kwargs={'document_page_pk': self.document.pages.first().pk},
follow=True
)
def test_document_page_navigation_next_with_access(self):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_page_navigation_next_view()
self.assertContains(
response=response, status_code=200,
text=force_text(self.document.pages.last())
)
def _request_document_page_navigation_last_view(self):
return self.get(
viewname='documents:document_page_navigation_last',
kwargs={'document_page_pk': self.document.pages.first().pk},
follow=True
)
def test_document_page_navigation_last_with_access(self):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_page_navigation_last_view()
self.assertContains(
response=response, status_code=200,
text=force_text(self.document.pages.last())
)
def _request_document_page_navigation_previous_view(self):
return self.get(
viewname='documents:document_page_navigation_previous',
kwargs={'document_page_pk': self.document.pages.last().pk},
follow=True
)
def test_document_page_navigation_previous_with_access(self):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_page_navigation_previous_view()
self.assertContains(
response=response, status_code=200,
text=force_text(self.document.pages.first())
)
def _request_document_page_navigation_first_view(self):
return self.get(
viewname='documents:document_page_navigation_first',
kwargs={'document_page_pk': self.document.pages.last().pk},
follow=True
)
def test_document_page_navigation_first_with_access(self):
self.grant_access(
obj=self.document, permission=permission_document_view
)
response = self._request_document_page_navigation_first_view()
self.assertContains(
response=response, status_code=200,
text=force_text(self.document.pages.first())
)

View File

@@ -50,7 +50,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
def _request_document_type_delete(self):
return self.post(
viewname='documents:document_type_delete',
args=(self.document_type.pk,)
kwargs={'document_type_pk': self.document_type.pk}
)
def test_document_type_delete_view_no_permission(self):
@@ -69,7 +69,7 @@ class DocumentTypeViewsTestCase(GenericDocumentViewTestCase):
def _request_document_type_edit(self):
return self.post(
viewname='documents:document_type_edit',
args=(self.document_type.pk,),
kwargs={'document_type_pk': self.document_type.pk},
data={
'label': TEST_DOCUMENT_TYPE_LABEL_EDITED,
'delete_time_period': DEFAULT_DELETE_PERIOD,
@@ -105,7 +105,7 @@ class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, Gener
def _request_quick_label_create(self):
return self.post(
viewname='documents:document_type_filename_create',
args=(self.document_type.pk,),
kwargs={'document_type_pk': self.document_type.pk},
data={
'filename': TEST_DOCUMENT_TYPE_QUICK_LABEL,
}
@@ -132,7 +132,7 @@ class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, Gener
def _request_quick_label_delete(self):
return self.post(
viewname='documents:document_type_filename_delete',
args=(self.document_type_filename.pk,),
kwargs={'filename_pk': self.document_type_filename.pk},
)
def test_document_type_quick_label_delete_no_access(self):
@@ -158,7 +158,7 @@ class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, Gener
def _request_quick_label_edit(self):
return self.post(
viewname='documents:document_type_filename_edit',
args=(self.document_type_filename.pk,),
kwargs={'filename_pk': self.document_type_filename.pk},
data={
'filename': TEST_DOCUMENT_TYPE_QUICK_LABEL_EDITED,
}
@@ -193,7 +193,7 @@ class DocumentTypeQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, Gener
def _request_quick_label_list_view(self):
return self.get(
viewname='documents:document_type_filename_list',
args=(self.document_type.pk,),
kwargs={'document_type_pk': self.document_type.pk},
)
def test_document_type_quick_label_list_no_access(self):

View File

@@ -22,7 +22,7 @@ class DocumentVersionTestCase(GenericDocumentViewTestCase):
def _request_document_version_list_view(self):
return self.get(
viewname='documents:document_version_list',
args=(self.document.pk,)
kwargs={'document_pk': self.document.pk}
)
def test_document_version_list_no_permission(self):
@@ -43,7 +43,7 @@ class DocumentVersionTestCase(GenericDocumentViewTestCase):
def _request_document_version_revert_view(self, document_version):
return self.post(
viewname='documents:document_version_revert',
args=(document_version.pk,)
kwargs={'document_version_pk': document_version.pk}
)
def test_document_version_revert_no_permission(self):

View File

@@ -33,7 +33,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_properties_view(self):
return self.get(
viewname='documents:document_properties',
args=(self.document.pk,)
kwargs={'document_pk': self.document.pk}
)
def test_document_view_no_permissions(self):
@@ -69,7 +69,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_type_edit(self, document_type):
return self.post(
viewname='documents:document_document_type_edit',
args=(self.document.pk,),
kwargs={'document_pk': self.document.pk},
data={'document_type': document_type.pk}
)
@@ -177,7 +177,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_download_form_view(self):
return self.get(
viewname='documents:document_download_form',
args=(self.document.pk,),
kwargs={'document_pk': self.document.pk}
)
def test_document_download_form_view_no_permission(self):
@@ -199,7 +199,8 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_download_view(self):
return self.get(
viewname='documents:document_download', args=(self.document.pk,)
viewname='documents:document_download',
kwargs={'document_pk': self.document.pk}
)
def test_document_download_view_no_permission(self):
@@ -259,9 +260,9 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_version_download(self, data=None):
data = data or {}
return self.get(
viewname='documents:document_version_download', args=(
self.document.latest_version.pk,
), data=data
viewname='documents:document_version_download', kwargs={
'document_version_pk': self.document.latest_version.pk,
}, data=data
)
def test_document_version_download_view_no_permission(self):
@@ -319,7 +320,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_update_page_count_view(self):
return self.post(
viewname='documents:document_update_page_count',
args=(self.document.pk,)
kwargs={'document_pk': self.document.pk}
)
def test_document_update_page_count_view_no_permission(self):
@@ -371,7 +372,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_clear_transformations_view(self):
return self.post(
viewname='documents:document_clear_transformations',
args=(self.document.pk,)
kwargs={'document_pk': self.document.pk}
)
def test_document_clear_transformations_view_no_permission(self):
@@ -505,9 +506,9 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_page_view(self, document_page):
return self.get(
viewname='documents:document_page_view', args=(
document_page.pk,
)
viewname='documents:document_page_view', kwargs={
'document_page_pk': document_page.pk
}
)
def test_document_page_view_no_permissions(self):
@@ -530,9 +531,9 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_print_view(self):
return self.get(
viewname='documents:document_print', args=(
self.document.pk,
), data={
viewname='documents:document_print', kwargs={
'document_pk': self.document.pk
}, data={
'page_group': PAGE_RANGE_ALL
}
)
@@ -564,7 +565,8 @@ class DocumentsQuickLabelViewsTestCase(DocumentTypeQuickLabelTestMixin, GenericD
data.update(extra_data or {})
return self.post(
viewname='documents:document_edit', args=(self.document.pk,),
viewname='documents:document_edit',
kwargs={'document_pk': self.document.pk},
data=data
)

View File

@@ -23,7 +23,7 @@ class DuplicatedDocumentsViewsTestCase(GenericDocumentViewTestCase):
def _request_document_duplicates_list_view(self):
return self.get(
viewname='documents:document_duplicates_list',
args=(self.document.pk,)
kwargs={'document_pk': self.document.pk}
)
def test_duplicated_document_list_no_permissions(self):

View File

@@ -29,7 +29,8 @@ class DocumentEventsTestCase(GenericDocumentViewTestCase):
Action.objects.all().delete()
response = self.get(
'documents:document_download', args=(self.document.pk,)
viewname='documents:document_download',
kwargs={'document_pk': self.document.pk}
)
self.assertEqual(response.status_code, 403)
@@ -49,7 +50,8 @@ class DocumentEventsTestCase(GenericDocumentViewTestCase):
self.expected_content_type = 'image/png; charset=utf-8'
response = self.get(
viewname='documents:document_download', args=(self.document.pk,),
viewname='documents:document_download',
kwargs={'document_pk': self.document.pk}
)
# Download the file to close the file descriptor
@@ -73,7 +75,8 @@ class DocumentEventsTestCase(GenericDocumentViewTestCase):
Action.objects.all().delete()
response = self.get(
viewname='documents:document_preview', args=(self.document.pk,)
viewname='documents:document_preview',
kwargs={'document_pk': self.document.pk}
)
self.assertEqual(response.status_code, 403)
@@ -90,7 +93,8 @@ class DocumentEventsTestCase(GenericDocumentViewTestCase):
permission_document_view.stored_permission
)
self.get(
viewname='documents:document_preview', args=(self.document.pk,),
viewname='documents:document_preview',
kwargs={'document_pk': self.document.pk}
)
event = Action.objects.any(obj=self.document).first()

File diff suppressed because it is too large Load Diff

View File

@@ -2,12 +2,14 @@ from __future__ import absolute_import, unicode_literals
import logging
from furl import furl
from django.conf import settings
from django.contrib import messages
from django.shortcuts import get_object_or_404, resolve_url
from django.urls import reverse
from django.utils.encoding import force_text
from django.utils.http import urlencode
from django.utils.six.moves.urllib.parse import parse_qs, urlparse
from django.utils.translation import ugettext_lazy as _
from django.views.generic import RedirectView
@@ -37,11 +39,10 @@ logger = logging.getLogger(__name__)
class DocumentPageInteractiveTransformation(RedirectView):
def dispatch(self, request, *args, **kwargs):
object = self.get_object()
obj = self.get_object()
AccessControlList.objects.check_access(
permissions=permission_document_view, user=request.user,
obj=object
obj=obj, permissions=permission_document_view, user=request.user,
)
return super(DocumentPageInteractiveTransformation, self).dispatch(
@@ -49,11 +50,14 @@ class DocumentPageInteractiveTransformation(RedirectView):
)
def get_object(self):
return get_object_or_404(klass=DocumentPage, pk=self.kwargs['pk'])
return get_object_or_404(
klass=DocumentPage, pk=self.kwargs['document_page_pk']
)
def get_redirect_url(self, *args, **kwargs):
url = reverse(
'documents:document_page_view', args=(self.kwargs['pk'],)
viewname='documents:document_page_view',
kwargs={'document_page_pk': self.kwargs['document_page_pk']}
)
query_dict = {
@@ -70,8 +74,8 @@ class DocumentPageInteractiveTransformation(RedirectView):
class DocumentPageListView(SingleObjectListView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
permissions=permission_document_view, user=self.request.user,
obj=self.get_document()
obj=self.get_document(), permissions=permission_document_view,
user=self.request.user,
)
return super(
@@ -79,7 +83,7 @@ class DocumentPageListView(SingleObjectListView):
).dispatch(request, *args, **kwargs)
def get_document(self):
return get_object_or_404(klass=Document, pk=self.kwargs['pk'])
return get_object_or_404(klass=Document, pk=self.kwargs['document_pk'])
def get_extra_context(self):
return {
@@ -109,64 +113,63 @@ class DocumentPageNavigationBase(RedirectView):
)
def get_object(self):
return get_object_or_404(klass=DocumentPage, pk=self.kwargs['pk'])
def get_redirect_url(self, *args, **kwargs):
parse_result = urlparse(
self.request.META.get(
'HTTP_REFERER', resolve_url(
settings.LOGIN_REDIRECT_URL
)
)
return get_object_or_404(
klass=DocumentPage, pk=self.kwargs['document_page_pk']
)
query_dict = parse_qs(parse_result.query)
def get_redirect_url(self, *args, **kwargs):
"""
Attempt to jump to the same kind of view but resolved to a new
object of the same kind.
"""
previous_url = self.request.META.get('HTTP_REFERER', None)
resolver_match = resolve(parse_result.path)
if not previous_url:
try:
previous_url = self.get_object().get_absolute_url()
except AttributeError:
previous_url = resolve_url(settings.LOGIN_REDIRECT_URL)
# Default is to stay on the same view
url = parse_result.path
parsed_url = furl(url=previous_url)
new_object = self.navigation_function()
# Obtain the view name to be able to resolve it back with new keyword
# arguments.
resolver_match = resolve(path=force_text(parsed_url.path))
# Inject new_object pk in the referer's view pk or object_id kwargs
if 'pk' in resolver_match.kwargs:
resolver_match.kwargs['pk'] = new_object.pk
new_kwargs = self.get_new_kwargs()
if set(new_kwargs) == set(resolver_match.kwargs):
# It is the same type of object, reuse the URL to stay in the
# same kind of view but pointing to a new object
url = reverse(
resolver_match.view_name, kwargs=resolver_match.kwargs
)
elif 'object_id' in resolver_match.kwargs:
resolver_match.kwargs['object_id'] = new_object.pk
url = reverse(
resolver_match.view_name, kwargs=resolver_match.kwargs
viewname=resolver_match.view_name, kwargs=new_kwargs
)
else:
messages.warning(
self.request, _(
'Unknown view keyword argument schema, unable to '
'redirect.'
)
)
url = parsed_url.path
return '{}?{}'.format(url, urlencode(query_dict, doseq=True))
# Update just the path to retain the querystring in case there is
# transformation data.
parsed_url.path = url
return parsed_url.tostr()
class DocumentPageNavigationFirst(DocumentPageNavigationBase):
def navigation_function(self):
def get_new_kwargs(self):
document_page = self.get_object()
return document_page.siblings.first()
return {'document_page_pk': document_page.siblings.first().pk}
class DocumentPageNavigationLast(DocumentPageNavigationBase):
def navigation_function(self):
def get_new_kwargs(self):
document_page = self.get_object()
return document_page.siblings.last()
return {'document_page_pk': document_page.siblings.last().pk}
class DocumentPageNavigationNext(DocumentPageNavigationBase):
def navigation_function(self):
def get_new_kwargs(self):
document_page = self.get_object()
try:
@@ -175,14 +178,16 @@ class DocumentPageNavigationNext(DocumentPageNavigationBase):
)
except DocumentPage.DoesNotExist:
messages.warning(
self.request, _('There are no more pages in this document')
request=self.request, message=_(
'There are no more pages in this document'
)
)
finally:
return document_page
return {'document_page_pk': document_page.pk}
class DocumentPageNavigationPrevious(DocumentPageNavigationBase):
def navigation_function(self):
def get_new_kwargs(self):
document_page = self.get_object()
try:
@@ -191,12 +196,12 @@ class DocumentPageNavigationPrevious(DocumentPageNavigationBase):
)
except DocumentPage.DoesNotExist:
messages.warning(
self.request, _(
request=self.request, message=_(
'You are already at the first page of this document'
)
)
finally:
return document_page
return {'document_page_pk': document_page.pk}
class DocumentPageRotateLeftView(DocumentPageInteractiveTransformation):
@@ -253,7 +258,9 @@ class DocumentPageView(SimpleView):
}
def get_object(self):
return get_object_or_404(klass=DocumentPage, pk=self.kwargs['pk'])
return get_object_or_404(
klass=DocumentPage, pk=self.kwargs['document_page_pk']
)
class DocumentPageViewResetView(RedirectView):

View File

@@ -42,7 +42,7 @@ class DocumentTypeCreateView(SingleObjectCreateView):
'delete_time_unit'
)
model = DocumentType
post_action_redirect = reverse_lazy('documents:document_type_list')
post_action_redirect = reverse_lazy(viewname='documents:document_type_list')
view_permission = permission_document_type_create
def get_extra_context(self):
@@ -59,7 +59,8 @@ class DocumentTypeCreateView(SingleObjectCreateView):
class DocumentTypeDeleteView(SingleObjectDeleteView):
model = DocumentType
object_permission = permission_document_type_delete
post_action_redirect = reverse_lazy('documents:document_type_list')
post_action_redirect = reverse_lazy(viewname='documents:document_type_list')
pk_url_kwarg = 'document_type_pk'
def get_extra_context(self):
return {
@@ -71,7 +72,7 @@ class DocumentTypeDeleteView(SingleObjectDeleteView):
class DocumentTypeDocumentListView(DocumentListView):
def get_document_type(self):
return get_object_or_404(klass=DocumentType, pk=self.kwargs['pk'])
return get_object_or_404(klass=DocumentType, pk=self.kwargs['document_type_pk'])
def get_document_queryset(self):
return self.get_document_type().documents.all()
@@ -94,7 +95,10 @@ class DocumentTypeEditView(SingleObjectEditView):
)
model = DocumentType
object_permission = permission_document_type_edit
post_action_redirect = reverse_lazy('documents:document_type_list')
pk_url_kwarg = 'document_type_pk'
post_action_redirect = reverse_lazy(
viewname='documents:document_type_list'
)
def get_extra_context(self):
return {
@@ -146,7 +150,7 @@ class DocumentTypeFilenameCreateView(SingleObjectCreateView):
)
def get_document_type(self):
return get_object_or_404(klass=DocumentType, pk=self.kwargs['pk'])
return get_object_or_404(klass=DocumentType, pk=self.kwargs['document_type_pk'])
def get_extra_context(self):
return {
@@ -164,6 +168,7 @@ class DocumentTypeFilenameCreateView(SingleObjectCreateView):
class DocumentTypeFilenameDeleteView(SingleObjectDeleteView):
model = DocumentTypeFilename
object_permission = permission_document_type_edit
pk_url_kwarg = 'filename_pk'
def get_extra_context(self):
return {
@@ -181,8 +186,8 @@ class DocumentTypeFilenameDeleteView(SingleObjectDeleteView):
def get_post_action_redirect(self):
return reverse(
'documents:document_type_filename_list',
args=(self.get_object().document_type.pk,)
viewname='documents:document_type_filename_list',
kwargs={'document_type_pk': self.get_object().document_type.pk}
)
@@ -190,6 +195,7 @@ class DocumentTypeFilenameEditView(SingleObjectEditView):
fields = ('enabled', 'filename',)
model = DocumentTypeFilename
object_permission = permission_document_type_edit
pk_url_kwarg = 'filename_pk'
def get_extra_context(self):
document_type_filename = self.get_object()
@@ -209,8 +215,8 @@ class DocumentTypeFilenameEditView(SingleObjectEditView):
def get_post_action_redirect(self):
return reverse(
'documents:document_type_filename_list',
args=(self.get_object().document_type.pk,)
viewname='documents:document_type_filename_list',
kwargs={'document_type_pk': self.get_object().document_type.pk}
)
@@ -219,7 +225,7 @@ class DocumentTypeFilenameListView(SingleObjectListView):
object_permission = permission_document_type_view
def get_document_type(self):
return get_object_or_404(klass=DocumentType, pk=self.kwargs['pk'])
return get_object_or_404(klass=DocumentType, pk=self.kwargs['document_type_pk'])
def get_extra_context(self):
return {

View File

@@ -27,18 +27,18 @@ logger = logging.getLogger(__name__)
class DocumentVersionListView(SingleObjectListView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
permissions=permission_document_version_view, user=request.user,
obj=self.get_document()
obj=self.get_document(),
permissions=permission_document_version_view, user=request.user
)
self.get_document().add_as_recent_document_for_user(request.user)
self.get_document().add_as_recent_document_for_user(user=request.user)
return super(
DocumentVersionListView, self
).dispatch(request, *args, **kwargs)
def get_document(self):
return get_object_or_404(klass=Document, pk=self.kwargs['pk'])
return get_object_or_404(klass=Document, pk=self.kwargs['document_pk'])
def get_extra_context(self):
return {
@@ -67,18 +67,22 @@ class DocumentVersionRevertView(ConfirmView):
}
def get_object(self):
return get_object_or_404(klass=DocumentVersion, pk=self.kwargs['pk'])
return get_object_or_404(
klass=DocumentVersion, pk=self.kwargs['document_version_pk']
)
def view_action(self):
try:
self.get_object().revert(_user=self.request.user)
messages.success(
self.request, _('Document version reverted successfully')
request=self.request, message=_(
'Document version reverted successfully'
)
)
except Exception as exception:
messages.error(
self.request,
_('Error reverting document version; %s') % exception
request=self.request,
message=_('Error reverting document version; %s') % exception
)
@@ -86,6 +90,7 @@ class DocumentVersionDownloadFormView(DocumentDownloadFormView):
form_class = DocumentVersionDownloadForm
model = DocumentVersion
multiple_download_view = None
pk_url_kwarg = 'document_version_pk'
querystring_form_fields = (
'compressed', 'zip_filename', 'preserve_extension'
)
@@ -108,7 +113,7 @@ class DocumentVersionDownloadFormView(DocumentDownloadFormView):
)
if not id_list:
id_list = self.kwargs['pk']
id_list = self.kwargs['document_version_pk']
return self.model.objects.filter(
pk__in=id_list.split(',')
@@ -118,6 +123,7 @@ class DocumentVersionDownloadFormView(DocumentDownloadFormView):
class DocumentVersionDownloadView(DocumentDownloadView):
model = DocumentVersion
object_permission = permission_document_download
pk_url_kwarg = 'document_version_pk'
@staticmethod
def get_item_file(item):

View File

@@ -66,7 +66,7 @@ class DocumentListView(SingleObjectListView):
return super(DocumentListView, self).get_context_data(**kwargs)
except Exception as exception:
messages.error(
self.request, _(
request=self.request, message=_(
'Error retrieving document list: %(exception)s.'
) % {
'exception': exception
@@ -105,10 +105,11 @@ class DeletedDocumentDeleteView(ConfirmView):
extra_context = {
'title': _('Delete the selected document?')
}
pk_url_kwarg = 'document_pk'
def object_action(self, instance):
source_document = get_object_or_404(
Document.passthrough, pk=instance.pk
klass=Document.passthrough, pk=instance.pk
)
AccessControlList.objects.check_access(
@@ -121,10 +122,14 @@ class DeletedDocumentDeleteView(ConfirmView):
)
def view_action(self):
instance = get_object_or_404(DeletedDocument, pk=self.kwargs['pk'])
instance = get_object_or_404(
klass=DeletedDocument, pk=self.kwargs['document_pk']
)
self.object_action(instance=instance)
messages.success(
self.request, _('Document: %(document)s deleted.') % {
request=self.request, message=_(
'Document: %(document)s deleted.'
) % {
'document': instance
}
)
@@ -144,8 +149,8 @@ class DeletedDocumentListView(DocumentListView):
def get_document_queryset(self):
return AccessControlList.objects.filter_by_access(
permission_document_view, self.request.user,
queryset=DeletedDocument.trash.all()
permission=permission_document_view,
queryset=DeletedDocument.trash.all(), user=self.request.user
)
def get_extra_context(self):
@@ -172,6 +177,7 @@ class DocumentDocumentTypeEditView(MultipleObjectFormActionView):
form_class = DocumentTypeFilteredSelectForm
model = Document
object_permission = permission_document_properties_edit
pk_url_kwarg = 'document_pk'
success_message = _(
'Document type change request performed on %(count)d document'
)
@@ -216,7 +222,7 @@ class DocumentDocumentTypeEditView(MultipleObjectFormActionView):
)
messages.success(
self.request, _(
request=self.request, message=_(
'Document type for "%s" changed successfully.'
) % instance
)
@@ -225,8 +231,8 @@ class DocumentDocumentTypeEditView(MultipleObjectFormActionView):
class DocumentDuplicatesListView(DocumentListView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
permissions=permission_document_view, user=self.request.user,
obj=self.get_document()
obj=self.get_document(), permissions=permission_document_view,
user=self.request.user
)
return super(
@@ -234,7 +240,7 @@ class DocumentDuplicatesListView(DocumentListView):
).dispatch(request, *args, **kwargs)
def get_document(self):
return get_object_or_404(klass=Document, pk=self.kwargs['pk'])
return get_object_or_404(klass=Document, pk=self.kwargs['document_pk'])
def get_extra_context(self):
context = super(DocumentDuplicatesListView, self).get_extra_context()
@@ -262,6 +268,7 @@ class DocumentEditView(SingleObjectEditView):
form_class = DocumentForm
model = Document
object_permission = permission_document_properties_edit
pk_url_kwarg = 'document_pk'
def dispatch(self, request, *args, **kwargs):
result = super(
@@ -283,7 +290,8 @@ class DocumentEditView(SingleObjectEditView):
def get_post_action_redirect(self):
return reverse(
'documents:document_properties', args=(self.get_object().pk,)
viewname='documents:document_properties',
kwargs={'document_pk': self.get_object().pk}
)
@@ -291,6 +299,7 @@ class DocumentPreviewView(SingleObjectDetailView):
form_class = DocumentPreviewForm
model = Document
object_permission = permission_document_view
pk_url_kwarg = 'document_pk'
def dispatch(self, request, *args, **kwargs):
result = super(
@@ -322,19 +331,23 @@ class DocumentRestoreView(ConfirmView):
)
AccessControlList.objects.check_access(
permissions=permission_document_restore, user=self.request.user,
obj=source_document
obj=source_document, permissions=permission_document_restore,
user=self.request.user
)
instance.restore()
def view_action(self):
instance = get_object_or_404(klass=DeletedDocument, pk=self.kwargs['pk'])
instance = get_object_or_404(
klass=DeletedDocument, pk=self.kwargs['document_pk']
)
self.object_action(instance=instance)
messages.success(
self.request, _('Document: %(document)s restored.') % {
request=self.request, message=_(
'Document: %(document)s restored.'
) % {
'document': instance
}
)
@@ -357,15 +370,15 @@ class DocumentTrashView(ConfirmView):
}
def get_object(self):
return get_object_or_404(klass=Document, pk=self.kwargs['pk'])
return get_object_or_404(klass=Document, pk=self.kwargs['document_pk'])
def get_post_action_redirect(self):
return reverse('documents:document_list_recent_access')
return reverse(viewname='documents:document_list_recent_access')
def object_action(self, instance):
AccessControlList.objects.check_access(
permissions=permission_document_trash, user=self.request.user,
obj=instance
obj=instance, permissions=permission_document_trash,
user=self.request.user
)
instance.delete()
@@ -376,7 +389,9 @@ class DocumentTrashView(ConfirmView):
self.object_action(instance=instance)
messages.success(
self.request, _('Document: %(document)s moved to trash successfully.') % {
request=self.request, message=_(
'Document: %(document)s moved to trash successfully.'
) % {
'document': instance
}
)
@@ -397,6 +412,7 @@ class DocumentView(SingleObjectDetailView):
form_class = DocumentPropertiesForm
model = Document
object_permission = permission_document_view
pk_url_kwarg = 'document_pk'
def dispatch(self, request, *args, **kwargs):
result = super(DocumentView, self).dispatch(request, *args, **kwargs)
@@ -417,7 +433,7 @@ class EmptyTrashCanView(ConfirmView):
}
view_permission = permission_empty_trash
action_cancel_redirect = post_action_redirect = reverse_lazy(
'documents:document_list_deleted'
viewname='documents:document_list_deleted'
)
def view_action(self):
@@ -426,7 +442,9 @@ class EmptyTrashCanView(ConfirmView):
kwargs={'deleted_document_id': deleted_document.pk}
)
messages.success(self.request, _('Trash emptied successfully'))
messages.success(
request=self.request, message=_('Trash emptied successfully')
)
class DocumentDownloadFormView(FormView):
@@ -458,7 +476,8 @@ class DocumentDownloadFormView(FormView):
url = reverse(self.multiple_download_view)
else:
url = reverse(
self.single_download_view, args=(self.queryset.first().pk,)
viewname=self.single_download_view,
kwargs={'document_pk': self.queryset.first().pk}
)
return HttpResponseRedirect('{}?{}'.format(url, querystring))
@@ -469,7 +488,7 @@ class DocumentDownloadFormView(FormView):
)
if not id_list:
id_list = self.kwargs['pk']
id_list = self.kwargs['document_pk']
return self.model.objects.filter(
pk__in=id_list.split(',')
@@ -480,10 +499,10 @@ class DocumentDownloadFormView(FormView):
{
'name': 'appearance/generic_list_items_subtemplate.html',
'context': {
'object_list': self.queryset,
'hide_link': True,
'hide_links': True,
'hide_multi_item_actions': True,
'object_list': self.queryset
}
}
]
@@ -507,8 +526,8 @@ class DocumentDownloadFormView(FormView):
def get_queryset(self):
return AccessControlList.objects.filter_by_access(
permission_document_download, self.request.user,
queryset=self.get_document_queryset()
permission=permission_document_download,
queryset=self.get_document_queryset(), user=self.request.user
)
@@ -516,6 +535,7 @@ class DocumentDownloadView(SingleObjectDownloadView):
model = Document
# Set to None to disable the .get_object call
object_permission = None
pk_url_kwarg = 'document_pk'
@staticmethod
def commit_event(item, request):
@@ -541,7 +561,7 @@ class DocumentDownloadView(SingleObjectDownloadView):
)
if not id_list:
id_list = self.kwargs['pk']
id_list = self.kwargs[self.pk_url_kwarg]
queryset = self.model.objects.filter(pk__in=id_list.split(','))
@@ -594,6 +614,8 @@ class DocumentDownloadView(SingleObjectDownloadView):
class DocumentUpdatePageCountView(MultipleObjectConfirmActionView):
model = Document
object_permission = permission_document_tools
pk_url_kwarg = 'document_pk'
success_message = _(
'%(count)d document queued for page count recalculation'
)
@@ -632,7 +654,7 @@ class DocumentUpdatePageCountView(MultipleObjectConfirmActionView):
)
else:
messages.error(
self.request, _(
request=self.request, message=_(
'Document "%(document)s" is empty. Upload at least one '
'document version before attempting to detect the '
'page count.'
@@ -645,6 +667,7 @@ class DocumentUpdatePageCountView(MultipleObjectConfirmActionView):
class DocumentTransformationsClearView(MultipleObjectConfirmActionView):
model = Document
object_permission = permission_transformation_delete
pk_url_kwarg = 'document_pk'
success_message = _(
'Transformation clear request processed for %(count)d document'
)
@@ -682,7 +705,7 @@ class DocumentTransformationsClearView(MultipleObjectConfirmActionView):
Transformation.objects.get_for_model(page).delete()
except Exception as exception:
messages.error(
self.request, _(
request=self.request, message=_(
'Error deleting the page transformations for '
'document: %(document)s; %(error)s.'
) % {
@@ -710,7 +733,7 @@ class DocumentTransformationsCloneView(FormView):
)
except Exception as exception:
messages.error(
self.request, _(
request=self.request, message=_(
'Error deleting the page transformations for '
'document: %(document)s; %(error)s.'
) % {
@@ -719,7 +742,9 @@ class DocumentTransformationsCloneView(FormView):
)
else:
messages.success(
self.request, _('Transformations cloned successfully.')
request=self.request, message=_(
'Transformations cloned successfully.'
)
)
return super(DocumentTransformationsCloneView, self).form_valid(form=form)
@@ -743,14 +768,16 @@ class DocumentTransformationsCloneView(FormView):
return context
def get_object(self):
instance = get_object_or_404(klass=Document, pk=self.kwargs['pk'])
AccessControlList.objects.check_access(
permissions=permission_transformation_edit,
user=self.request.user, obj=instance
instance = get_object_or_404(
klass=Document, pk=self.kwargs['document_pk']
)
instance.add_as_recent_document_for_user(self.request.user)
AccessControlList.objects.check_access(
obj=instance, permissions=permission_transformation_edit,
user=self.request.user
)
instance.add_as_recent_document_for_user(user=self.request.user)
return instance
@@ -761,11 +788,11 @@ class DocumentPrint(FormView):
def dispatch(self, request, *args, **kwargs):
instance = self.get_object()
AccessControlList.objects.check_access(
permissions=permission_document_print, user=self.request.user,
obj=instance
obj=instance, permissions=permission_document_print,
user=self.request.user
)
instance.add_as_recent_document_for_user(self.request.user)
instance.add_as_recent_document_for_user(user=self.request.user)
self.page_group = self.request.GET.get('page_group')
self.page_range = self.request.GET.get('page_range')
@@ -792,8 +819,8 @@ class DocumentPrint(FormView):
{
'appearance_type': 'plain',
'pages': pages,
'width': setting_print_width.value,
'height': setting_print_height.value,
'width': setting_print_width.value
}
)
@@ -804,7 +831,8 @@ class DocumentPrint(FormView):
context = {
'form_action': reverse(
'documents:document_print', args=(instance.pk,)
viewname='documents:document_print',
kwargs={'document_pk': instance.pk}
),
'object': instance,
'submit_label': _('Submit'),
@@ -816,7 +844,7 @@ class DocumentPrint(FormView):
return context
def get_object(self):
return get_object_or_404(klass=Document, pk=self.kwargs['pk'])
return get_object_or_404(klass=Document, pk=self.kwargs['document_pk'])
def get_template_names(self):
if self.page_group or self.page_range: