diff options
Diffstat (limited to 'src')
| -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`. |
