Update document comments app

Add keyword arguments to the app links.

Remove use of `raise_404`.

Update URL parameters to use document_id and comment_id.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-01-19 04:08:45 -04:00
parent 53f3261dae
commit 6376445cc4
14 changed files with 49 additions and 64 deletions

View File

@@ -2,7 +2,7 @@ from __future__ import absolute_import, unicode_literals
from rest_framework import generics
from mayan.apps.common.mixins import ExternalObjectViewMixin
from mayan.apps.common.mixins import ExternalObjectMixin
from mayan.apps.documents.models import Document
from .permissions import (
@@ -12,13 +12,13 @@ from .permissions import (
from .serializers import CommentSerializer, WritableCommentSerializer
class APICommentListView(ExternalObjectViewMixin, generics.ListCreateAPIView):
class APICommentListView(ExternalObjectMixin, generics.ListCreateAPIView):
"""
get: Returns a list of all the document comments.
post: Create a new document comment.
"""
external_object_pk_url_kwarg = 'document_pk'
external_object_class = Document
external_object_pk_url_kwarg = 'document_id'
def get_document(self):
return self.get_external_object()
@@ -59,14 +59,14 @@ class APICommentListView(ExternalObjectViewMixin, generics.ListCreateAPIView):
return context
class APICommentView(ExternalObjectViewMixin, generics.RetrieveDestroyAPIView):
class APICommentView(ExternalObjectMixin, generics.RetrieveDestroyAPIView):
"""
delete: Delete the selected document comment.
get: Returns the details of the selected document comment.
"""
external_object_pk_url_kwarg = 'document_pk'
external_object_class = Document
lookup_url_kwarg = 'comment_pk'
external_object_pk_url_kwarg = 'document_id'
lookup_url_kwarg = 'comment_id'
serializer_class = CommentSerializer
def get_document(self):

View File

@@ -60,18 +60,18 @@ class DocumentCommentsApp(MayanAppConfig):
SourceColumn(source=Comment, label=_('Date'), attribute='submit_date')
SourceColumn(
source=Comment, label=_('User'),
func=lambda context: context['object'].user.get_full_name() if context['object'].user.get_full_name() else context['object'].user
func=lambda context: context['object'].user.get_full_name() if context['object'].user.get_full_name() else context['object'].user,
label=_('User'), source=Comment
)
SourceColumn(source=Comment, label=_('Comment'), attribute='comment')
document_page_search.add_model_field(
label=_('Comments'),
field='document_version__document__comments__comment',
label=_('Comments')
)
document_search.add_model_field(
field='comments__comment',
label=_('Comments')
label=_('Comments'),
field='comments__comment'
)
menu_sidebar.bind_links(

View File

@@ -5,12 +5,12 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.events import EventTypeNamespace
namespace = EventTypeNamespace(
name='document_comments', label=_('Document comments')
label=_('Document comments'), name='document_comments'
)
event_document_comment_created = namespace.add_event_type(
name='create', label=_('Document comment created')
label=_('Document comment created'), name='create'
)
event_document_comment_deleted = namespace.add_event_type(
name='delete', label=_('Document comment deleted')
label=_('Document comment deleted'), name='delete'
)

View File

@@ -2,9 +2,9 @@ from __future__ import absolute_import, unicode_literals
from mayan.apps.appearance.classes import Icon
icon_comments_for_document = Icon(driver_name='fontawesome', symbol='comment')
icon_comment_add = Icon(
driver_name='fontawesome-dual', primary_symbol='comment',
secondary_symbol='plus'
)
icon_comment_delete = Icon(driver_name='fontawesome', symbol='times')
icon_comments_for_document = Icon(driver_name='fontawesome', symbol='comment')

View File

@@ -13,17 +13,18 @@ from .permissions import (
)
link_comment_add = Link(
args='object.pk', icon_class=icon_comment_add,
icon_class=icon_comment_add, kwargs={'document_id': 'object.pk'},
permissions=(permission_comment_create,), text=_('Add comment'),
view='comments:comment_add',
)
link_comment_delete = Link(
args='object.pk', icon_class=icon_comment_delete,
icon_class=icon_comment_delete, kwargs={'comment_id': 'object.pk'},
permissions=(permission_comment_delete,), tags='dangerous',
text=_('Delete'), view='comments:comment_delete',
)
link_comments_for_document = Link(
args='resolved_object.pk', icon_class=icon_comments_for_document,
icon_class=icon_comments_for_document,
kwargs={'document_id': 'resolved_object.pk'},
permissions=(permission_comment_view,), text=_('Comments'),
view='comments:comments_for_document',
)

View File

@@ -7,11 +7,11 @@ from mayan.apps.permissions import PermissionNamespace
namespace = PermissionNamespace(label=_('Comments'), name='comments')
permission_comment_create = namespace.add_permission(
name='comment_create', label=_('Create new comments')
label=_('Create new comments'), name='comment_create'
)
permission_comment_delete = namespace.add_permission(
name='comment_delete', label=_('Delete comments')
label=_('Delete comments'), name='comment_delete'
)
permission_comment_view = namespace.add_permission(
name='comment_view', label=_('View comments')
label=_('View comments'), name='comment_view'
)

View File

@@ -25,14 +25,14 @@ class CommentSerializer(serializers.HyperlinkedModelSerializer):
def get_document_comments_url(self, instance):
return reverse(
viewname='rest_api:comment-list', kwargs={
'document_pk': instance.document.pk,
'document_id': instance.document.pk,
}, request=self.context['request'], format=self.context['format']
)
def get_url(self, instance):
return reverse(
viewname='rest_api:comment-detail', kwargs={
'document_pk': instance.document.pk, 'comment_pk': instance.pk
'document_id': instance.document.pk, 'comment_pk': instance.pk
}, request=self.context['request'], format=self.context['format']
)
@@ -59,13 +59,13 @@ class WritableCommentSerializer(serializers.ModelSerializer):
def get_document_comments_url(self, instance):
return reverse(
viewname='rest_api:comment-list', kwargs={
'document_pk': instance.document.pk
'document_id': instance.document.pk
}, request=self.context['request'], format=self.context['format']
)
def get_url(self, instance):
return reverse(
viewname='rest_api:comment-detail', kwargs={
'document_pk': instance.document.pk, 'comment_pk': instance.pk
'document_id': instance.document.pk, 'comment_id': instance.pk
}, request=self.context['request'], format=self.context['format']
)

View File

@@ -9,13 +9,13 @@ class CommentsTestMixin(object):
def _create_comment(self, user=None):
self.test_comment = self.document.comments.create(
comment=TEST_COMMENT_TEXT,
user=user or self.user or self.admin_user
user=user or self._test_case_user or self.admin_user
)
def _request_document_comment_add_view(self):
response = self.post(
viewname='comments:comment_add',
kwargs={'document_pk': self.document.pk},
kwargs={'document_id': self.document.pk},
data={'comment': TEST_COMMENT_TEXT}
)
self.test_comment = Comment.objects.filter(
@@ -27,5 +27,5 @@ class CommentsTestMixin(object):
def _request_document_comment_delete_view(self):
return self.post(
viewname='comments:comment_delete',
kwargs={'comment_pk': self.test_comment.pk},
kwargs={'comment_id': self.test_comment.pk},
)

View File

@@ -16,10 +16,6 @@ from .mixins import CommentsTestMixin
class CommentAPITestCase(CommentsTestMixin, DocumentTestMixin, BaseAPITestCase):
def setUp(self):
super(CommentAPITestCase, self).setUp()
self.login_user()
def _request_api_comment_create_view(self):
return self.post(
viewname='rest_api:comment-list',

View File

@@ -13,10 +13,6 @@ from .mixins import CommentsTestMixin
class CommentEventsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
def setUp(self):
super(CommentEventsTestCase, self).setUp()
self.login_user()
def test_comment_created_event_no_permissions(self):
Action.objects.all().delete()

View File

@@ -12,10 +12,6 @@ from .mixins import CommentsTestMixin
class CommentsViewsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
def setUp(self):
super(CommentsViewsTestCase, self).setUp()
self.login_user()
def test_document_comment_add_view_no_permission(self):
response = self._request_document_comment_add_view()
self.assertEqual(response.status_code, 404)
@@ -31,7 +27,7 @@ class CommentsViewsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
def _create_test_comment(self):
self.test_comment = self.document.comments.create(
user=self.user, comment=TEST_COMMENT_TEXT
user=self._test_case_user, comment=TEST_COMMENT_TEXT
)
def test_document_comment_delete_view_no_permission(self):
@@ -54,7 +50,7 @@ class CommentsViewsTestCase(CommentsTestMixin, GenericDocumentViewTestCase):
def _request_document_comment_list_view(self):
return self.get(
viewname='comments:comments_for_document',
kwargs={'document_pk': self.document.pk}
kwargs={'document_id': self.document.pk}
)
def test_document_comment_list_view_no_permissions(self):

View File

@@ -10,26 +10,26 @@ from .views import (
urlpatterns = [
url(
regex=r'^comments/(?P<comment_pk>\d+)/delete/$', name='comment_delete',
regex=r'^comments/(?P<comment_id>\d+)/delete/$', name='comment_delete',
view=DocumentCommentDeleteView.as_view()
),
url(
regex=r'^documents/(?P<document_pk>\d+)/comments/add/$',
name='comment_add', view=DocumentCommentCreateView.as_view()
),
url(
regex=r'^documents/(?P<document_pk>\d+)/comments/$',
regex=r'^documents/(?P<document_id>\d+)/comments/$',
name='comments_for_document', view=DocumentCommentListView.as_view()
),
url(
regex=r'^documents/(?P<document_id>\d+)/comments/add/$',
name='comment_add', view=DocumentCommentCreateView.as_view()
)
]
api_urls = [
url(
regex=r'^documents/(?P<document_pk>[0-9]+)/comments/$',
regex=r'^documents/(?P<document_id>\d+)/comments/$',
name='comment-list', view=APICommentListView.as_view()
),
url(
regex=r'^documents/(?P<document_pk>[0-9]+)/comments/(?P<comment_pk>[0-9]+)/$',
regex=r'^documents/(?P<document_id>\d+)/comments/(?P<comment_id>\d+)/$',
name='comment-detail', view=APICommentView.as_view()
),
)
]

View File

@@ -7,7 +7,7 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.common.generics import (
SingleObjectCreateView, SingleObjectDeleteView, SingleObjectListView
)
from mayan.apps.common.mixins import ExternalObjectViewMixin
from mayan.apps.common.mixins import ExternalObjectMixin
from mayan.apps.documents.models import Document
from .icons import icon_comments_for_document
@@ -19,11 +19,11 @@ from .permissions import (
)
class DocumentCommentCreateView(ExternalObjectViewMixin, SingleObjectCreateView):
fields = ('comment',)
external_object_pk_url_kwarg = 'document_pk'
class DocumentCommentCreateView(ExternalObjectMixin, SingleObjectCreateView):
external_object_class = Document
external_object_permission = permission_comment_create
external_object_pk_url_kwarg = 'document_id'
fields = ('comment',)
model = Comment
def get_document(self):
@@ -43,7 +43,7 @@ class DocumentCommentCreateView(ExternalObjectViewMixin, SingleObjectCreateView)
def get_post_action_redirect(self):
return reverse(
viewname='comments:comments_for_document', kwargs={
'document_pk': self.kwargs['document_pk']
'document_id': self.kwargs['document_id']
}
)
@@ -55,9 +55,8 @@ class DocumentCommentCreateView(ExternalObjectViewMixin, SingleObjectCreateView)
class DocumentCommentDeleteView(SingleObjectDeleteView):
model = Comment
pk_url_kwarg = 'comment_pk'
pk_url_kwarg = 'comment_id'
object_permission = permission_comment_delete
object_permission_raise_404 = True
def get_delete_extra_data(self):
return {'_user': self.request.user}
@@ -71,15 +70,15 @@ class DocumentCommentDeleteView(SingleObjectDeleteView):
def get_post_action_redirect(self):
return reverse(
viewname='comments:comments_for_document', kwargs={
'document_pk': self.get_object().document.pk
'document_id': self.get_object().document.pk
}
)
class DocumentCommentListView(ExternalObjectViewMixin, SingleObjectListView):
external_object_pk_url_kwarg = 'document_pk'
class DocumentCommentListView(ExternalObjectMixin, SingleObjectListView):
external_object_class = Document
external_object_permission = permission_comment_view
external_object_pk_url_kwarg = 'document_id'
def get_document(self):
return self.get_external_object()

View File

@@ -47,7 +47,6 @@ class MailDocumentView(MultipleObjectFormActionView):
form_class = DocumentMailForm
model = Document
object_permission = permission_mailing_send_document
object_permission_raise_404 = True
pk_url_kwarg = 'document_pk'
success_message = _('%(count)d document queued for email delivery')
success_message_plural = _(
@@ -173,7 +172,6 @@ class UserMailingCreateView(SingleObjectDynamicFormCreateView):
class UserMailingDeleteView(SingleObjectDeleteView):
model = UserMailer
object_permission = permission_user_mailer_delete
object_permission_raise_404 = True
pk_url_kwarg = 'mailer_pk'
post_action_redirect = reverse_lazy(viewname='mailer:user_mailer_list')
@@ -187,7 +185,6 @@ class UserMailingEditView(SingleObjectDynamicFormEditView):
form_class = UserMailerDynamicForm
model = UserMailer
object_permission = permission_user_mailer_edit
object_permission_raise_404 = True
pk_url_kwarg = 'mailer_pk'
def get_extra_context(self):