Update generic view and check access interfaces

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-01-30 03:54:10 -04:00
parent b4a81ee0bc
commit 4ba2d375af
26 changed files with 128 additions and 150 deletions

View File

@@ -14,12 +14,7 @@ from ..permissions import permission_acl_edit, permission_acl_view
class ACLsLinksTestCase(GenericDocumentViewTestCase):
def test_document_acl_create_link(self):
acl = AccessControlList.objects.create(
content_object=self.document, role=self.role
)
acl.permissions.add(permission_acl_edit.stored_permission)
self.login_user()
self.grant_access(obj=self.document, permission=permission_acl_edit)
self.add_test_view(test_object=self.document)
context = self.get_test_view()
@@ -39,12 +34,7 @@ class ACLsLinksTestCase(GenericDocumentViewTestCase):
)
def test_document_acl_delete_link(self):
acl = AccessControlList.objects.create(
content_object=self.document, role=self.role
)
acl.permissions.add(permission_acl_edit.stored_permission)
self.login_user()
self.grant_access(obj=self.document, permission=permission_acl_edit)
self.add_test_view(test_object=acl)
context = self.get_test_view()
@@ -53,16 +43,13 @@ class ACLsLinksTestCase(GenericDocumentViewTestCase):
self.assertNotEqual(resolved_link, None)
self.assertEqual(
resolved_link.url, reverse(viewname='acls:acl_delete', kwargs={'acl_pk': acl.pk})
resolved_link.url, reverse(
viewname='acls:acl_delete', kwargs={'acl_id': acl.pk}
)
)
def test_document_acl_edit_link(self):
acl = AccessControlList.objects.create(
content_object=self.document, role=self.role
)
acl.permissions.add(permission_acl_edit.stored_permission)
self.login_user()
self.grant_access(obj=self.document, permission=permission_acl_edit)
self.add_test_view(test_object=acl)
context = self.get_test_view()
@@ -71,16 +58,13 @@ class ACLsLinksTestCase(GenericDocumentViewTestCase):
self.assertNotEqual(resolved_link, None)
self.assertEqual(
resolved_link.url, reverse(viewname='acls:acl_permissions', kwargs={'acl_pk': acl.pk})
resolved_link.url, reverse(
viewname='acls:acl_permissions', kwargs={'acl_id': acl.pk}
)
)
def test_document_acl_list_link(self):
acl = AccessControlList.objects.create(
content_object=self.document, role=self.role
)
acl.permissions.add(permission_acl_view.stored_permission)
self.login_user()
self.grant_access(obj=self.document, permission=permission_acl_view)
self.add_test_view(test_object=self.document)
context = self.get_test_view()

View File

@@ -132,7 +132,7 @@ class ACLListView(ContentTypeViewMixin, ExternalObjectMixin, SingleObjectListVie
),
}
def get_object_list(self):
def get_source_queryset(self):
return self.get_external_object().acls.all()

View File

