You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by tv...@apache.org on 2013/06/17 17:25:18 UTC
[2/2] git commit: [#6263] ticket:373 monitoring mail footer
refactoring
[#6263] ticket:373 monitoring mail footer refactoring
Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/2791b9f0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/2791b9f0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/2791b9f0
Branch: refs/heads/master
Commit: 2791b9f02e7ee2e6fcf68d60f40a282beb051ca5
Parents: d871290
Author: Yuriy Arhipov <yu...@yandex.ru>
Authored: Fri Jun 14 12:58:51 2013 +0400
Committer: Tim Van Steenburgh <tv...@gmail.com>
Committed: Mon Jun 17 15:24:45 2013 +0000
----------------------------------------------------------------------
Allura/allura/model/artifact.py | 4 +++
Allura/allura/model/notification.py | 33 ++++++++++++++++----
.../templates/mail/monitor_email_footer.txt | 25 +++++++++++++++
Allura/allura/tests/model/test_notification.py | 12 +++++++
ForgeDiscussion/forgediscussion/model/forum.py | 11 +++++++
.../tests/functional/test_forum_admin.py | 32 +++++++++++++++++++
ForgeTracker/forgetracker/model/ticket.py | 11 +++++++
.../forgetracker/tests/functional/test_root.py | 9 ++++++
8 files changed, 131 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2791b9f0/Allura/allura/model/artifact.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/artifact.py b/Allura/allura/model/artifact.py
index fefd9b4..05d7c14 100644
--- a/Allura/allura/model/artifact.py
+++ b/Allura/allura/model/artifact.py
@@ -39,6 +39,7 @@ from .session import artifact_orm_session
from .index import ArtifactReference
from .types import ACL, ACE
from .project import AppConfig
+from .notification import MailFooter
from filesystem import File
@@ -405,6 +406,9 @@ class Artifact(MappedClass):
ArtifactReference.query.remove(dict(_id=self.index_id()))
super(Artifact, self).delete()
+ def get_mail_footer(self, notification, toaddr):
+ return MailFooter.standard(notification)
+
class Snapshot(Artifact):
"""A snapshot of an :class:`Artifact <allura.model.artifact.Artifact>`, used in :class:`VersionedArtifact <allura.model.artifact.VersionedArtifact>`"""
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2791b9f0/Allura/allura/model/notification.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/notification.py b/Allura/allura/model/notification.py
index f5c9c6b..7c31a5c 100644
--- a/Allura/allura/model/notification.py
+++ b/Allura/allura/model/notification.py
@@ -220,11 +220,8 @@ class Notification(MappedClass):
**d)
return n
- def footer(self):
- template = self.view.get_template('mail/footer.txt')
- return template.render(dict(
- notification=self,
- prefix=config.get('forgemail.url', 'https://sourceforge.net')))
+ def footer(self, toaddr=''):
+ return self.ref.artifact.get_mail_footer(self, toaddr)
def send_simple(self, toaddr):
allura.tasks.mail_tasks.sendsimplemail.post(
@@ -234,7 +231,7 @@ class Notification(MappedClass):
subject=self.subject,
message_id=self._id,
in_reply_to=self.in_reply_to,
- text=(self.text or '') + self.footer())
+ text=(self.text or '') + self.footer(toaddr))
def send_direct(self, user_id):
user = User.query.get(_id=ObjectId(user_id))
@@ -579,3 +576,27 @@ class Mailbox(MappedClass):
Notification.send_summary(
self.user_id, u'noreply@in.sf.net', 'Digest Email',
notifications)
+
+
+class MailFooter(object):
+ view = jinja2.Environment(
+ loader=jinja2.PackageLoader('allura', 'templates'),
+ auto_reload=asbool(config.get('auto_reload_templates', True)),
+ )
+
+ @classmethod
+ def _render(cls, template, **kw):
+ return cls.view.get_template(template).render(kw)
+
+ @classmethod
+ def standard(cls, notification):
+ return cls._render('mail/footer.txt',
+ notification=notification,
+ prefix=config.get('forgemail.url', 'https://sourceforge.net'))
+
+ @classmethod
+ def monitored(cls, toaddr, app_url, setting_url):
+ return cls._render('mail/monitor_email_footer.txt',
+ email=toaddr,
+ app_url=app_url,
+ setting_url=setting_url)
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2791b9f0/Allura/allura/templates/mail/monitor_email_footer.txt
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/mail/monitor_email_footer.txt b/Allura/allura/templates/mail/monitor_email_footer.txt
new file mode 100644
index 0000000..39a9d3c
--- /dev/null
+++ b/Allura/allura/templates/mail/monitor_email_footer.txt
@@ -0,0 +1,25 @@
+{#
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+#}
+
+
+---
+
+Sent from sourceforge.net because {{email}} is subscribed to {{app_url}}
+
+To unsubscribe from further messages, a project admin can change settings at {{setting_url}} Or if this is a mailing list, you can unsubscribe from the mailing list.
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2791b9f0/Allura/allura/tests/model/test_notification.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/model/test_notification.py b/Allura/allura/tests/model/test_notification.py
index 6cdfbbb..469816d 100644
--- a/Allura/allura/tests/model/test_notification.py
+++ b/Allura/allura/tests/model/test_notification.py
@@ -27,6 +27,7 @@ import bson
from alluratest.controller import setup_basic_test, setup_global_objects, REGISTRY
from allura import model as M
+from allura.model.notification import MailFooter
from allura.lib import helpers as h
from allura.tests import decorators as td
from forgewiki import model as WM
@@ -175,6 +176,17 @@ class TestPostNotifications(unittest.TestCase):
finally:
security.has_access = orig
+ def test_footer(self):
+ footer = MailFooter.monitored(
+ 'test@mail.com',
+ 'http://test1.com',
+ 'http://test2.com')
+ assert 'test@mail.com is subscribed to http://test1.com' in footer
+ assert 'admin can change settings at http://test2.com' in footer
+ footer = MailFooter.standard(M.Notification())
+ assert 'Sent from sourceforge.net because you indicated interest in' in footer
+
+
def _subscribe(self, **kw):
self.pg.subscribe(type='direct', **kw)
ThreadLocalORMSession.flush_all()
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2791b9f0/ForgeDiscussion/forgediscussion/model/forum.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/model/forum.py b/ForgeDiscussion/forgediscussion/model/forum.py
index e311a8b..352e620 100644
--- a/ForgeDiscussion/forgediscussion/model/forum.py
+++ b/ForgeDiscussion/forgediscussion/model/forum.py
@@ -24,6 +24,7 @@ from ming.utils import LazyProperty
from ming.orm import FieldProperty, RelationProperty, ForeignIdProperty, Mapper
from allura import model as M
+from allura.model.notification import MailFooter
from allura.lib import utils
from allura.lib import helpers as h
@@ -125,6 +126,16 @@ class Forum(M.Discussion):
def icon(self):
return ForumFile.query.get(forum_id=self._id)
+ def get_mail_footer(self, notification, toaddr):
+ if toaddr and toaddr == self.monitoring_email:
+ return MailFooter.monitored(
+ toaddr,
+ h.absurl(self.url()),
+ h.absurl('{0}admin/{1}/forums'.format(
+ self.project.url(),
+ self.app.config.options.mount_point)))
+ return super(Forum, self).get_mail_footer(notification, toaddr)
+
class ForumFile(M.File):
forum_id=FieldProperty(schema.ObjectId)
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2791b9f0/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
----------------------------------------------------------------------
diff --git a/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py b/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
index a1bc1a2..cb85182 100644
--- a/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
+++ b/ForgeDiscussion/forgediscussion/tests/functional/test_forum_admin.py
@@ -23,6 +23,7 @@ import logging
import PIL
from alluratest.controller import TestController
from allura.lib import helpers as h
+from allura import model as M
from forgediscussion import model as FM
@@ -258,3 +259,34 @@ class TestForumAdmin(TestController):
params[f.find('input',{'style':'width: 90%'})['name']] = 'post topic'
r = self.app.post('/discussion/save_new_topic', params=params)
assert 'http://localhost/p/test/discussion/testforum/thread/' in r.location
+
+ def test_footer_monitoring_email(self):
+ r = self.app.get('/admin/discussion/forums')
+ r.forms[1]['add_forum.shortname'] = 'testforum'
+ r.forms[1]['add_forum.name'] = 'Test Forum'
+ r.forms[1].submit()
+ testforum = FM.Forum.query.get(shortname='testforum')
+ self.app.post('/admin/discussion/update_forums',
+ params={'forum-0.anon_posts':'on',
+ 'forum-0.id':str(testforum._id),
+ 'forum-0.name':'Test Forum',
+ 'forum-0.shortname':'testforum',
+ 'forum-0.description':'',
+ 'forum-0.monitoring_email':'email@monitoring.com'
+ })
+
+ r = self.app.get('/discussion/create_topic/')
+ f = r.html.find('form',{'action':'/p/test/discussion/save_new_topic'})
+ params = dict()
+ inputs = f.findAll('input')
+ for field in inputs:
+ if field.has_key('name'):
+ params[field['name']] = field.has_key('value') and field['value'] or ''
+ params[f.find('textarea')['name']] = 'post text'
+ params[f.find('select')['name']] = 'testforum'
+ params[f.find('input',{'style':'width: 90%'})['name']] = 'post topic'
+ r = self.app.post('/discussion/save_new_topic', params=params)
+ M.MonQTask.run_ready()
+ email_tasks = M.MonQTask.query.find(dict(task_name='allura.tasks.mail_tasks.sendsimplemail')).all()
+ assert 'Sent from sourceforge.net because email@monitoring.com is subscribed to http://localhost:80/p/test/discussion/testforum/' in email_tasks[0].kwargs['text'],email_tasks[0].kwargs['text']
+ assert 'a project admin can change settings at http://localhost:80/p/test/admin/discussion/forums' in email_tasks[0].kwargs['text']
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2791b9f0/ForgeTracker/forgetracker/model/ticket.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/model/ticket.py b/ForgeTracker/forgetracker/model/ticket.py
index 204948f..ed28a09 100644
--- a/ForgeTracker/forgetracker/model/ticket.py
+++ b/ForgeTracker/forgetracker/model/ticket.py
@@ -38,6 +38,7 @@ from allura.model import (Artifact, VersionedArtifact, Snapshot,
from allura.model import User, Feed, Thread, Notification, ProjectRole
from allura.model import ACE, ALL_PERMISSIONS, DENY_ALL
from allura.model.timeline import ActivityObject
+from allura.model.notification import MailFooter
from allura.lib import security
from allura.lib.search import search_artifact, SearchError
@@ -926,6 +927,16 @@ class Ticket(VersionedArtifact, ActivityObject, VotableArtifact):
count=count, q=q, limit=limit, page=page, sort=sort,
solr_error=solr_error, **kw)
+ def get_mail_footer(self, notification, toaddr):
+ if toaddr and toaddr == self.monitoring_email:
+ return MailFooter.monitored(
+ toaddr,
+ h.absurl(self.app.url),
+ h.absurl('{0}admin/{1}/options'.format(
+ self.project.url(),
+ self.app.config.options.mount_point)))
+ return super(Ticket, self).get_mail_footer(notification, toaddr)
+
class TicketAttachment(BaseAttachment):
thumbnail_size = (100, 100)
ArtifactType=Ticket
http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/2791b9f0/ForgeTracker/forgetracker/tests/functional/test_root.py
----------------------------------------------------------------------
diff --git a/ForgeTracker/forgetracker/tests/functional/test_root.py b/ForgeTracker/forgetracker/tests/functional/test_root.py
index 5b038d1..af3cb28 100644
--- a/ForgeTracker/forgetracker/tests/functional/test_root.py
+++ b/ForgeTracker/forgetracker/tests/functional/test_root.py
@@ -2091,6 +2091,15 @@ class TestEmailMonitoring(TrackerTestController):
self.new_ticket(summary='test')
assert send_simple.call_count == 0, send_simple.call_count
+ def test_footer(self):
+ self._set_options(monitoring_type='AllTicketChanges')
+ M.MonQTask.query.remove()
+ self.new_ticket(summary='test')
+ ThreadLocalORMSession.flush_all()
+ M.MonQTask.run_ready()
+ email_tasks = M.MonQTask.query.find(dict(task_name='allura.tasks.mail_tasks.sendsimplemail')).all()
+ assert 'Sent from sourceforge.net because mailinglist@example.com is subscribed to http://localhost:80/p/test/bugs/' in email_tasks[0].kwargs['text']
+ assert 'a project admin can change settings at http://localhost:80/p/test/admin/bugs/options' in email_tasks[0].kwargs['text']
class TestCustomUserField(TrackerTestController):
def setUp(self):