summaryrefslogtreecommitdiff
path: root/Mailman/bin
diff options
context:
space:
mode:
authorbwarsaw2007-01-18 06:29:42 +0000
committerbwarsaw2007-01-18 06:29:42 +0000
commit372d4c2fdf072f6bfedca5fc84a2d5bb427418e6 (patch)
tree594db647158d8156f51ea6d05aba093f29ae061e /Mailman/bin
parent1e63bc4a3b6d9197e66f57e11f4b6733a3b324dd (diff)
downloadmailman-372d4c2fdf072f6bfedca5fc84a2d5bb427418e6.tar.gz
mailman-372d4c2fdf072f6bfedca5fc84a2d5bb427418e6.tar.zst
mailman-372d4c2fdf072f6bfedca5fc84a2d5bb427418e6.zip
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.
Diffstat (limited to 'Mailman/bin')
-rw-r--r--Mailman/bin/import.py5
-rw-r--r--Mailman/bin/mailmanctl.py5
-rw-r--r--Mailman/bin/testall.py6
3 files changed, 8 insertions, 8 deletions
diff --git a/Mailman/bin/import.py b/Mailman/bin/import.py
index e9171f73a..023ae1aba 100644
--- a/Mailman/bin/import.py
+++ b/Mailman/bin/import.py
@@ -223,7 +223,10 @@ def create(all_listdata):
'filter_filename_extensions',
'pass_filename_extensions'):
value = value.splitlines()
- setattr(mlist, option, value)
+ if option == 'available_languages':
+ mlist.set_languages(*value)
+ else:
+ setattr(mlist, option, value)
for member in list_roster:
mid = member['id']
if VERBOSE:
diff --git a/Mailman/bin/mailmanctl.py b/Mailman/bin/mailmanctl.py
index 2c79797d8..6d3636501 100644
--- a/Mailman/bin/mailmanctl.py
+++ b/Mailman/bin/mailmanctl.py
@@ -45,7 +45,6 @@ DOT = '.'
# needn't be (much) longer than SNOOZE. We pad it 6 hours just to be safe.
LOCK_LIFETIME = Defaults.days(1) + Defaults.hours(6)
SNOOZE = Defaults.days(1)
-MAX_RESTARTS = 10
@@ -465,10 +464,10 @@ Master qrunner detected subprocess exit
# See if we've reached the maximum number of allowable restarts
if exitstatus <> signal.SIGINT:
restarts += 1
- if restarts > MAX_RESTARTS:
+ if restarts > config.MAX_RESTARTS:
qlog.info("""\
Qrunner %s reached maximum restart limit of %d, not restarting.""",
- qrname, MAX_RESTARTS)
+ qrname, config.MAX_RESTARTS)
restarting = ''
# Now perhaps restart the process unless it exited with a
# SIGTERM or we aren't restarting.
diff --git a/Mailman/bin/testall.py b/Mailman/bin/testall.py
index 6539e6e55..61fa98dd8 100644
--- a/Mailman/bin/testall.py
+++ b/Mailman/bin/testall.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2006 by the Free Software Foundation, Inc.
+# Copyright (C) 2001-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
@@ -24,7 +24,6 @@ import optparse
import unittest
from Mailman import Version
-from Mailman import loginit
from Mailman.i18n import _
from Mailman.initialize import initialize
@@ -138,10 +137,9 @@ def main():
global basedir
parser, opts, args = parseargs()
- initialize(opts.config)
+ initialize(opts.config, propagate_logs=opts.stderr)
if not args:
args = ['.']
- loginit.initialize(propagate=opts.stderr)
import Mailman
basedir = os.path.dirname(Mailman.__file__)