diff options
| author | Barry Warsaw | 2007-11-06 18:16:22 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2007-11-06 18:16:22 -0500 |
| commit | d6377c92857c513faf484ef9a91a6b00da789d4b (patch) | |
| tree | c00600e52ec7ad327c947bc9a756e2694478a4d6 /Mailman/database/model | |
| parent | 46f480dfaa6286ff8950af817de1c35910b37e16 (diff) | |
| download | mailman-d6377c92857c513faf484ef9a91a6b00da789d4b.tar.gz mailman-d6377c92857c513faf484ef9a91a6b00da789d4b.tar.zst mailman-d6377c92857c513faf484ef9a91a6b00da789d4b.zip | |
Fix two doctests: ack-headers and acknowledgment.
This hacks around an apparent bug in the email package where if you parse a
unicode message string, you still end up getting 8-bit strings out of the
headers, and probably payloads.
The hack is to override Mailman.Message.Message.__getitem__() to force the
header value returned to a Unicode. It must be ASCII but this is required
anyway by RFC 2822. It's not perfect, but it lets us get farther without
forcing a detour into fixing the email package.
Other changes:
- Fix the Address table's references, and also update the subscribe() query.
- Fix the Member table's references and add a __init__().
- Fix Roster's get_member() query.
- Fix the Enum class's variable_class attribute.
- UserManager.create_user() has to use Unicodes for real_name.
Diffstat (limited to 'Mailman/database/model')
| -rw-r--r-- | Mailman/database/model/address.py | 14 | ||||
| -rw-r--r-- | Mailman/database/model/member.py | 9 | ||||
| -rw-r--r-- | Mailman/database/model/preferences.py | 1 | ||||
| -rw-r--r-- | Mailman/database/model/roster.py | 12 | ||||
| -rw-r--r-- | Mailman/database/model/user.py | 2 |
5 files changed, 24 insertions, 14 deletions
diff --git a/Mailman/database/model/address.py b/Mailman/database/model/address.py index 022bbce36..b8e2f0f31 100644 --- a/Mailman/database/model/address.py +++ b/Mailman/database/model/address.py @@ -20,6 +20,7 @@ from storm.locals import * from zope.interface import implements from Mailman import Errors +from Mailman.configuration import config from Mailman.database import Model from Mailman.interfaces import IAddress @@ -36,9 +37,9 @@ class Address(Model): registered_on = DateTime() user_id = Int() - user = Reference(user_id, 'User') + user = Reference(user_id, 'User.id') preferences_id = Int() - preferences = Reference(preferences_id, 'Preferences') + preferences = Reference(preferences_id, 'Preferences.id') def __init__(self, address, real_name): super(Address, self).__init__() @@ -65,9 +66,11 @@ class Address(Model): from Mailman.database.model import Member from Mailman.database.model import Preferences # This member has no preferences by default. - member = Member.get_by(role=role, - mailing_list=mailing_list.fqdn_listname, - address=self) + member = config.db.store.find( + Member, + Member.role == role, + Member.mailing_list == mailing_list.fqdn_listname, + Member.address == self).one() if member: raise Errors.AlreadySubscribedError( mailing_list.fqdn_listname, self.address, role) @@ -75,6 +78,7 @@ class Address(Model): mailing_list=mailing_list.fqdn_listname, address=self) member.preferences = Preferences() + config.db.store.add(member) return member @property diff --git a/Mailman/database/model/member.py b/Mailman/database/model/member.py index 70a823a75..0a852f991 100644 --- a/Mailman/database/model/member.py +++ b/Mailman/database/model/member.py @@ -34,9 +34,14 @@ class Member(Model): mailing_list = Unicode() address_id = Int() - address = Reference(address_id, 'Address') + address = Reference(address_id, 'Address.id') preferences_id = Int() - preferences = Reference(preferences_id, 'Preferences') + preferences = Reference(preferences_id, 'Preferences.id') + + def __init__(self, role, mailing_list, address): + self.role = role + self.mailing_list = mailing_list + self.address = address def __repr__(self): return '<Member: %s on %s as %s>' % ( diff --git a/Mailman/database/model/preferences.py b/Mailman/database/model/preferences.py index 085e33e06..65d909bd0 100644 --- a/Mailman/database/model/preferences.py +++ b/Mailman/database/model/preferences.py @@ -15,7 +15,6 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. -from email.utils import formataddr from storm.locals import * from zope.interface import implements diff --git a/Mailman/database/model/roster.py b/Mailman/database/model/roster.py index 5a01e7c7b..ab228d762 100644 --- a/Mailman/database/model/roster.py +++ b/Mailman/database/model/roster.py @@ -24,6 +24,7 @@ moderator, and administrator roster filters. from zope.interface import implements +from Mailman.configuration import config from Mailman.constants import SystemDefaultPreferences from Mailman.database.model import Address, Member from Mailman.interfaces import DeliveryMode, IRoster, MemberRole @@ -72,11 +73,12 @@ class AbstractRoster(object): yield member.address def get_member(self, address): - results = Member.query.filter( - and_(Member.c.mailing_list == self._mlist.fqdn_listname, - Member.c.role == self.role, - Address.c.address == address, - Member.c.address_id == Address.c.id)) + results = config.db.store.find( + Member, + Member.mailing_list == self._mlist.fqdn_listname, + Member.role == self.role, + Address.address == address, + Member.address_id == Address.id) if results.count() == 0: return None elif results.count() == 1: diff --git a/Mailman/database/model/user.py b/Mailman/database/model/user.py index 1ba5ba10e..7be54c3c4 100644 --- a/Mailman/database/model/user.py +++ b/Mailman/database/model/user.py @@ -36,7 +36,7 @@ class User(Model): addresses = ReferenceSet(id, 'Address.user_id') preferences_id = Int() - preferences = Reference(preferences_id, 'Preferences') + preferences = Reference(preferences_id, 'Preferences.id') def __repr__(self): return '<User "%s" at %#x>' % (self.real_name, id(self)) |