@@ -75,9 +75,9 @@ class CabinetsApp(MayanAppConfig):
permission_cabinet_remove_document
)
)
ModelPermission.register_inheritance(
model=Cabinet, related='get_root',
)
#ModelPermission.register_inheritance(
# model=Cabinet, related='get_root',
#)
SourceColumn(
func=lambda context: widget_document_cabinets(

View File

@@ -64,7 +64,7 @@ class CabinetChildAddView(SingleObjectCreateView):
cabinet = super(CabinetChildAddView, self).get_object(*args, **kwargs)
AccessControlList.objects.check_access(
permissions=permission_cabinet_edit, obj=cabinet.get_root(),
obj=cabinet.get_root(), permission=permission_cabinet_edit,
user=self.request.user, raise_404=True
)
@@ -146,7 +146,7 @@ class CabinetDetailView(DocumentListView):
permission_object = cabinet.get_root()
AccessControlList.objects.check_access(
permissions=permission_cabinet_view, obj=permission_object,
obj=permission_object, permission=permission_cabinet_view,
user=self.request.user, raise_404=True
)
@@ -187,7 +187,7 @@ class CabinetListView(SingleObjectListView):
'no_results_title': _('No cabinets available'),
}
def get_object_list(self):
def get_source_queryset(self):
# Add explicit ordering of root nodes since the queryset returned
# is not affected by the model's order Meta option.
return Cabinet.objects.root_nodes().order_by('label')
@@ -200,8 +200,8 @@ class DocumentCabinetListView(CabinetListView):
)
AccessControlList.objects.check_access(
permissions=permission_document_view, user=request.user,
obj=self.document, raise_404=True
obj=self.document, permission=permission_document_view,
user=request.user, raise_404=True
)
return super(DocumentCabinetListView, self).dispatch(
@@ -227,7 +227,7 @@ class DocumentCabinetListView(CabinetListView):
'title': _('Cabinets containing document: %s') % self.document,
}
def get_object_list(self):
def get_source_queryset(self):
return self.document.get_cabinets().all()
@@ -295,7 +295,7 @@ class DocumentAddToCabinetView(MultipleObjectFormActionView):
for cabinet in form.cleaned_data['cabinets']:
AccessControlList.objects.check_access(
obj=cabinet, permissions=permission_cabinet_add_document,
obj=cabinet, permission=permission_cabinet_add_document,
user=self.request.user, raise_404=True
)
if cabinet in cabinet_membership:
@@ -383,7 +383,7 @@ class DocumentRemoveFromCabinetView(MultipleObjectFormActionView):
for cabinet in form.cleaned_data['cabinets']:
AccessControlList.objects.check_access(
obj=cabinet, permissions=permission_cabinet_remove_document,
obj=cabinet, permission=permission_cabinet_remove_document,
user=self.request.user, raise_404=True
)

View File

