summaryrefslogtreecommitdiff
path: root/mailman/Archiver
diff options
context:
space:
mode:
Diffstat (limited to 'mailman/Archiver')
-rw-r--r--mailman/Archiver/Archiver.py23
-rw-r--r--mailman/Archiver/HyperArch.py57
-rw-r--r--mailman/Archiver/pipermail.py8
3 files changed, 29 insertions, 59 deletions
diff --git a/mailman/Archiver/Archiver.py b/mailman/Archiver/Archiver.py
index 3ffa11972..ebe7c35e7 100644
--- a/mailman/Archiver/Archiver.py
+++ b/mailman/Archiver/Archiver.py
@@ -31,12 +31,11 @@ import traceback
from cStringIO import StringIO
from string import Template
-from Mailman import Mailbox
-from Mailman import Utils
-from Mailman.SafeDict import SafeDict
-from Mailman.configuration import config
-from Mailman.configuration import config
-from Mailman.i18n import _
+from mailman import Mailbox
+from mailman import Utils
+from mailman.SafeDict import SafeDict
+from mailman.configuration import config
+from mailman.i18n import _
log = logging.getLogger('mailman.error')
@@ -82,10 +81,11 @@ class Archiver:
# the private directory, pointing directly to the private/listname
# which has o+rx permissions. Private archives do not have the
# symbolic links.
+ archdir = archive_dir(self.fqdn_listname)
omask = os.umask(0)
try:
try:
- os.mkdir(self.archive_dir()+'.mbox', 02775)
+ os.mkdir(archdir+'.mbox', 02775)
except OSError, e:
if e.errno <> errno.EEXIST: raise
# We also create an empty pipermail archive directory into
@@ -93,12 +93,12 @@ class Archiver:
# that lists that have not yet received a posting have
# /something/ as their index.html, and don't just get a 404.
try:
- os.mkdir(self.archive_dir(), 02775)
+ os.mkdir(archdir, 02775)
except OSError, e:
if e.errno <> errno.EEXIST: raise
# See if there's an index.html file there already and if not,
# write in the empty archive notice.
- indexfile = os.path.join(self.archive_dir(), 'index.html')
+ indexfile = os.path.join(archdir, 'index.html')
fp = None
try:
fp = open(indexfile)
@@ -119,11 +119,6 @@ class Archiver:
finally:
os.umask(omask)
- def archive_dir(self):
- # Return the private archive directory
- return os.path.join(config.PRIVATE_ARCHIVE_FILE_DIR,
- self.fqdn_listname)
-
def ArchiveFileName(self):
"""The mbox name where messages are left for archive construction."""
return os.path.join(self.archive_dir() + '.mbox',
diff --git a/mailman/Archiver/HyperArch.py b/mailman/Archiver/HyperArch.py
index 0d81d2652..9c0bdd3f9 100644
--- a/mailman/Archiver/HyperArch.py
+++ b/mailman/Archiver/HyperArch.py
@@ -43,15 +43,14 @@ from email.Errors import HeaderParseError
from email.Header import decode_header, make_header
from locknix.lockfile import Lock
-from Mailman import Errors
-from Mailman import MailList
-from Mailman import Utils
-from Mailman import i18n
-from Mailman.Archiver import HyperDatabase
-from Mailman.Archiver import pipermail
-from Mailman.Mailbox import ArchiverMailbox
-from Mailman.SafeDict import SafeDict
-from Mailman.configuration import config
+from mailman import Errors
+from mailman import Utils
+from mailman import i18n
+from mailman.Archiver import HyperDatabase
+from mailman.Archiver import pipermail
+from mailman.Mailbox import ArchiverMailbox
+from mailman.SafeDict import SafeDict
+from mailman.configuration import config
log = logging.getLogger('mailman.error')
@@ -303,30 +302,6 @@ class Article(pipermail.Article):
self.decode_headers()
- # Mapping of listnames to MailList instances as a weak value dictionary.
- # This code is copied from Runner.py but there's one important operational
- # difference. In Runner.py, we always .Load() the MailList object for
- # each _dispose() run, otherwise the object retrieved from the cache won't
- # be up-to-date. Since we're creating a new HyperArchive instance for
- # each message being archived, we don't need to worry about that -- but it
- # does mean there are additional opportunities for optimization.
- _listcache = weakref.WeakValueDictionary()
-
- def _open_list(self, listname):
- # Cache the open list so that any use of the list within this process
- # uses the same object. We use a WeakValueDictionary so that when the
- # list is no longer necessary, its memory is freed.
- mlist = self._listcache.get(listname)
- if not mlist:
- try:
- mlist = MailList.MailList(listname, lock=0)
- except Errors.MMListError, e:
- log.error('error opening list: %s\n%s', listname, e)
- return None
- else:
- self._listcache[listname] = mlist
- return mlist
-
def __getstate__(self):
d = self.__dict__.copy()
# We definitely don't want to pickle the MailList instance, so just
@@ -355,7 +330,7 @@ class Article(pipermail.Article):
listname = d.get('__listname')
if listname:
del d['__listname']
- d['_mlist'] = self._open_list(listname)
+ d['_mlist'] = config.db.list_manager.get(listname)
if not d.has_key('_lang'):
if hasattr(self, '_mlist'):
self._lang = self._mlist.preferred_language
@@ -394,7 +369,7 @@ class Article(pipermail.Article):
if subject:
if config.ARCHIVER_OBSCURES_EMAILADDRS:
with i18n.using_language(self._lang):
- atmark = unicode(_(' at '), Utils.GetCharSet(self._lang))
+ atmark = _(' at ')
subject = re.sub(r'([-+,.\w]+)@([-+.\w]+)',
'\g<1>' + atmark + '\g<2>', subject)
self.decoded['subject'] = subject
@@ -443,7 +418,7 @@ class Article(pipermail.Article):
if config.ARCHIVER_OBSCURES_EMAILADDRS:
# Point the mailto url back to the list
author = re.sub('@', _(' at '), self.author)
- emailurl = self._mlist.GetListEmail()
+ emailurl = self._mlist.posting_address
else:
author = self.author
emailurl = self.email
@@ -451,7 +426,7 @@ class Article(pipermail.Article):
d["email_url"] = url_quote(emailurl)
d["datestr_html"] = self.quote(i18n.ctime(int(self.date)))
d["body"] = self._get_body()
- d['listurl'] = self._mlist.GetScriptURL('listinfo', absolute=1)
+ d['listurl'] = self._mlist.script_url('listinfo')
d['listname'] = self._mlist.real_name
d['encoding'] = ''
charset = Utils.GetCharSet(self._lang)
@@ -546,7 +521,7 @@ class Article(pipermail.Article):
body = unicode(body, cset, 'replace')
if config.ARCHIVER_OBSCURES_EMAILADDRS:
with i18n.using_language(self._lang):
- atmark = unicode(_(' at '), cset)
+ atmark = _(' at ')
body = re.sub(r'([-+,.\w]+)@([-+.\w]+)',
'\g<1>' + atmark + '\g<2>', body)
# Return body to character set of article.
@@ -650,7 +625,7 @@ class HyperArchive(pipermail.T):
with i18n.using_language(mlist.preferred_language):
d = {"lastdate": quotetime(self.lastdate),
"archivedate": quotetime(self.archivedate),
- "listinfo": mlist.GetScriptURL('listinfo', absolute=1),
+ "listinfo": mlist.script_url('listinfo'),
"version": self.version,
}
i = {"thread": _("thread"),
@@ -679,7 +654,7 @@ class HyperArchive(pipermail.T):
d = {"listname": html_quote(mlist.real_name, self.lang),
"archtype": self.type,
"archive": self.volNameToDesc(self.archive),
- "listinfo": mlist.GetScriptURL('listinfo', absolute=1),
+ "listinfo": mlist.script_url('listinfo'),
"firstdate": quotetime(self.firstdate),
"lastdate": quotetime(self.lastdate),
"size": self.size,
@@ -710,7 +685,7 @@ class HyperArchive(pipermail.T):
listname = mlist.fqdn_listname
mbox = os.path.join(mlist.archive_dir()+'.mbox', listname+'.mbox')
d = {"listname": mlist.real_name,
- "listinfo": mlist.GetScriptURL('listinfo', absolute=1),
+ "listinfo": mlist.script_url('listinfo'),
"fullarch": '../%s.mbox/%s.mbox' % (listname, listname),
"size": sizeof(mbox, mlist.preferred_language),
'meta': '',
diff --git a/mailman/Archiver/pipermail.py b/mailman/Archiver/pipermail.py
index 1483b5c97..a7c4e3a98 100644
--- a/mailman/Archiver/pipermail.py
+++ b/mailman/Archiver/pipermail.py
@@ -13,13 +13,13 @@ from cStringIO import StringIO
from email.Utils import parseaddr, parsedate_tz, mktime_tz, formatdate
from string import lowercase
-__version__ = '0.10 (Mailman edition)'
+__version__ = '0.11 (Mailman edition)'
VERSION = __version__
CACHESIZE = 100 # Number of slots in the cache
-from Mailman import Errors
-from Mailman.Mailbox import ArchiverMailbox
-from Mailman.i18n import _
+from mailman import Errors
+from mailman.Mailbox import ArchiverMailbox
+from mailman.i18n import _
SPACE = ' '