summaryrefslogtreecommitdiff
path: root/src/mailman/database
diff options
context:
space:
mode:
authorBarry Warsaw2009-02-23 14:13:32 -0500
committerBarry Warsaw2009-02-23 14:13:32 -0500
commitb6ed8a7c98ea02af9014793f3b508c601da6ea75 (patch)
treee0748f60a06bb54493624b031d0ac10b90cabd00 /src/mailman/database
parent2d2d5393acc7db23baf4f3d43a0712bfa795c03e (diff)
downloadmailman-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.py52
-rw-r--r--src/mailman/database/mailman.sql16
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,