diff options
| -rw-r--r-- | src/mailman/model/listmanager.py | 2 | ||||
| -rw-r--r-- | src/mailman/model/pending.py | 7 | ||||
| -rw-r--r-- | src/mailman/model/requests.py | 8 | ||||
| -rw-r--r-- | src/mailman/model/tests/test_listmanager.py | 18 |
4 files changed, 33 insertions, 2 deletions
diff --git a/src/mailman/model/listmanager.py b/src/mailman/model/listmanager.py index 25848aabf..885e5c284 100644 --- a/src/mailman/model/listmanager.py +++ b/src/mailman/model/listmanager.py @@ -22,6 +22,7 @@ from mailman.interfaces.address import InvalidEmailAddressError from mailman.interfaces.listmanager import ( IListManager, ListAlreadyExistsError, ListCreatedEvent, ListCreatingEvent, ListDeletedEvent, ListDeletingEvent) +from mailman.interfaces.requests import IListRequests from mailman.model.autorespond import AutoResponseRecord from mailman.model.bans import Ban from mailman.model.mailinglist import ( @@ -76,6 +77,7 @@ class ListManager: notify(ListDeletingEvent(mlist)) # First delete information associated with the mailing list. IAcceptableAliasSet(mlist).clear() + IListRequests(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() diff --git a/src/mailman/model/pending.py b/src/mailman/model/pending.py index dfcc6ea4f..023baf8de 100644 --- a/src/mailman/model/pending.py +++ b/src/mailman/model/pending.py @@ -151,7 +151,7 @@ class Pendings: store.delete(pending) @dbconnection - def find(self, store, mlist=None, pend_type=None): + def find(self, store, mlist=None, pend_type=None, confirm=True): query = store.query(Pended) if mlist is not None: pkv_alias_mlist = aliased(PendedKeyValue) @@ -166,7 +166,10 @@ class Pendings: pkv_alias_type.value == pend_type )) for pending in query: - yield pending.token, self.confirm(pending.token, expunge=False) + if confirm: + yield pending.token, self.confirm(pending.token, expunge=False) + else: + yield pending.token @dbconnection def __iter__(self, store): diff --git a/src/mailman/model/requests.py b/src/mailman/model/requests.py index c177388af..440b977a1 100644 --- a/src/mailman/model/requests.py +++ b/src/mailman/model/requests.py @@ -23,6 +23,7 @@ from mailman.database.transaction import dbconnection from mailman.database.types import Enum, SAUnicode from mailman.interfaces.pending import IPendable, IPendings from mailman.interfaces.requests import IListRequests, RequestType +from mailman.model.pending import Pended from mailman.utilities.queries import QuerySequence from pickle import dumps, loads from public import public @@ -139,6 +140,13 @@ class ListRequests: getUtility(IPendings).confirm(request.data_hash) store.delete(request) + @dbconnection + def clear(self, store): + for pended_token in getUtility(IPendings).find( + mlist=self.mailing_list, + confirm=False): + store.query(Pended).filter_by(token=pended_token).delete() + class _Request(Model): """Table for mailing list hold requests.""" diff --git a/src/mailman/model/tests/test_listmanager.py b/src/mailman/model/tests/test_listmanager.py index 914c0c185..cdd13ced3 100644 --- a/src/mailman/model/tests/test_listmanager.py +++ b/src/mailman/model/tests/test_listmanager.py @@ -30,6 +30,7 @@ from mailman.interfaces.listmanager import ( ListDeletedEvent, ListDeletingEvent) from mailman.interfaces.mailinglist import IListArchiverSet from mailman.interfaces.messages import IMessageStore +from mailman.interfaces.pending import IPendable, IPendings from mailman.interfaces.requests import IListRequests from mailman.interfaces.subscriptions import ISubscriptionService from mailman.interfaces.usermanager import IUserManager @@ -38,6 +39,12 @@ from mailman.testing.helpers import ( event_subscribers, specialized_message_from_string) from mailman.testing.layers import ConfigLayer from zope.component import getUtility +from zope.interface import implementer + + +@implementer(IPendable) +class SimplePendable(dict): + PEND_TYPE = 'simple' class TestListManager(unittest.TestCase): @@ -190,6 +197,17 @@ Message-ID: <argon> mailing_list=self._ant) self.assertEqual(filters.count(), 0) + def test_pendings_are_deleted_when_mailing_list_is_deleted(self): + pendingdb = getUtility(IPendings) + test1_list = create_list('test@example.com') + subscription_1 = SimplePendable( + type='subscription', + list_id='test.example.com') + pendingdb.add(subscription_1) + self.assertEqual(pendingdb.count, 1) + getUtility(IListManager).delete(test1_list) + self.assertEqual(pendingdb.count, 0) + class TestListCreation(unittest.TestCase): layer = ConfigLayer |
