diff options
Diffstat (limited to 'Mailman/database/model')
| -rw-r--r-- | Mailman/database/model/member.py | 5 | ||||
| -rw-r--r-- | Mailman/database/model/pending.py | 22 | ||||
| -rw-r--r-- | Mailman/database/model/roster.py | 16 |
3 files changed, 30 insertions, 13 deletions
diff --git a/Mailman/database/model/member.py b/Mailman/database/model/member.py index 0a852f991..3f9775d3c 100644 --- a/Mailman/database/model/member.py +++ b/Mailman/database/model/member.py @@ -19,6 +19,7 @@ from storm.locals import * from zope.interface import implements from Mailman.Utils import split_listname +from Mailman.configuration import config from Mailman.constants import SystemDefaultPreferences from Mailman.database import Model from Mailman.database.types import Enum @@ -90,5 +91,5 @@ class Member(Model): return 'http://example.com/' + self.address.address def unsubscribe(self): - self.preferences.delete() - self.delete() + config.db.store.remove(self.preferences) + config.db.store.remove(self) diff --git a/Mailman/database/model/pending.py b/Mailman/database/model/pending.py index 058b5de09..970e3c16e 100644 --- a/Mailman/database/model/pending.py +++ b/Mailman/database/model/pending.py @@ -38,6 +38,10 @@ class PendedKeyValue(Model): implements(IPendedKeyValue) + def __init__(self, key, value): + self.key = key + self.value = value + id = Int(primary=True) key = Unicode() value = Unicode() @@ -48,10 +52,14 @@ class Pended(Model): implements(IPended) + def __init__(self, token, expiration_date): + self.token = token + self.expiration_date = expiration_date + id = Int(primary=True) - token = Unicode() + token = RawStr() expiration_date = DateTime() - key_values = Reference(id, PendedKeyValue.id) + key_values = ReferenceSet(id, PendedKeyValue.id) @@ -83,7 +91,7 @@ class Pendings(object): token = hashlib.sha1(repr(x)).hexdigest() # In practice, we'll never get a duplicate, but we'll be anal # about checking anyway. - if Pended.query.filter_by(token=token).count() == 0: + if config.db.store.find(Pended, token=token).count() == 0: break else: raise AssertionError('Could not find a valid pendings token') @@ -92,7 +100,13 @@ class Pendings(object): token=token, expiration_date=datetime.datetime.now() + lifetime) for key, value in pendable.items(): - PendedKeyValue(key=key, value=value, pended=pending) + if isinstance(key, str): + key = unicode(key, 'utf-8') + if isinstance(value, str): + value = unicode(value, 'utf-8') + keyval = PendedKeyValue(key=key, value=value) + pending.key_values.add(keyval) + config.db.store.add(pending) return token def confirm(self, token, expunge=True): diff --git a/Mailman/database/model/roster.py b/Mailman/database/model/roster.py index 0c8c3bd87..55723893d 100644 --- a/Mailman/database/model/roster.py +++ b/Mailman/database/model/roster.py @@ -133,12 +133,13 @@ class AdministratorRoster(AbstractRoster): yield member def get_member(self, address): - results = Member.query.filter( - and_(Member.c.mailing_list == self._mlist.fqdn_listname, - or_(Member.c.role == MemberRole.moderator, - Member.c.role == MemberRole.owner), - Address.c.address == address, - Member.c.address_id == Address.c.id)) + results = config.db.store.find( + Member, + Member.mailing_list == self._mlist.fqdn_listname, + Or(Member.role == MemberRole.moderator, + Member.role == MemberRole.owner), + Address.address == address, + Member.address_id == Address.id) if results.count() == 0: return None elif results.count() == 1: @@ -202,6 +203,7 @@ class Subscribers(AbstractRoster): @property def members(self): - for member in Member.query.filter_by( + for member in config.db.store.find( + Member, mailing_list=self._mlist.fqdn_listname): yield member |