@@ -37,8 +37,8 @@ class TransformationDeleteView(SingleObjectDeleteView):
)
AccessControlList.objects.check_access(
permissions=permission_transformation_delete,
obj=self.transformation.content_object, user=request.user
obj=self.transformation.content_object,
permission=permission_transformation_delete, user=request.user
)
return super(TransformationDeleteView, self).dispatch(
@@ -93,8 +93,8 @@ class TransformationCreateView(SingleObjectCreateView):
raise Http404
AccessControlList.objects.check_access(
permissions=permission_transformation_create,
obj=self.content_object, user=request.user
obj=self.content_object, permission=permission_transformation_create,
user=request.user
)
return super(TransformationCreateView, self).dispatch(
@@ -149,7 +149,7 @@ class TransformationEditView(SingleObjectEditView):
AccessControlList.objects.check_access(
obj=self.transformation.content_object,
permissions=permission_transformation_edit, user=request.user
permission=permission_transformation_edit, user=request.user
)
return super(TransformationEditView, self).dispatch(
@@ -206,7 +206,7 @@ class TransformationListView(SingleObjectListView):
AccessControlList.objects.check_access(
obj=self.content_object,
permissions=permission_transformation_view,
permission=permission_transformation_view,
user=request.user
)
@@ -235,5 +235,5 @@ class TransformationListView(SingleObjectListView):
'title': _('Transformations for: %s') % self.content_object,
}
def get_object_list(self):
def get_source_queryset(self):
return Transformation.objects.get_for_model(obj=self.content_object)

View File

@@ -19,7 +19,7 @@ class CommentAPITestCase(CommentsTestMixin, DocumentTestMixin, BaseAPITestCase):
def _request_api_comment_create_view(self):
return self.post(
viewname='rest_api:comment-list',
kwargs={'document_pk': self.document.pk}, data={
kwargs={'document_id': self.document.pk}, data={
'comment': TEST_COMMENT_TEXT
}
)
@@ -40,8 +40,8 @@ class CommentAPITestCase(CommentsTestMixin, DocumentTestMixin, BaseAPITestCase):
def _request_api_comment_delete_view(self):
return self.delete(
viewname='rest_api:comment-detail', kwargs={
'document_pk': self.document.pk,
'comment_pk': self.test_comment.pk
'document_id': self.document.pk,
'comment_id': self.test_comment.pk
}
)
@@ -63,8 +63,8 @@ class CommentAPITestCase(CommentsTestMixin, DocumentTestMixin, BaseAPITestCase):
def _request_api_comment_detail_view(self):
return self.get(
viewname='rest_api:comment-detail', kwargs={
'document_pk': self.document.pk,
'comment_pk': self.test_comment.pk
'document_id': self.document.pk,
'comment_id': self.test_comment.pk
}
)
@@ -85,7 +85,7 @@ class CommentAPITestCase(CommentsTestMixin, DocumentTestMixin, BaseAPITestCase):
def _request_api_comment_list_view(self):
return self.get(
viewname='rest_api:comment-list',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_comment_list_view_no_access(self):

View File

@@ -100,5 +100,5 @@ class DocumentCommentListView(ExternalObjectMixin, SingleObjectListView):
'title': _('Comments for document: %s') % self.get_document(),
}
def get_object_list(self):
def get_source_queryset(self):
return self.get_document().comments.all()

View File

@@ -56,7 +56,7 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
)
response = self._request_index_delete_view(index=index)
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.assertEqual(Index.objects.count(), 1)
def test_index_delete_view_with_permission(self):
@@ -88,7 +88,7 @@ class IndexViewTestCase(GenericDocumentViewTestCase):
)
response = self._request_index_edit_view(index=index)
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
index = Index.objects.get(pk=index.pk)
self.assertEqual(index.label, TEST_INDEX_LABEL)

View File

@@ -103,8 +103,8 @@ class SetupIndexDocumentTypesView(AssignRemoveView):
def get_document_queryset(self):
return AccessControlList.objects.restrict_queryset(
permission_document_view, queryset=DocumentType.objects.all(),
user=self.request.user
permission=permission_document_view,
queryset=DocumentType.objects.all(), user=self.request.user
)
def get_extra_context(self):
@@ -153,7 +153,7 @@ class SetupIndexTreeTemplateListView(SingleObjectListView):
def get_index(self):
return get_object_or_404(klass=Index, pk=self.kwargs['index_pk'])
def get_object_list(self):
def get_source_queryset(self):
return self.get_index().template_root.get_descendants(
include_self=True
)
@@ -166,7 +166,7 @@ class TemplateNodeCreateView(SingleObjectCreateView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
obj=self.get_parent_node().index,
permissions=permission_document_indexing_edit, user=request.user
permission=permission_document_indexing_edit, user=request.user
)
return super(
@@ -254,7 +254,7 @@ class IndexListView(SingleObjectListView):
'title': _('Indexes'),
}
def get_object_list(self):
def get_source_queryset(self):
queryset = IndexInstance.objects.filter(enabled=True)
return queryset.filter(
node_templates__index_instance_nodes__isnull=False
@@ -271,7 +271,7 @@ class IndexInstanceNodeView(DocumentListView):
AccessControlList.objects.check_access(
obj=self.index_instance_node.index(),
permissions=permission_document_indexing_instance_view,
permission=permission_document_indexing_instance_view,
user=request.user
)
@@ -317,10 +317,10 @@ class IndexInstanceNodeView(DocumentListView):
return context
def get_object_list(self):
def get_source_queryset(self):
if self.index_instance_node:
if self.index_instance_node.index_template_node.link_documents:
return super(IndexInstanceNodeView, self).get_object_list()
return super(IndexInstanceNodeView, self).get_source_queryset()
else:
self.object_permission = None
return self.index_instance_node.get_children().order_by(
@@ -339,7 +339,7 @@ class DocumentIndexNodeListView(SingleObjectListView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
obj=self.get_document(), permissions=permission_document_view,
obj=self.get_document(), permission=permission_document_view,
user=request.user
)
@@ -370,7 +370,7 @@ class DocumentIndexNodeListView(SingleObjectListView):
) % self.get_document(),
}
def get_object_list(self):
def get_source_queryset(self):
return DocumentIndexInstanceNode.objects.get_for(
document=self.get_document()
)

View File

@@ -217,7 +217,7 @@ class DocumentVersionSignatureDeleteView(SingleObjectDeleteView):
kwargs={'document_version_id': self.get_object().document_version.pk}
)
def get_object_list(self):
def get_source_queryset(self):
return SignatureBaseModel.objects.select_subclasses()
@@ -236,7 +236,7 @@ class DocumentVersionSignatureDetailView(SingleObjectDetailView):
) % self.get_object(),
}
def get_object_list(self):
def get_source_queryset(self):
return SignatureBaseModel.objects.select_subclasses()
@@ -251,7 +251,7 @@ class DocumentVersionSignatureDownloadView(SingleObjectDownloadView):
signature.signature_file, name=force_text(signature)
)
def get_object_list(self):
def get_source_queryset(self):
return SignatureBaseModel.objects.select_subclasses()
@@ -297,7 +297,7 @@ class DocumentVersionSignatureListView(ExternalObjectMixin, SingleObjectListView
) % self.get_document_version(),
}
def get_object_list(self):
def get_source_queryset(self):
return self.get_document_version().signatures.all()

