diff options
| author | Barry Warsaw | 2012-01-26 23:30:20 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2012-01-26 23:30:20 -0500 |
| commit | c5fd671f502d440b211ce4b99366aaad8be5bd1b (patch) | |
| tree | 2a00d95ce534b45f4408749875ea8735bb0ac0d0 | |
| parent | e6a261945e64201920c8c879615ac321739bce9f (diff) | |
| download | mailman-c5fd671f502d440b211ce4b99366aaad8be5bd1b.tar.gz mailman-c5fd671f502d440b211ce4b99366aaad8be5bd1b.tar.zst mailman-c5fd671f502d440b211ce4b99366aaad8be5bd1b.zip | |
| -rw-r--r-- | src/mailman/app/subscriptions.py | 31 | ||||
| -rw-r--r-- | src/mailman/docs/NEWS.rst | 4 |
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`. |
