summaryrefslogtreecommitdiff
path: root/src/mailman/model/mailinglist.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/model/mailinglist.py')
-rw-r--r--src/mailman/model/mailinglist.py59
1 files changed, 55 insertions, 4 deletions
diff --git a/src/mailman/model/mailinglist.py b/src/mailman/model/mailinglist.py
index dd7a528c3..a0239caa9 100644
--- a/src/mailman/model/mailinglist.py
+++ b/src/mailman/model/mailinglist.py
@@ -28,8 +28,8 @@ __all__ = [
import os
from storm.locals import (
- And, Bool, DateTime, Float, Int, Pickle, RawStr, Reference, Store,
- TimeDelta, Unicode)
+ And, Bool, DateTime, Float, Int, Pickle, RawStr, Reference, ReferenceSet,
+ Store, TimeDelta, Unicode)
from urlparse import urljoin
from zope.component import getUtility
from zope.event import notify
@@ -47,8 +47,8 @@ from mailman.interfaces.digests import DigestFrequency
from mailman.interfaces.domain import IDomainManager
from mailman.interfaces.languages import ILanguageManager
from mailman.interfaces.mailinglist import (
- IAcceptableAlias, IAcceptableAliasSet, IMailingList, Personalization,
- ReplyToMunging)
+ IAcceptableAlias, IAcceptableAliasSet, IArchiverList, IListArchiverSet,
+ IMailingList, Personalization, ReplyToMunging)
from mailman.interfaces.member import (
AlreadySubscribedError, MemberRole, MissingPreferredAddressError,
SubscriptionEvent)
@@ -67,6 +67,19 @@ from mailman.utilities.string import expand
SPACE = ' '
UNDERSCORE = '_'
+@implementer(IArchiverList)
+class ArchiverList(Model):
+ __storm_primary__ = "mailing_list_id", "archiver_name"
+ mailing_list_id = Int()
+ archiver_name = Unicode()
+ archiver_enabled = Bool()
+
+ def __init__(self, mailing_list_id, archiver_name):
+ self.mailing_list_id = mailing_list_id
+ self.archiver_name = archiver_name
+ self.archiver_enabled = False
+
+
@implementer(IMailingList)
@@ -78,6 +91,7 @@ class MailingList(Model):
# XXX denotes attributes that should be part of the public interface but
# are currently missing.
+ archivers = ReferenceSet(id, ArchiverList.mailing_list_id)
# List identity
list_name = Unicode()
mail_host = Unicode()
@@ -538,3 +552,40 @@ class AcceptableAliasSet:
AcceptableAlias.mailing_list == self._mailing_list)
for alias in aliases:
yield alias.alias
+
+@implementer(IListArchiverSet)
+class ListArchiverSet:
+ def __init__(self, mailing_list):
+ self._mailing_list = mailing_list
+ self.lazyAdd()
+
+ def getAll(self):
+ entries = Store.of(self._mailing_list).find(ArchiverList, ArchiverList.mailing_list_id == self._mailing_list.id)
+ all_in_config = {archiver.name for archiver in config.archivers}
+ ret = {}
+ for entry in entries:
+ if entry.archiver_name in all_in_config:
+ ret[entry.archiver_name] = int(entry.archiver_enabled)
+ return ret
+
+ def set(self, archiver, is_enabled):
+ bool_enabled = (int(is_enabled) != 0)
+ self.get(archiver).set(archiver_enabled=bool_enabled)
+
+ def isEnabled(self, archiverName):
+ return self.get(archiverName).one().archiver_enabled
+
+ def get(self, archiverName):
+ return Store.of(self._mailing_list).find(ArchiverList,
+ (ArchiverList.mailing_list_id == self._mailing_list.id) & (ArchiverList.archiver_name == archiverName))
+
+ def lazyAdd(self):
+ names = []
+ for archiver in config.archivers:
+ count = self.get(archiver.name).count()
+ names.append((archiver.name, count))
+ if not count:
+ entry = ArchiverList(self._mailing_list.id, archiver.name)
+ Store.of(self._mailing_list).add(entry)
+ Store.of(self._mailing_list).commit()
+