View File

@@ -26,8 +26,8 @@ __all__ = (
class DocumentWorkflowInstanceListView(SingleObjectListView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
permissions=permission_workflow_view, user=request.user,
obj=self.get_document()
obj=self.get_document(), permission=permission_workflow_view,
user=request.user,
)
return super(
@@ -63,8 +63,8 @@ class DocumentWorkflowInstanceListView(SingleObjectListView):
class WorkflowInstanceDetailView(SingleObjectListView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
permissions=permission_workflow_view, user=request.user,
obj=self.get_workflow_instance().document
obj=self.get_workflow_instance().document,
permission=permission_workflow_view, user=request.user
)
return super(

View File

@@ -80,7 +80,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
document_type=document_type_2
)
self.assertEqual(response.status_code, 302)
self.assertEqual(response.status_code, 404)
self.assertEqual(
Document.objects.get(pk=self.document.pk).document_type,
@@ -136,7 +136,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
document_type=document_type_2
)
self.assertEqual(response.status_code, 302)
self.assertEqual(response.status_code, 404)
self.assertEqual(
Document.objects.first().document_type, self.document_type
@@ -300,7 +300,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
self.assertEqual(self.document.pages.count(), 0)
response = self._request_document_multiple_update_page_count_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(response.status_code, 404)
self.assertEqual(self.document.pages.count(), 0)
def test_document_multiple_update_page_count_view_with_permission(self):
@@ -394,7 +394,7 @@ class DocumentsViewsTestCase(GenericDocumentViewTestCase):
self.grant_permission(permission=permission_document_view)
response = self._request_document_multiple_transformations_clear()
self.assertEqual(response.status_code, 302)
self.assertEqual(response.status_code, 404)
self.assertQuerysetEqual(
Transformation.objects.get_for_model(document_page),
(repr(transformation),)

View File

@@ -51,7 +51,7 @@ class ResultsView(SearchModelMixin, SingleObjectListView):
query_string=self.request.GET
)
def get_object_list(self):
def get_source_queryset(self):
self.search_model = self.get_search_model()
if self.request.GET:

View File

@@ -54,7 +54,7 @@ class DocumentDriverListView(SingleObjectListView):
)
return document
def get_object_list(self):
def get_source_queryset(self):
return self.get_object().latest_version.file_metadata_drivers.all()
@@ -84,7 +84,7 @@ class DocumentVersionDriverEntryFileMetadataListView(SingleObjectListView):
)
return document_version_driver_entry
def get_object_list(self):
def get_source_queryset(self):
return self.get_object().entries.all()

View File

@@ -44,9 +44,9 @@ class LinkingApp(MayanAppConfig):
app_label='documents', model_name='Document'
)
ResolvedSmartLink = self.get_model('ResolvedSmartLink')
SmartLink = self.get_model('SmartLink')
SmartLinkCondition = self.get_model('SmartLinkCondition')
ResolvedSmartLink = self.get_model(model_name='ResolvedSmartLink')
SmartLink = self.get_model(model_name='SmartLink')
SmartLinkCondition = self.get_model(model_name='SmartLinkCondition')
ModelPermission.register(
model=SmartLink, permissions=(

View File

@@ -40,12 +40,12 @@ class ResolvedSmartLinkView(DocumentListView):
)
AccessControlList.objects.check_access(
obj=self.document, permissions=permission_document_view,
obj=self.document, permission=permission_document_view,
user=request.user
)
AccessControlList.objects.check_access(
obj=self.smart_link, permissions=permission_smart_link_view,
obj=self.smart_link, permission=permission_smart_link_view,
user=request.user
)
@@ -63,7 +63,7 @@ class ResolvedSmartLinkView(DocumentListView):
try:
AccessControlList.objects.check_access(
obj=self.smart_link, permissions=permission_smart_link_edit,
obj=self.smart_link, permission=permission_smart_link_edit,
user=self.request.user
)
except PermissionDenied:
@@ -163,12 +163,12 @@ class SmartLinkListView(SingleObjectListView):
'title': _('Smart links'),
}
def get_object_list(self):
return self.get_smart_link_queryset()
def get_smart_link_queryset(self):
return SmartLink.objects.all()
def get_source_queryset(self):
return self.get_smart_link_queryset()
class DocumentSmartLinkListView(SmartLinkListView):
def dispatch(self, request, *args, **kwargs):
@@ -177,7 +177,7 @@ class DocumentSmartLinkListView(SmartLinkListView):
)
AccessControlList.objects.check_access(
obj=self.document, permissions=permission_document_view,
obj=self.document, permission=permission_document_view,
user=request.user
)
@@ -268,21 +268,21 @@ class SmartLinkConditionListView(SingleObjectListView):
) % self.get_smart_link(),
}
def get_object_list(self):
return self.get_smart_link().conditions.all()
def get_smart_link(self):
return get_object_or_404(
klass=SmartLink, pk=self.kwargs['smart_link_id']
)
def get_source_queryset(self):
return self.get_smart_link().conditions.all()
class SmartLinkConditionCreateView(SingleObjectCreateView):
form_class = SmartLinkConditionForm
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
obj=self.get_smart_link(), permissions=permission_smart_link_edit,
obj=self.get_smart_link(), permission=permission_smart_link_edit,
user=request.user
)
@@ -323,7 +323,7 @@ class SmartLinkConditionEditView(SingleObjectEditView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
obj=self.get_object().smart_link,
permissions=permission_smart_link_edit, user=request.user
permission=permission_smart_link_edit, user=request.user
)
return super(
@@ -351,7 +351,7 @@ class SmartLinkConditionDeleteView(SingleObjectDeleteView):
def dispatch(self, request, *args, **kwargs):
AccessControlList.objects.check_access(
obj=self.get_object().smart_link,
permissions=permission_smart_link_edit, user=request.user
permission=permission_smart_link_edit, user=request.user
)
return super(

View File

@@ -18,12 +18,13 @@ from .permissions import (
)
link_document_send = Link(
args='resolved_object.pk', icon_class=icon_document_send,
icon_class=icon_document_send, kwargs={'document_id': 'resolved_object.pk'},
permission=permission_mailing_send_document, text=_('Email document'),
view='mailer:document_send'
)
link_document_send_link = Link(
args='resolved_object.pk', icon_class=icon_document_send_link,
icon_class=icon_document_send_link,
kwargs={'document_id': 'resolved_object.pk'},
permission=permission_mailing_link, text=_('Email link'),
view='mailer:document_send_link'
)
@@ -46,17 +47,18 @@ link_user_mailer_create = Link(
view='mailer:user_mailer_backend_selection'
)
link_user_mailer_delete = Link(
args='resolved_object.pk', icon_class=icon_user_mailer_delete,
icon_class=icon_user_mailer_delete,
kwargs={'mailer_id': 'resolved_object.pk'},
permission=permission_user_mailer_delete, tags='dangerous',
text=_('Delete'), view='mailer:user_mailer_delete'
)
link_user_mailer_edit = Link(
args='object.pk', icon_class=icon_user_mailer_edit,
icon_class=icon_user_mailer_edit, kwargs={'mailer_id': 'object.pk'},
permission=permission_user_mailer_edit, text=_('Edit'),
view='mailer:user_mailer_edit'
)
link_user_mailer_log_list = Link(
args='object.pk', permission=permission_user_mailer_view,
permission=permission_user_mailer_view, kwargs={'mailer_id': 'object.pk'},
text=_('Log'), view='mailer:user_mailer_log'
)
link_user_mailer_list = Link(
@@ -70,7 +72,7 @@ link_user_mailer_setup = Link(
text=_('Mailing profiles'), view='mailer:user_mailer_list'
)
link_user_mailer_test = Link(
args='object.pk', icon_class=icon_user_mailer_test,
icon_class=icon_user_mailer_test, kwargs={'mailer_id': 'object.pk'},
permission=permission_user_mailer_use, text=_('Test'),
view='mailer:user_mailer_test'
)

View File

@@ -37,13 +37,13 @@ class MailerTestMixin(object):
def _request_user_mailer_delete(self):
return self.post(
viewname='mailer:user_mailer_delete',
kwargs={'mailer_pk': self.user_mailer.pk}
kwargs={'mailer_id': self.user_mailer.pk}
)
def _request_user_mailer_edit(self):
return self.post(
viewname='mailer:user_mailer_edit',
kwargs={'mailer_pk': self.user_mailer.pk},
kwargs={'mailer_id': self.user_mailer.pk},
data={
'label': TEST_USER_MAILER_LABEL_EDITED
}
@@ -55,7 +55,7 @@ class MailerTestMixin(object):
def _request_user_mailer_test(self):
return self.post(
viewname='mailer:user_mailer_test',
kwargs={'mailer_pk': self.user_mailer.pk},
kwargs={'mailer_id': self.user_mailer.pk},
data={
'email': getattr(
self, 'test_email_address', TEST_EMAIL_ADDRESS

View File

@@ -190,7 +190,7 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
def _request_document_link_send(self):
return self.post(
viewname='mailer:document_send_link',
kwargs={'document_pk': self.document.pk},
kwargs={'document_id': self.document.pk},
data={
'email': getattr(
self, 'test_email_address', TEST_EMAIL_ADDRESS
@@ -202,7 +202,7 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
def _request_document_send(self):
return self.post(
viewname='mailer:document_send',
kwargs={'document_pk': self.document.pk},
kwargs={'document_id': self.document.pk},
data={
'email': getattr(
self, 'test_email_address', TEST_EMAIL_ADDRESS

View File

@@ -11,7 +11,7 @@ from .views import (
urlpatterns = [
url(
regex=r'^documents/(?P<document_pk>\d+)/send/link/$',
regex=r'^documents/(?P<document_id>\d+)/send/link/$',
name='document_send_link', view=MailDocumentLinkView.as_view()
),
url(
@@ -20,7 +20,7 @@ urlpatterns = [
view=MailDocumentLinkView.as_view()
),
url(
regex=r'^documents/(?P<document_pk>\d+)/send/$', name='document_send',
regex=r'^documents/(?P<document_id>\d+)/send/$', name='document_send',
view=MailDocumentView.as_view()
),
url(
@@ -41,19 +41,19 @@ urlpatterns = [
name='user_mailer_create', view=UserMailingCreateView.as_view()
),
url(
regex=r'^user_mailers/(?P<mailer_pk>\d+)/delete/$',
regex=r'^user_mailers/(?P<mailer_id>\d+)/delete/$',
name='user_mailer_delete', view=UserMailingDeleteView.as_view()
),
url(
regex=r'^user_mailers/(?P<mailer_pk>\d+)/edit/$',
regex=r'^user_mailers/(?P<mailer_id>\d+)/edit/$',
name='user_mailer_edit', view=UserMailingEditView.as_view()
),
url(
regex=r'^user_mailers/(?P<mailer_pk>\d+)/log/$',
regex=r'^user_mailers/(?P<mailer_id>\d+)/log/$',
name='user_mailer_log', view=UserMailerLogEntryListView.as_view()
),
url(
regex=r'^user_mailers/(?P<mailer_pk>\d+)/test/$',
regex=r'^user_mailers/(?P<mailer_id>\d+)/test/$',
name='user_mailer_test', view=UserMailerTestView.as_view()
),
url(

View File

@@ -47,7 +47,7 @@ class MailDocumentView(MultipleObjectFormActionView):
form_class = DocumentMailForm
model = Document
object_permission = permission_mailing_send_document
pk_url_kwarg = 'document_pk'
pk_url_kwarg = 'document_id'
success_message = _('%(count)d document queued for email delivery')
success_message_plural = _(
'%(count)d documents queued for email delivery'
@@ -63,9 +63,9 @@ class MailDocumentView(MultipleObjectFormActionView):
'submit_icon_class': icon_mail_document_submit,
'submit_label': _('Send'),
'title': ungettext(
self.title,
self.title_plural,
queryset.count()
singular=self.title,
plural=self.title_plural,
number=queryset.count()
)
}
@@ -87,8 +87,8 @@ class MailDocumentView(MultipleObjectFormActionView):
def object_action(self, form, instance):
AccessControlList.objects.check_access(
permissions=permission_user_mailer_use, user=self.request.user,
obj=form.cleaned_data['user_mailer']
obj=form.cleaned_data['user_mailer'],
permission=permission_user_mailer_use, user=self.request.user
)
task_send_document.apply_async(
@@ -126,7 +126,7 @@ class UserMailerBackendSelectionView(FormView):
def form_valid(self, form):
backend = form.cleaned_data['backend']
return HttpResponseRedirect(
reverse(
redirect_to=reverse(
viewname='mailer:user_mailer_create', kwargs={
'class_path': backend
}
@@ -172,7 +172,7 @@ class UserMailingCreateView(SingleObjectDynamicFormCreateView):
class UserMailingDeleteView(SingleObjectDeleteView):
model = UserMailer
object_permission = permission_user_mailer_delete
pk_url_kwarg = 'mailer_pk'
pk_url_kwarg = 'mailer_id'
post_action_redirect = reverse_lazy(viewname='mailer:user_mailer_list')
def get_extra_context(self):
@@ -185,7 +185,7 @@ class UserMailingEditView(SingleObjectDynamicFormEditView):
form_class = UserMailerDynamicForm
model = UserMailer
object_permission = permission_user_mailer_edit
pk_url_kwarg = 'mailer_pk'
pk_url_kwarg = 'mailer_id'
def get_extra_context(self):
return {
@@ -217,11 +217,11 @@ class UserMailerLogEntryListView(SingleObjectListView):
) % self.get_user_mailer(),
}
def get_object_list(self):
def get_source_queryset(self):
return self.get_user_mailer().error_log.all()
def get_user_mailer(self):
return get_object_or_404(klass=UserMailer, pk=self.kwargs['mailer_pk'])
return get_object_or_404(klass=UserMailer, pk=self.kwargs['mailer_id'])
class UserMailerListView(SingleObjectListView):
@@ -260,15 +260,15 @@ class UserMailerTestView(FormView):
obj.test(to=form.cleaned_data['email'])
except Exception as exception:
messages.error(
request=self.request, message=_(
message=_(
'Error sending test message; %s.'
) % exception
) % exception, request=self.request
)
else:
messages.success(
request=self.request, message=_(
message=_(
'Successfully sent test message.'
)
), request=self.request
)
return super(UserMailerTestView, self).form_valid(form=form)
@@ -283,7 +283,7 @@ class UserMailerTestView(FormView):
def get_object(self):
return get_object_or_404(
klass=self.get_queryset(), pk=self.kwargs['mailer_pk']
klass=self.get_queryset(), pk=self.kwargs['mailer_id']
)
def get_queryset(self):

View File

@@ -17,8 +17,6 @@ from .mixins import MetadataTestsMixin
class MetadataTypeEventsTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
def test_metadata_type_create_event_no_permissions(self):
self.login_user()
Action.objects.all().delete()
response = self._request_metadata_type_create_view()
@@ -26,8 +24,6 @@ class MetadataTypeEventsTestCase(MetadataTestsMixin, GenericDocumentViewTestCase
self.assertEqual(Action.objects.count(), 0)
def test_metadata_type_create_event_with_permissions(self):
self.login_user()
Action.objects.all().delete()
self.grant_permission(permission=permission_metadata_type_create)
@@ -47,19 +43,15 @@ class MetadataTypeEventsTestCase(MetadataTestsMixin, GenericDocumentViewTestCase
def test_metadata_type_edit_event_no_permissions(self):
self._create_metadata_type()
self.login_user()
Action.objects.all().delete()
response = self._request_metadata_type_edit_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.assertEqual(Action.objects.count(), 0)
def test_metadata_type_edit_event_with_access(self):
self._create_metadata_type()
self.login_user()
Action.objects.all().delete()
self.grant_access(

View File

@@ -163,7 +163,7 @@ class DocumentMetadataTestCase(MetadataTestsMixin, GenericDocumentViewTestCase):
)
response = self._request_post_document_document_metadata_remove_view()
self.assertEqual(response.status_code, 302)
self.assertEqual(response.status_code, 404)
self.assertEqual(len(self.document.metadata.all()), 1)

View File

@@ -49,10 +49,10 @@ class PermissionsViewsTestCase(GroupTestMixin, RoleTestMixin, GenericViewTestCas
kwargs={'role_id': self.test_role.pk}
)
def test_role_delete_view_no_access(self):
def test_role_delete_view_no_permission(self):
self._create_test_role()
response = self._request_role_delete_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.assertEqual(Role.objects.count(), 2)
self.assertTrue(
TEST_ROLE_LABEL in Role.objects.values_list('label', flat=True)
@@ -76,11 +76,11 @@ class PermissionsViewsTestCase(GroupTestMixin, RoleTestMixin, GenericViewTestCas
}
)
def test_role_edit_view_no_access(self):
def test_role_edit_view_no_permission(self):
self._create_test_role()
response = self._request_role_edit_view()
self.assertEqual(response.status_code, 403)
self.assertEqual(response.status_code, 404)
self.test_role.refresh_from_db()
self.assertEqual(Role.objects.count(), 2)
@@ -100,7 +100,7 @@ class PermissionsViewsTestCase(GroupTestMixin, RoleTestMixin, GenericViewTestCas
def _request_role_list_view(self):
return self.get(viewname='permissions:role_list')
def test_role_list_view_no_access(self):
def test_role_list_view_no_permission(self):
self._create_test_role()
response = self._request_role_list_view()
self.assertEqual(response.status_code, 200)
@@ -141,7 +141,7 @@ class PermissionsViewsTestCase(GroupTestMixin, RoleTestMixin, GenericViewTestCas
kwargs={'role_id': self.test_role.pk}
)
def test_role_groups_view_no_access(self):
def test_role_groups_view_no_permission(self):
self._create_test_role()
response = self._request_role_groups_view()
self.assertEqual(response.status_code, 403)
@@ -158,7 +158,7 @@ class PermissionsViewsTestCase(GroupTestMixin, RoleTestMixin, GenericViewTestCas
kwargs={'group_id': self.test_group.pk}
)
def test_group_roles_view_no_access(self):
def test_group_roles_view_no_permission(self):
self._create_test_group()
response = self._request_group_roles_view()
self.assertEqual(response.status_code, 403)

View File

@@ -146,7 +146,7 @@ class SourceEditView(SingleObjectEditView):
class SourceListView(SingleObjectListView):
queryset = Source.objects.select_subclasses()
source_queryset = Source.objects.select_subclasses()
view_permission = permission_sources_view
def get_extra_context(self):
@@ -201,14 +201,14 @@ class SourceLogView(SingleObjectListView):
'title': _('Log entries for source: %s') % self.get_source(),
}
def get_object_list(self):
return self.get_source().logs.all()
def get_source(self):
return get_object_or_404(
klass=Source.objects.select_subclasses(), pk=self.kwargs['source_id']
)
def get_source_queryset(self):
return self.get_source().logs.all()
class StagingFileDeleteView(ExternalObjectMixin, SingleObjectDeleteView):
external_object_class = StagingFolderSource

View File

@@ -55,7 +55,7 @@ class Tag(models.Model):
def get_absolute_url(self):
return reverse(
viewname='tags:tag_tagged_item_list', kwargs={
viewname='tags:tag_document_list', kwargs={
'tag_id': self.pk
}
)