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:
@@ -7,26 +7,26 @@ from mayan.apps.permissions import PermissionNamespace
|
|||||||
namespace = PermissionNamespace(label=_('Mailing'), name='mailing')
|
namespace = PermissionNamespace(label=_('Mailing'), name='mailing')
|
||||||
|
|
||||||
permission_mailing_link = namespace.add_permission(
|
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(
|
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(
|
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(
|
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(
|
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(
|
permission_user_mailer_edit = namespace.add_permission(
|
||||||
name='user_mailer_edit', label=_('Edit a mailing profile')
|
label=_('Edit a mailing profile'), name='user_mailer_edit'
|
||||||
)
|
|
||||||
permission_user_mailer_view = namespace.add_permission(
|
|
||||||
name='user_mailer_view', label=_('View a mailing profile')
|
|
||||||
)
|
)
|
||||||
permission_user_mailer_use = namespace.add_permission(
|
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'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from mayan.apps.task_manager.classes import CeleryQueue
|
from mayan.apps.task_manager.classes import CeleryQueue
|
||||||
|
|
||||||
queue_mailing = CeleryQueue(
|
queue_mailing = CeleryQueue(
|
||||||
name='mailing', label=_('Mailing')
|
label=_('Mailing'), name='mailing'
|
||||||
)
|
)
|
||||||
queue_mailing.add_task_type(
|
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'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ from .literals import (
|
|||||||
DEFAULT_LINK_BODY_TEMPLATE, DEFAULT_LINK_SUBJECT_TEMPLATE
|
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(
|
setting_link_subject_template = namespace.add_setting(
|
||||||
default=DEFAULT_LINK_SUBJECT_TEMPLATE,
|
default=DEFAULT_LINK_SUBJECT_TEMPLATE,
|
||||||
|
|||||||
@@ -26,10 +26,6 @@ from .mixins import MailerTestMixin
|
|||||||
|
|
||||||
|
|
||||||
class MailerViewsTestCase(MailerTestMixin, GenericViewTestCase):
|
class MailerViewsTestCase(MailerTestMixin, GenericViewTestCase):
|
||||||
def setUp(self):
|
|
||||||
super(MailerViewsTestCase, self).setUp()
|
|
||||||
self.login_user()
|
|
||||||
|
|
||||||
def test_user_mailer_create_view_no_permissions(self):
|
def test_user_mailer_create_view_no_permissions(self):
|
||||||
response = self._request_user_mailer_create()
|
response = self._request_user_mailer_create()
|
||||||
|
|
||||||
@@ -216,10 +212,10 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
|
|||||||
response = self._request_document_link_send()
|
response = self._request_document_link_send()
|
||||||
|
|
||||||
self.assertNotContains(
|
self.assertNotContains(
|
||||||
response=response, text=self.user_mailer.label, status_code=200
|
response=response, text=self.user_mailer.label, status_code=404
|
||||||
)
|
)
|
||||||
self.assertNotContains(
|
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)
|
self.assertEqual(len(mail.outbox), 0)
|
||||||
|
|
||||||
@@ -248,10 +244,10 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
|
|||||||
|
|
||||||
response = self._request_document_link_send()
|
response = self._request_document_link_send()
|
||||||
self.assertNotContains(
|
self.assertNotContains(
|
||||||
response=response, text=self.user_mailer.label, status_code=302
|
response=response, text=self.user_mailer.label, status_code=404
|
||||||
)
|
)
|
||||||
self.assertNotContains(
|
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)
|
self.assertEqual(len(mail.outbox), 0)
|
||||||
@@ -278,10 +274,10 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
|
|||||||
|
|
||||||
response = self._request_document_send()
|
response = self._request_document_send()
|
||||||
self.assertNotContains(
|
self.assertNotContains(
|
||||||
response=response, text=self.user_mailer.label, status_code=200
|
response=response, text=self.user_mailer.label, status_code=404
|
||||||
)
|
)
|
||||||
self.assertNotContains(
|
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)
|
self.assertEqual(len(mail.outbox), 0)
|
||||||
|
|
||||||
@@ -311,7 +307,7 @@ class DocumentViewsTestCase(MailerTestMixin, GenericDocumentViewTestCase):
|
|||||||
|
|
||||||
response = self._request_document_send()
|
response = self._request_document_send()
|
||||||
self.assertNotContains(
|
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)
|
self.assertEqual(len(mail.outbox), 0)
|
||||||
|
|||||||
@@ -14,11 +14,6 @@ urlpatterns = [
|
|||||||
regex=r'^documents/(?P<document_id>\d+)/send/link/$',
|
regex=r'^documents/(?P<document_id>\d+)/send/link/$',
|
||||||
name='document_send_link', view=MailDocumentLinkView.as_view()
|
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(
|
url(
|
||||||
regex=r'^documents/(?P<document_id>\d+)/send/$', name='document_send',
|
regex=r'^documents/(?P<document_id>\d+)/send/$', name='document_send',
|
||||||
view=MailDocumentView.as_view()
|
view=MailDocumentView.as_view()
|
||||||
@@ -27,6 +22,11 @@ urlpatterns = [
|
|||||||
regex=r'^documents/multiple/send/document/$',
|
regex=r'^documents/multiple/send/document/$',
|
||||||
name='document_multiple_send', view=MailDocumentView.as_view()
|
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(
|
url(
|
||||||
regex=r'^system_mailer/log/$', name='system_mailer_error_log',
|
regex=r'^system_mailer/log/$', name='system_mailer_error_log',
|
||||||
view=SystemMailerLogEntryListView.as_view()
|
view=SystemMailerLogEntryListView.as_view()
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ from mayan.apps.common.generics import (
|
|||||||
SingleObjectDynamicFormCreateView, SingleObjectDynamicFormEditView,
|
SingleObjectDynamicFormCreateView, SingleObjectDynamicFormEditView,
|
||||||
SingleObjectListView
|
SingleObjectListView
|
||||||
)
|
)
|
||||||
|
from mayan.apps.common.mixins import ExternalObjectMixin
|
||||||
from mayan.apps.documents.models import Document
|
from mayan.apps.documents.models import Document
|
||||||
|
|
||||||
from .classes import MailerBackend
|
from .classes import MailerBackend
|
||||||
@@ -33,15 +34,6 @@ from .permissions import (
|
|||||||
from .tasks import task_send_document
|
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):
|
class MailDocumentView(MultipleObjectFormActionView):
|
||||||
as_attachment = True
|
as_attachment = True
|
||||||
form_class = DocumentMailForm
|
form_class = DocumentMailForm
|
||||||
@@ -57,7 +49,7 @@ class MailDocumentView(MultipleObjectFormActionView):
|
|||||||
title_document = 'Email document: %s'
|
title_document = 'Email document: %s'
|
||||||
|
|
||||||
def get_extra_context(self):
|
def get_extra_context(self):
|
||||||
queryset = self.get_queryset()
|
queryset = self.get_object_list()
|
||||||
|
|
||||||
result = {
|
result = {
|
||||||
'submit_icon_class': icon_mail_document_submit,
|
'submit_icon_class': icon_mail_document_submit,
|
||||||
@@ -116,6 +108,15 @@ class MailDocumentLinkView(MailDocumentView):
|
|||||||
title_document = 'Email link for document: %s'
|
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):
|
class UserMailerBackendSelectionView(FormView):
|
||||||
extra_context = {
|
extra_context = {
|
||||||
'title': _('New mailing profile backend selection'),
|
'title': _('New mailing profile backend selection'),
|
||||||
@@ -177,7 +178,7 @@ class UserMailingDeleteView(SingleObjectDeleteView):
|
|||||||
|
|
||||||
def get_extra_context(self):
|
def get_extra_context(self):
|
||||||
return {
|
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):
|
def get_extra_context(self):
|
||||||
return {
|
return {
|
||||||
'title': _('Edit mailing profile: %s') % self.get_object(),
|
'title': _('Edit mailing profile: %s') % self.object
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_form_schema(self):
|
def get_form_schema(self):
|
||||||
backend = self.get_object().get_backend()
|
backend = self.object.get_backend()
|
||||||
result = {
|
result = {
|
||||||
'fields': backend.fields,
|
'fields': backend.fields,
|
||||||
'widgets': getattr(backend, 'widgets', {})
|
'widgets': getattr(backend, 'widgets', {})
|
||||||
@@ -248,16 +249,17 @@ class UserMailerListView(SingleObjectListView):
|
|||||||
return {'fields': self.get_backend().fields}
|
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
|
form_class = UserMailerTestForm
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
obj = self.get_object()
|
|
||||||
|
|
||||||
# Separate getting the object from executing the test method to avoid
|
# Separate getting the object from executing the test method to avoid
|
||||||
# catching PermissionDenied exception.
|
# catching PermissionDenied exception.
|
||||||
try:
|
try:
|
||||||
obj.test(to=form.cleaned_data['email'])
|
self.external_object.test(to=form.cleaned_data['email'])
|
||||||
except Exception as exception:
|
except Exception as exception:
|
||||||
messages.error(
|
messages.error(
|
||||||
message=_(
|
message=_(
|
||||||
@@ -276,18 +278,7 @@ class UserMailerTestView(FormView):
|
|||||||
def get_extra_context(self):
|
def get_extra_context(self):
|
||||||
return {
|
return {
|
||||||
'hide_object': True,
|
'hide_object': True,
|
||||||
'object': self.get_object(),
|
'object': self.external_object,
|
||||||
'submit_label': _('Test'),
|
'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
|
|
||||||
)
|
|
||||||
|
|||||||
Reference in New Issue
Block a user