summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBarry Warsaw2012-01-26 23:30:20 -0500
committerBarry Warsaw2012-01-26 23:30:20 -0500
commitc5fd671f502d440b211ce4b99366aaad8be5bd1b (patch)
tree2a00d95ce534b45f4408749875ea8735bb0ac0d0 /src
parente6a261945e64201920c8c879615ac321739bce9f (diff)
downloadmailman-c5fd671f502d440b211ce4b99366aaad8be5bd1b.tar.gz
mailman-c5fd671f502d440b211ce4b99366aaad8be5bd1b.tar.zst
mailman-c5fd671f502d440b211ce4b99366aaad8be5bd1b.zip
Diffstat (limited to 'src')
-rw-r--r--src/mailman/app/subscriptions.py31
-rw-r--r--src/mailman/docs/NEWS.rst4
2 files changed, 22 insertions, 13 deletions
diff --git a/src/mailman/app/subscriptions.py b/src/mailman/app/subscriptions.py
index aa577c069..931d7f4c7 100644
--- a/src/mailman/app/subscriptions.py
+++ b/src/mailman/app/subscriptions.py
@@ -70,20 +70,25 @@ class SubscriptionService:
def get_members(self):
"""See `ISubscriptionService`."""
- # XXX 2010-02-24 barry Clean this up.
- # lazr.restful requires the return value to be a concrete list.
- members = []
+ # {fqdn_listname -> {role -> [members]}}
+ by_list = {}
+ user_manager = getUtility(IUserManager)
+ for member in user_manager.members:
+ by_role = by_list.setdefault(member.mailing_list, {})
+ members = by_role.setdefault(member.role.name, [])
+ members.append(member)
+ # Flatten into single list sorted as per the interface.
+ all_members = []
address_of_member = attrgetter('address.email')
- list_manager = getUtility(IListManager)
- for fqdn_listname in sorted(list_manager.names):
- mailing_list = list_manager.get(fqdn_listname)
- members.extend(
- sorted(mailing_list.owners.members, key=address_of_member))
- members.extend(
- sorted(mailing_list.moderators.members, key=address_of_member))
- members.extend(
- sorted(mailing_list.members.members, key=address_of_member))
- return members
+ for fqdn_listname in sorted(by_list):
+ by_role = by_list[fqdn_listname]
+ all_members.extend(
+ sorted(by_role.get('owner', []), key=address_of_member))
+ all_members.extend(
+ sorted(by_role.get('moderator', []), key=address_of_member))
+ all_members.extend(
+ sorted(by_role.get('member', []), key=address_of_member))
+ return all_members
def get_member(self, member_id):
"""See `ISubscriptionService`."""
diff --git a/src/mailman/docs/NEWS.rst b/src/mailman/docs/NEWS.rst
index c1553fd66..03aa586c2 100644
--- a/src/mailman/docs/NEWS.rst
+++ b/src/mailman/docs/NEWS.rst
@@ -21,6 +21,10 @@ Architecture
* Dynamically calculate the `List-Id` header instead of storing it in the
database. This means it cannot be changed.
+Interfaces
+----------
+ * Add property `IUserManager.members` to return all `IMembers` in the system.
+
Commands
--------
* `bin/mailman shell` is an alias for `withlist`.