diff options
| author | Aurélien Bompard | 2016-08-24 09:51:38 +0200 |
|---|---|---|
| committer | Barry Warsaw | 2016-10-26 08:39:07 -0400 |
| commit | e75d653f700dcf9a0a31550384d6511c47d024c1 (patch) | |
| tree | 24399f2887435e2d6d905757b78da0921c6dc584 /src | |
| parent | 72197b0ca012c55b290230d846c6a65314c6fe05 (diff) | |
| download | mailman-e75d653f700dcf9a0a31550384d6511c47d024c1.tar.gz mailman-e75d653f700dcf9a0a31550384d6511c47d024c1.tar.zst mailman-e75d653f700dcf9a0a31550384d6511c47d024c1.zip | |
Diffstat (limited to 'src')
| -rw-r--r-- | src/mailman/interfaces/listmanager.py | 9 | ||||
| -rw-r--r-- | src/mailman/model/listmanager.py | 7 | ||||
| -rw-r--r-- | src/mailman/model/tests/test_listmanager.py | 8 | ||||
| -rw-r--r-- | src/mailman/rest/lists.py | 13 |
4 files changed, 29 insertions, 8 deletions
diff --git a/src/mailman/interfaces/listmanager.py b/src/mailman/interfaces/listmanager.py index fddec06c8..771eabd70 100644 --- a/src/mailman/interfaces/listmanager.py +++ b/src/mailman/interfaces/listmanager.py @@ -142,3 +142,12 @@ class IListManager(Interface): name_components = Attribute( """An iterator over the 2-tuple of (list_name, mail_host) for all mailing lists managed by this list manager.""") + + def find(**filters): + """Search for mailing lists matching some criteria. + + The filters are mailing list properties that will be filtered upon. + + :return: The list of filtered mailing lists. + :rtype: list of `IMailingList` + """ diff --git a/src/mailman/model/listmanager.py b/src/mailman/model/listmanager.py index 681903ffc..c02736aab 100644 --- a/src/mailman/model/listmanager.py +++ b/src/mailman/model/listmanager.py @@ -29,6 +29,7 @@ from mailman.model.mailinglist import ( IAcceptableAliasSet, ListArchiver, MailingList) from mailman.model.mime import ContentFilter from mailman.utilities.datetime import now +from mailman.utilities.queries import QuerySequence from zope.event import notify from zope.interface import implementer @@ -121,3 +122,9 @@ class ListManager: for mail_host, list_name in result_set.values(MailingList.mail_host, MailingList.list_name): yield list_name, mail_host + + @dbconnection + def find(self, store, **kw): + query = store.query(MailingList).filter_by(**kw).order_by( + MailingList._list_id) + return QuerySequence(query) diff --git a/src/mailman/model/tests/test_listmanager.py b/src/mailman/model/tests/test_listmanager.py index ff1bd3026..d69486370 100644 --- a/src/mailman/model/tests/test_listmanager.py +++ b/src/mailman/model/tests/test_listmanager.py @@ -103,6 +103,14 @@ class TestListManager(unittest.TestCase): list_manager.delete(mlist) self.assertIsNone(list_manager.get('ant@example.com')) + def test_find_list(self): + ant = create_list('ant@example.com') + create_list('bee@example.com') + ant.anonymous_list = True + result = getUtility(IListManager).find(anonymous_list=True) + self.assertEqual(len(result), 1) + self.assertEqual(result[0], ant) + class TestListLifecycleEvents(unittest.TestCase): layer = ConfigLayer diff --git a/src/mailman/rest/lists.py b/src/mailman/rest/lists.py index 3d2ed072c..dc1d75203 100644 --- a/src/mailman/rest/lists.py +++ b/src/mailman/rest/lists.py @@ -107,16 +107,14 @@ class _ListBase(CollectionMixin): def _get_collection(self, request): """See `CollectionMixin`.""" - return self._filter_lists( - request, list(getUtility(IListManager))) + return self._filter_lists(request) - def _filter_lists(self, request, lists): + def _filter_lists(self, request, **kw): """Filter a collection using query parameters.""" only_advertised = request.get_param_as_bool('only_advertised') if only_advertised: - return [l for l in lists if l.advertised] - else: - return lists + kw['advertised'] = True + return getUtility(IListManager).find(**kw) @public @@ -308,8 +306,7 @@ class ListsForDomain(_ListBase): def _get_collection(self, request): """See `CollectionMixin`.""" - return self._filter_lists( - request, list(self._domain.mailing_lists)) + return self._filter_lists(request, mail_host=self._domain.mail_host) @public |
