diff options
| author | Barry Warsaw | 2009-02-23 14:13:32 -0500 |
|---|---|---|
| committer | Barry Warsaw | 2009-02-23 14:13:32 -0500 |
| commit | b6ed8a7c98ea02af9014793f3b508c601da6ea75 (patch) | |
| tree | e0748f60a06bb54493624b031d0ac10b90cabd00 /src/mailman/database | |
| parent | 2d2d5393acc7db23baf4f3d43a0712bfa795c03e (diff) | |
| download | mailman-b6ed8a7c98ea02af9014793f3b508c601da6ea75.tar.gz mailman-b6ed8a7c98ea02af9014793f3b508c601da6ea75.tar.zst mailman-b6ed8a7c98ea02af9014793f3b508c601da6ea75.zip | |
acceptable_aliases are no longer a pickle.
Diffstat (limited to 'src/mailman/database')
| -rw-r--r-- | src/mailman/database/mailinglist.py | 52 | ||||
| -rw-r--r-- | src/mailman/database/mailman.sql | 16 |
2 files changed, 64 insertions, 4 deletions
diff --git a/src/mailman/database/mailinglist.py b/src/mailman/database/mailinglist.py index 2956cac57..fa4af5ad0 100644 --- a/src/mailman/database/mailinglist.py +++ b/src/mailman/database/mailinglist.py @@ -29,7 +29,8 @@ import os import string from storm.locals import ( - Bool, DateTime, Float, Int, Pickle, Store, TimeDelta, Unicode) + And, Bool, DateTime, Float, Int, Pickle, Reference, Store, TimeDelta, + Unicode) from urlparse import urljoin from zope.interface import implements @@ -38,7 +39,8 @@ from mailman.database import roster from mailman.database.digests import OneLastDigest from mailman.database.model import Model from mailman.database.types import Enum -from mailman.interfaces.mailinglist import IMailingList, Personalization +from mailman.interfaces.mailinglist import ( + IAcceptableAlias, IMailingList, Personalization) from mailman.utilities.filesystem import makedirs from mailman.utilities.string import expand @@ -67,11 +69,13 @@ class MailingList(Model): digest_last_sent_at = DateTime() volume = Int() last_post_time = DateTime() + # Implicit destination. + acceptable_aliases_id = Int() + acceptable_alias = Reference(acceptable_aliases_id, 'AcceptableAlias.id') # Attributes which are directly modifiable via the web u/i. The more # complicated attributes are currently stored as pickles, though that # will change as the schema and implementation is developed. accept_these_nonmembers = Pickle() - acceptable_aliases = Pickle() admin_immed_notify = Bool() admin_notify_mchanges = Bool() administrivia = Bool() @@ -293,3 +297,45 @@ class MailingList(Model): for digest in results] results.remove() return recipients + + def clear_acceptable_aliases(self): + """See `IMailingList`.""" + Store.of(self).find( + AcceptableAlias, + AcceptableAlias.mailing_list == self).remove() + + def add_acceptable_alias(self, alias): + if not (alias.startswith('^') or '@' in alias): + raise ValueError(alias) + alias = AcceptableAlias(self, alias.lower()) + Store.of(self).add(alias) + + def remove_acceptable_alias(self, alias): + Store.of(self).find( + AcceptableAlias, + And(AcceptableAlias.mailing_list == self, + AcceptableAlias.alias == alias.lower())).remove() + + @property + def acceptable_aliases(self): + aliases = Store.of(self).find( + AcceptableAlias, + AcceptableAlias.mailing_list == self) + for alias in aliases: + yield alias.alias + + + +class AcceptableAlias(Model): + implements(IAcceptableAlias) + + id = Int(primary=True) + + mailing_list_id = Int() + mailing_list = Reference(mailing_list_id, MailingList.id) + + alias = Unicode() + + def __init__(self, mailing_list, alias): + self.mailing_list = mailing_list + self.alias = alias diff --git a/src/mailman/database/mailman.sql b/src/mailman/database/mailman.sql index 79a28574e..d64be9815 100644 --- a/src/mailman/database/mailman.sql +++ b/src/mailman/database/mailman.sql @@ -7,6 +7,20 @@ CREATE TABLE _request ( PRIMARY KEY (id), CONSTRAINT _request_mailing_list_id_fk FOREIGN KEY(mailing_list_id) REFERENCES mailinglist (id) ); + +CREATE TABLE acceptablealias ( + id INTEGER NOT NULL, + "alias" TEXT NOT NULL, + mailing_list_id INTEGER NOT NULL, + PRIMARY KEY (id), + CONSTRAINT acceptablealias_mailing_list_id_fk + FOREIGN KEY(mailing_list_id) REFERENCES mailinglist (id) + ); +CREATE INDEX ix_acceptablealias_mailing_list_id + ON acceptablealias (mailing_list_id); +CREATE INDEX ix_acceptablealias_alias + ON acceptablealias ("alias"); + CREATE TABLE address ( id INTEGER NOT NULL, address TEXT, @@ -57,7 +71,7 @@ CREATE TABLE mailinglist ( volume INTEGER, last_post_time TIMESTAMP, accept_these_nonmembers BLOB, - acceptable_aliases BLOB, + acceptable_aliases_id INTEGER, admin_immed_notify BOOLEAN, admin_notify_mchanges BOOLEAN, administrivia BOOLEAN, |
