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