summaryrefslogtreecommitdiff
path: root/Mailman/database/model/roster.py
diff options
context:
space:
mode:
Diffstat (limited to 'Mailman/database/model/roster.py')
-rw-r--r--Mailman/database/model/roster.py16
1 files changed, 14 insertions, 2 deletions
diff --git a/Mailman/database/model/roster.py b/Mailman/database/model/roster.py
index 03aa9efc3..ee50cddf0 100644
--- a/Mailman/database/model/roster.py
+++ b/Mailman/database/model/roster.py
@@ -25,6 +25,7 @@ moderator, and administrator roster filters.
from zope.interface import implements
from Mailman.constants import DeliveryMode, MemberRole
+from Mailman.constants import SystemDefaultPreferences
from Mailman.database.model import Member
from Mailman.interfaces import IRoster
@@ -137,6 +138,17 @@ class AdministratorRoster(AbstractRoster):
+def _delivery_mode(member):
+ if member.preferences.delivery_mode is not None:
+ return member.preferences.delivery_mode
+ if member.address.preferences.delivery_mode is not None:
+ return member.address.preferences.delivery_mode
+ if (member.address.user and
+ member.address.user.preferences.delivery_mode is not None):
+ return member.address.user.preferences.delivery_mode
+ return SystemDefaultPreferences.delivery_mode
+
+
class RegularMemberRoster(AbstractRoster):
"""Return all the regular delivery members of a list."""
@@ -149,7 +161,7 @@ class RegularMemberRoster(AbstractRoster):
# that have a regular delivery mode.
for member in Member.select_by(mailing_list=self._mlist.fqdn_listname,
role=MemberRole.member):
- if member.preferences.delivery_mode == DeliveryMode.regular:
+ if _delivery_mode(member) == DeliveryMode.regular:
yield member
@@ -174,5 +186,5 @@ class DigestMemberRoster(AbstractRoster):
# that have one of the digest delivery modes.
for member in Member.select_by(mailing_list=self._mlist.fqdn_listname,
role=MemberRole.member):
- if member.preferences.delivery_mode in _digest_modes:
+ if _delivery_mode(member) in _digest_modes:
yield member