Barry Warsaw pushed to branch release-3.0 at mailman / Mailman
Commits:
b01c9b15 by Barry Warsaw at 2015-08-04T22:54:34Z
Merge branch 'maxking/mailman-issue-115'
Fix constraint violations on mailing list deletes affecting PostgreSQL. Given
by Abhilash Raj. (Closes #115)
- - - - -
4 changed files:
- src/mailman/docs/NEWS.rst
- src/mailman/model/listmanager.py
- src/mailman/model/tests/test_listmanager.py
- tox.ini
Changes:
=====================================
src/mailman/docs/NEWS.rst
=====================================
--- a/src/mailman/docs/NEWS.rst
+++ b/src/mailman/docs/NEWS.rst
@@ -30,6 +30,8 @@ Bugs
explicitly in the POST that creates a user. (Closes #136)
* By POSTing to a user resource with an existing unlinked address, you can
link the address to the user. Given by Abhilash Raj.
+ * Fix constraint violations on mailing list deletes affecting PostgreSQL.
+ Given by Abhilash Raj. (Closes #115)
3.0.0 -- "Show Don't Tell"
=====================================
src/mailman/model/listmanager.py
=====================================
--- a/src/mailman/model/listmanager.py
+++ b/src/mailman/model/listmanager.py
@@ -27,7 +27,9 @@ from mailman.interfaces.address import
InvalidEmailAddressError
from mailman.interfaces.listmanager import (
IListManager, ListAlreadyExistsError, ListCreatedEvent, ListCreatingEvent,
ListDeletedEvent, ListDeletingEvent)
-from mailman.model.mailinglist import IAcceptableAliasSet, MailingList
+from mailman.model.autorespond import AutoResponseRecord
+from mailman.model.mailinglist import (
+ IAcceptableAliasSet, ListArchiver, MailingList)
from mailman.model.mime import ContentFilter
from mailman.utilities.datetime import now
from zope.event import notify
@@ -76,7 +78,9 @@ class ListManager:
notify(ListDeletingEvent(mlist))
# First delete information associated with the mailing list.
IAcceptableAliasSet(mlist).clear()
+ store.query(AutoResponseRecord).filter_by(mailing_list=mlist).delete()
store.query(ContentFilter).filter_by(mailing_list=mlist).delete()
+ store.query(ListArchiver).filter_by(mailing_list=mlist).delete()
store.delete(mlist)
notify(ListDeletedEvent(fqdn_listname))
=====================================
src/mailman/model/tests/test_listmanager.py
=====================================
--- a/src/mailman/model/tests/test_listmanager.py
+++ b/src/mailman/model/tests/test_listmanager.py
@@ -29,10 +29,12 @@ import unittest
from mailman.app.lifecycle import create_list
from mailman.app.moderator import hold_message
from mailman.config import config
+from mailman.interfaces.autorespond import IAutoResponseSet, Response
from mailman.interfaces.address import InvalidEmailAddressError
from mailman.interfaces.listmanager import (
IListManager, ListAlreadyExistsError, ListCreatedEvent, ListCreatingEvent,
ListDeletedEvent, ListDeletingEvent)
+from mailman.interfaces.mailinglist import IListArchiverSet
from mailman.interfaces.messages import IMessageStore
from mailman.interfaces.requests import IListRequests
from mailman.interfaces.subscriptions import ISubscriptionService
@@ -86,6 +88,29 @@ class TestListManager(unittest.TestCase):
sorted(getUtility(IListManager).list_ids),
['ant.example.com', 'bee.example.com', 'cat.example.com'])
+ def test_delete_list_with_list_archiver_set(self):
+ # Ensure that mailing lists with archiver sets can be deleted. In
+ # issue #115, this fails under PostgreSQL, but not SQLite.
+ mlist = create_list('[email protected]')
+ # We don't keep a reference to this archiver set just because it makes
+ # pyflakes unhappy. It doesn't change the outcome.
+ IListArchiverSet(mlist)
+ list_manager = getUtility(IListManager)
+ list_manager.delete(mlist)
+ self.assertIsNone(list_manager.get('[email protected]'))
+
+ def test_delete_list_with_autoresponse_record(self):
+ # Ensure that mailing lists with auto-response sets can be deleted. In
+ # issue #115, this fails under PostgreSQL, but not SQLite.
+ list_manager = getUtility(IListManager)
+ user_manager = getUtility(IUserManager)
+ mlist = create_list('[email protected]')
+ address = user_manager.create_address('[email protected]')
+ autoresponse_set = IAutoResponseSet(mlist)
+ autoresponse_set.response_sent(address, Response.hold)
+ list_manager.delete(mlist)
+ self.assertIsNone(list_manager.get('[email protected]'))
+
class TestListLifecycleEvents(unittest.TestCase):
=====================================
tox.ini
=====================================
--- a/tox.ini
+++ b/tox.ini
@@ -6,6 +6,8 @@ recreate = True
commands = python -m nose2 -v
#sitepackages = True
usedevelop = True
+passenv=
+ MAILMAN_*
# This environment requires you to set up PostgreSQL and create a .cfg file
# somewhere outside of the source tree.
View it on GitLab:
https://gitlab.com/mailman/mailman/commit/b01c9b15e558cc534494a4cc9363b274b2fdc549
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
https://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org