diff options
| -rw-r--r-- | src/mailman/rest/helpers.py | 14 | ||||
| -rw-r--r-- | src/mailman/rest/tests/test_moderation.py | 10 |
2 files changed, 20 insertions, 4 deletions
diff --git a/src/mailman/rest/helpers.py b/src/mailman/rest/helpers.py index 8de2632bc..a7bbc2bae 100644 --- a/src/mailman/rest/helpers.py +++ b/src/mailman/rest/helpers.py @@ -139,9 +139,12 @@ class CollectionMixin: return etag(resource) def _get_collection(self, request): - """Return the collection as a concrete list. + """Return the collection as a list-like object. - This must be implemented by subclasses. + The returned value must support iteration and slicing. It can for + example be a concrete list or an SQLAlchemy request. + + This method must be implemented by subclasses. :param request: An http request. :return: The collection @@ -162,9 +165,12 @@ class CollectionMixin: # get turned into HTTP 400 errors. count = request.get_param_as_int('count', min=0) page = request.get_param_as_int('page', min=1) - total_size = len(collection) + try: + total_size = collection.count() + except TypeError: + total_size = len(collection) if count is None and page is None: - return 0, total_size, collection + return 0, total_size, list(collection) list_start = (page - 1) * count list_end = page * count return list_start, total_size, collection[list_start:list_end] diff --git a/src/mailman/rest/tests/test_moderation.py b/src/mailman/rest/tests/test_moderation.py index 0100c57ba..68b92494b 100644 --- a/src/mailman/rest/tests/test_moderation.py +++ b/src/mailman/rest/tests/test_moderation.py @@ -97,6 +97,16 @@ Something else. call_api(url, dict(action='discard')) self.assertEqual(cm.exception.code, 404) + def test_list_held_messages(self): + # We can view all the held requests. + with transaction(): + held_id = hold_message(self._mlist, self._msg) + content, response = call_api( + 'http://localhost:9001/3.0/lists/ant@example.com/held') + self.assertEqual(response.status, 200) + self.assertEqual(content['total_size'], 1) + self.assertEqual(content['entries'][0]['request_id'], held_id) + class TestSubscriptionModeration(unittest.TestCase): |
