Update mailer app

Sort arguments.

Fix failing tests.

Sort view classes.

Replace get_object() with self.object in the delete and
edit views.

Use ExternalObjectMixin to simplify views.

Signed-off-by: Roberto Rosario <Roberto.Rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-02-06 01:08:14 -04:00
parent 27517c04f2
commit 7ba47d5c5f
6 changed files with 47 additions and 60 deletions

View File

@@ -7,26 +7,26 @@ from mayan.apps.permissions import PermissionNamespace
namespace = PermissionNamespace(label=_('Mailing'), name='mailing')
permission_mailing_link = namespace.add_permission(
name='mail_link', label=_('Send document link via email')
label=_('Send document link via email'), name='mail_link'
)
permission_mailing_send_document = namespace.add_permission(
name='mail_document', label=_('Send document via email')
label=_('Send document via email'), name='mail_document'
)
permission_view_error_log = namespace.add_permission(
name='view_error_log', label=_('View system mailing error log')
label=_('View system mailing error log'), name='view_error_log'
)
permission_user_mailer_create = namespace.add_permission(
name='user_mailer_create', label=_('Create a mailing profile')
label=_('Create a mailing profile'), name='user_mailer_create'
)
permission_user_mailer_delete = namespace.add_permission(
name='user_mailer_delete', label=_('Delete a mailing profile')
label=_('Delete a mailing profile'), name='user_mailer_delete'
)
permission_user_mailer_edit = namespace.add_permission(
name='user_mailer_edit', label=_('Edit a mailing profile')
)
permission_user_mailer_view = namespace.add_permission(
name='user_mailer_view', label=_('View a mailing profile')
label=_('Edit a mailing profile'), name='user_mailer_edit'
)
permission_user_mailer_use = namespace.add_permission(
name='user_mailer_use', label=_('Use a mailing profile')
label=_('Use a mailing profile'), name='user_mailer_use'
)
permission_user_mailer_view = namespace.add_permission(
label=_('View a mailing profile'), name='user_mailer_view'
)

View File

@@ -5,9 +5,9 @@ from django.utils.translation import ugettext_lazy as _
from mayan.apps.task_manager.classes import CeleryQueue
queue_mailing = CeleryQueue(
name='mailing', label=_('Mailing')
label=_('Mailing'), name='mailing'
)
queue_mailing.add_task_type(
name='mayan.apps.mailer.tasks.task_send_document',
label=_('Send document')
label=_('Send document'),
name='mayan.apps.mailer.tasks.task_send_document'
)

View File

