From 372d4c2fdf072f6bfedca5fc84a2d5bb427418e6 Mon Sep 17 00:00:00 2001
From: bwarsaw
Date: Thu, 18 Jan 2007 06:29:42 +0000
Subject: Rework MailList.available_languages so that we don't need to use a
PickleType column in the database for this list of strings. We use
SQLAlchemy's many-to-many relationship, however because of this, you cannot
simply append new unicodes to .available_languages. You need to wrap the
language code in a Language instance and append that instance to the list.
In order to handle this, I added a property MailList.language_codes which
returns a list of the code strings (not Language instances). Also new are
MailList.set_languages() for setting (i.e. overriding) the set of available
languages for the list; and add_language() which takes a single language code,
wraps it, and appends it. The code does not and should not use
.available_languages directory any more.
MailList.GetAvailableLanguages() is removed. The 'available_languages' column
is removed from the Listdata table.
Add a getValue() to Mailman.Gui.Language in order to unwrap the language codes
stored in the database's association table. Modify _setValue() to do the
wrapping.
In dbcontext.py, don't import * from the sqlalchemy package. It contains a
'logging' name which is not the standard Python logging package. I also added
essentially a bag of attributes class called Tables which will hold references
to all the SA tables that are created. Update the make_table() API to take an
instance of Tables.
Added a close() method to DBContext. This is needed for the updated unit test
suite.
Changed bin/import.py so that when available_languages is being set, it calls
MailList.set_languages() instead of trying to set that attribute directly.
Updated some language idioms while I was at it.
More eradication of mm_cfg in favor of the config object and the Defaults
module.
In testall.py, call initialize() instead of loginit.initialize().
Promote MAX_RESTARTS into a Defaults.py.in variable. This is because the unit
tests will knock that value down to something not so annoying should one of
the qrunner-required tests traceback.
Several other important changes to the unit test suite (which now completely
succeeds again!):
- Set the uid and gid of the temporary mailman.cfg and tmp*.db files to the
Mailman user and group as specified in the config object.
- Make sure that all of the tests point to a SQLite database file that was
created with the tempfile module. This way we don't pollute our main
database with data that is getting created during the unit tests.
- In the TestBase.setUp() method, be sure to close the existing dbcontext,
clear out the mappers, and then reconnect the dbcontext with the new
SQLALCHEMY_ENGINE_URL pointing to the tempfile. However, we don't need to
reload the MailList instance any more.
- Make all tests work, except for the tests that require crypt. That upgrade
path will not be available in this version of Mailman.
---
Mailman/HTMLFormatter.py | 42 ++++++++++++++++++++++--------------------
1 file changed, 22 insertions(+), 20 deletions(-)
(limited to 'Mailman/HTMLFormatter.py')
diff --git a/Mailman/HTMLFormatter.py b/Mailman/HTMLFormatter.py
index f61ccbb82..2283f84ed 100644
--- a/Mailman/HTMLFormatter.py
+++ b/Mailman/HTMLFormatter.py
@@ -1,4 +1,4 @@
-# Copyright (C) 1998-2006 by the Free Software Foundation, Inc.
+# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -20,9 +20,10 @@
import re
import time
+from Mailman import Defaults
from Mailman import MemberAdaptor
from Mailman import Utils
-from Mailman import mm_cfg
+from Mailman.configuration import config
from Mailman.htmlformat import *
from Mailman.i18n import _
@@ -62,7 +63,7 @@ class HTMLFormatter:
def FormatUsers(self, digest, lang=None):
if lang is None:
lang = self.preferred_language
- conceal_sub = mm_cfg.ConcealSubscription
+ conceal_sub = Defaults.ConcealSubscription
people = []
if digest:
digestmembers = self.getDigestMemberKeys()
@@ -102,7 +103,7 @@ class HTMLFormatter:
return concealed + UnorderedList(*tuple(items)).Format()
def FormatOptionButton(self, option, value, user):
- if option == mm_cfg.DisableDelivery:
+ if option == Defaults.DisableDelivery:
optval = self.getDeliveryStatus(user) <> MemberAdaptor.ENABLED
else:
optval = self.getMemberOption(user, option)
@@ -110,16 +111,17 @@ class HTMLFormatter:
checked = ' CHECKED'
else:
checked = ''
- name = {mm_cfg.DontReceiveOwnPosts : 'dontreceive',
- mm_cfg.DisableDelivery : 'disablemail',
- mm_cfg.DisableMime : 'mime',
- mm_cfg.AcknowledgePosts : 'ackposts',
- mm_cfg.Digests : 'digest',
- mm_cfg.ConcealSubscription : 'conceal',
- mm_cfg.SuppressPasswordReminder : 'remind',
- mm_cfg.ReceiveNonmatchingTopics : 'rcvtopic',
- mm_cfg.DontReceiveDuplicates : 'nodupes',
- }[option]
+ name = {
+ Defaults.DontReceiveOwnPosts : 'dontreceive',
+ Defaults.DisableDelivery : 'disablemail',
+ Defaults.DisableMime : 'mime',
+ Defaults.AcknowledgePosts : 'ackposts',
+ Defaults.Digests : 'digest',
+ Defaults.ConcealSubscription : 'conceal',
+ Defaults.SuppressPasswordReminder : 'remind',
+ Defaults.ReceiveNonmatchingTopics : 'rcvtopic',
+ Defaults.DontReceiveDuplicates : 'nodupes',
+ }[option]
return '' % (
name, value, checked)
@@ -374,7 +376,7 @@ class HTMLFormatter:
member_len = len(self.getRegularMemberKeys())
# If only one language is enabled for this mailing list, omit the
# language choice buttons.
- if len(self.GetAvailableLanguages()) == 1:
+ if len(self.language_codes) == 1:
listlangs = _(Utils.GetLanguageDescr(self.preferred_language))
else:
listlangs = self.GetLangSelectBox(lang).Format()
@@ -401,8 +403,8 @@ class HTMLFormatter:
'' : self.host_name,
'' : listlangs,
}
- if mm_cfg.IMAGE_LOGOS:
- d[''] = mm_cfg.IMAGE_LOGOS + mm_cfg.SHORTCUT_ICON
+ if config.IMAGE_LOGOS:
+ d[''] = config.IMAGE_LOGOS + config.SHORTCUT_ICON
return d
def GetAllReplacements(self, lang=None):
@@ -421,14 +423,14 @@ class HTMLFormatter:
if lang is None:
lang = self.preferred_language
# Figure out the available languages
- values = self.GetAvailableLanguages()
- legend = map(_, map(Utils.GetLanguageDescr, values))
+ values = self.language_codes
+ legend = [Utils.GetLanguageDescr(code) for code in values]
try:
selected = values.index(lang)
except ValueError:
try:
selected = values.index(self.preferred_language)
except ValueError:
- selected = mm_cfg.DEFAULT_SERVER_LANGUAGE
+ selected = config.DEFAULT_SERVER_LANGUAGE
# Return the widget
return SelectOptions(varname, values, legend, selected)
--
cgit v1.2.3-70-g09d2