Skip to content

Commit e74f54e

Browse files
committed
Fix: Properly handle binary strings in membership adapter for Python 3 compatibility
1 parent a207dbb commit e74f54e

1 file changed

Lines changed: 26 additions & 3 deletions

File tree

Mailman/OldStyleMemberships.py

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,17 @@ def getMemberKey(self, member):
174174
return member.lower()
175175

176176
def getMemberCPAddress(self, member):
177+
"""Get the canonical address of a member.
178+
179+
Args:
180+
member: The member's email address
181+
182+
Returns:
183+
str: The member's canonical address
184+
185+
Raises:
186+
NotAMemberError: If the member is not found
187+
"""
177188
cpaddr, where = self.__get_cp_member(member)
178189
if cpaddr is None:
179190
raise Errors.NotAMemberError(member)
@@ -221,10 +232,18 @@ def getMemberOption(self, member, flag):
221232
return not not (option & flag)
222233

223234
def getMemberName(self, member):
235+
"""Get the real name of a member.
236+
237+
Args:
238+
member: The member's email address
239+
240+
Returns:
241+
str: The member's real name, or None if not set
242+
"""
224243
self.__assertIsMember(member)
225244
name = self.__mlist.usernames.get(member.lower())
226245
if name is None:
227-
return ''
246+
return None
228247
if isinstance(name, bytes):
229248
try:
230249
# Try Latin-1 first since that's what we're seeing in the data
@@ -432,7 +451,12 @@ def setMemberOption(self, member, flag, value):
432451
del self.__mlist.user_options[memberkey]
433452

434453
def setMemberName(self, member, realname):
435-
assert self.__mlist.Locked()
454+
"""Set the real name of a member.
455+
456+
Args:
457+
member: The member's email address
458+
realname: The member's real name
459+
"""
436460
self.__assertIsMember(member)
437461
if realname is None:
438462
realname = ''
@@ -443,7 +467,6 @@ def setMemberName(self, member, realname):
443467
except UnicodeDecodeError:
444468
# Fall back to UTF-8 if Latin-1 fails
445469
realname = realname.decode('utf-8', 'replace')
446-
# Store as a Python 3 string
447470
self.__mlist.usernames[member.lower()] = str(realname)
448471

449472
def setMemberTopics(self, member, topics):

0 commit comments

Comments
 (0)