@@ -9,7 +9,7 @@ from .literals import (
DEFAULT_LINK_BODY_TEMPLATE, DEFAULT_LINK_SUBJECT_TEMPLATE
)
namespace = Namespace(name='mailer', label=_('Mailing'))
namespace = Namespace(label=_('Mailing'), name='mailer')
setting_link_subject_template = namespace.add_setting(
default=DEFAULT_LINK_SUBJECT_TEMPLATE,

View File

@@ -26,10 +26,6 @@ from .mixins import MailerTestMixin
class MailerViewsTestCase(MailerTestMixin, GenericViewTestCase):
def setUp(self):
super(MailerViewsTestCase, self).setUp()
self.login_user()
def test_user_mailer_create_view_no_permissions(self):
response = self._request_user_mailer_create()
@@ -216,10 +212,10 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
response = self._request_document_link_send()
self.assertNotContains(
response=response, text=self.user_mailer.label, status_code=200
response=response, text=self.user_mailer.label, status_code=404
)
self.assertNotContains(
response=response, text=self.document.label, status_code=200
response=response, text=self.document.label, status_code=404
)
self.assertEqual(len(mail.outbox), 0)
@@ -248,10 +244,10 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
response = self._request_document_link_send()
self.assertNotContains(
response=response, text=self.user_mailer.label, status_code=302
response=response, text=self.user_mailer.label, status_code=404
)
self.assertNotContains(
response=response, text=self.document.label, status_code=302
response=response, text=self.document.label, status_code=404
)
self.assertEqual(len(mail.outbox), 0)
@@ -278,10 +274,10 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
response = self._request_document_send()
self.assertNotContains(
response=response, text=self.user_mailer.label, status_code=200
response=response, text=self.user_mailer.label, status_code=404
)
self.assertNotContains(
response=response, text=self.document.label, status_code=200
response=response, text=self.document.label, status_code=404
)
self.assertEqual(len(mail.outbox), 0)
@@ -311,7 +307,7 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
response = self._request_document_send()
self.assertNotContains(
response=response, text=self.document.label, status_code=302
response=response, text=self.document.label, status_code=404
)
self.assertEqual(len(mail.outbox), 0)

View File

@@ -14,11 +14,6 @@ urlpatterns = [
regex=r'^documents/(?P<document_id>\d+)/send/link/$',
name='document_send_link', view=MailDocumentLinkView.as_view()
),
url(
regex=r'^documents/multiple/send/link/$',
name='document_multiple_send_link',
view=MailDocumentLinkView.as_view()
),
url(
regex=r'^documents/(?P<document_id>\d+)/send/$', name='document_send',
view=MailDocumentView.as_view()
@@ -27,6 +22,11 @@ urlpatterns = [
regex=r'^documents/multiple/send/document/$',
name='document_multiple_send', view=MailDocumentView.as_view()
),
url(
regex=r'^documents/multiple/send/link/$',
name='document_multiple_send_link',
view=MailDocumentLinkView.as_view()
),
url(
regex=r'^system_mailer/log/$', name='system_mailer_error_log',
view=SystemMailerLogEntryListView.as_view()

View File

@@ -14,6 +14,7 @@ from mayan.apps.common.generics import (
SingleObjectDynamicFormCreateView, SingleObjectDynamicFormEditView,
SingleObjectListView
)
from mayan.apps.common.mixins import ExternalObjectMixin
from mayan.apps.documents.models import Document
from .classes import MailerBackend
@@ -33,15 +34,6 @@ from .permissions import (
from .tasks import task_send_document
class SystemMailerLogEntryListView(SingleObjectListView):
extra_context = {
'hide_object': True,
'title': _('Document mailing error log'),
}
model = LogEntry
view_permission = permission_view_error_log
class MailDocumentView(MultipleObjectFormActionView):
as_attachment = True
form_class = DocumentMailForm
@@ -57,7 +49,7 @@ class MailDocumentView(MultipleObjectFormActionView):
title_document = 'Email document: %s'
def get_extra_context(self):
queryset = self.get_queryset()
queryset = self.get_object_list()
result = {
'submit_icon_class': icon_mail_document_submit,
@@ -116,6 +108,15 @@ class MailDocumentLinkView(MailDocumentView):
title_document = 'Email link for document: %s'
class SystemMailerLogEntryListView(SingleObjectListView):
extra_context = {
'hide_object': True,
'title': _('Document mailing error log'),
}
model = LogEntry
view_permission = permission_view_error_log
class UserMailerBackendSelectionView(FormView):
extra_context = {
'title': _('New mailing profile backend selection'),
@@ -177,7 +178,7 @@ class UserMailingDeleteView(SingleObjectDeleteView):
def get_extra_context(self):
return {
'title': _('Delete mailing profile: %s') % self.get_object(),
'title': _('Delete mailing profile: %s') % self.object
}
@@ -189,11 +190,11 @@ class UserMailingEditView(SingleObjectDynamicFormEditView):
def get_extra_context(self):
return {
'title': _('Edit mailing profile: %s') % self.get_object(),
'title': _('Edit mailing profile: %s') % self.object
}
def get_form_schema(self):
backend = self.get_object().get_backend()
backend = self.object.get_backend()
result = {
'fields': backend.fields,
'widgets': getattr(backend, 'widgets', {})
@@ -248,16 +249,17 @@ class UserMailerListView(SingleObjectListView):
return {'fields': self.get_backend().fields}
class UserMailerTestView(FormView):
class UserMailerTestView(ExternalObjectMixin, FormView):
external_object_class = UserMailer
external_object_permission = permission_user_mailer_use
external_object_pk_url_kwarg = 'mailer_id'
form_class = UserMailerTestForm
def form_valid(self, form):
obj = self.get_object()
# Separate getting the object from executing the test method to avoid
# catching PermissionDenied exception.
try:
obj.test(to=form.cleaned_data['email'])
self.external_object.test(to=form.cleaned_data['email'])
except Exception as exception:
messages.error(
message=_(
@@ -276,18 +278,7 @@ class UserMailerTestView(FormView):
def get_extra_context(self):
return {
'hide_object': True,
'object': self.get_object(),
'object': self.external_object,
'submit_label': _('Test'),
'title': _('Test mailing profile: %s') % self.get_object(),
'title': _('Test mailing profile: %s') % self.external_object,
}
def get_object(self):
return get_object_or_404(
klass=self.get_queryset(), pk=self.kwargs['mailer_id']
)
def get_queryset(self):
return AccessControlList.objects.restrict_queryset(
permission=permission_user_mailer_use,
queryset=UserMailer.objects.all(), user=self.request.user
)