summaryrefslogtreecommitdiff
path: root/Mailman/database/model
diff options
context:
space:
mode:
authorBarry Warsaw2007-11-06 18:16:22 -0500
committerBarry Warsaw2007-11-06 18:16:22 -0500
commitd6377c92857c513faf484ef9a91a6b00da789d4b (patch)
treec00600e52ec7ad327c947bc9a756e2694478a4d6 /Mailman/database/model
parent46f480dfaa6286ff8950af817de1c35910b37e16 (diff)
downloadmailman-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.py14
-rw-r--r--Mailman/database/model/member.py9
-rw-r--r--Mailman/database/model/preferences.py1
-rw-r--r--Mailman/database/model/roster.py12
-rw-r--r--Mailman/database/model/user.py2
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))