summaryrefslogtreecommitdiff
path: root/src/mailman
diff options
context:
space:
mode:
authorAbhilash Raj2016-12-06 18:13:27 -0800
committerBarry Warsaw2017-01-08 22:52:15 -0500
commitc63906e0bfc83fdb9fb0ddfbb54120508b7d0109 (patch)
tree849cddd075d99b03d3d79d911d3b4c7b656505ee /src/mailman
parent609739ee390447a8feb99bb52d13c6e3f0bf3caa (diff)
downloadmailman-c63906e0bfc83fdb9fb0ddfbb54120508b7d0109.tar.gz
mailman-c63906e0bfc83fdb9fb0ddfbb54120508b7d0109.tar.zst
mailman-c63906e0bfc83fdb9fb0ddfbb54120508b7d0109.zip
Diffstat (limited to 'src/mailman')
-rw-r--r--src/mailman/model/listmanager.py2
-rw-r--r--src/mailman/model/pending.py7
-rw-r--r--src/mailman/model/requests.py8
-rw-r--r--src/mailman/model/tests/test_listmanager.py18
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