diff options
| author | bwarsaw | 2007-01-02 02:42:34 +0000 |
|---|---|---|
| committer | bwarsaw | 2007-01-02 02:42:34 +0000 |
| commit | d7da90ebc8aeee180ba470c002f7e37ef7df1089 (patch) | |
| tree | 8e5cb355d59b880a171078d9425ebf4c6cd325d5 | |
| parent | 7971cdb1d36862db483547c974f1e2e40980f3d3 (diff) | |
| download | mailman-d7da90ebc8aeee180ba470c002f7e37ef7df1089.tar.gz mailman-d7da90ebc8aeee180ba470c002f7e37ef7df1089.tar.zst mailman-d7da90ebc8aeee180ba470c002f7e37ef7df1089.zip | |
| -rw-r--r-- | Mailman/Queue/HTTPRunner.py | 6 | ||||
| -rw-r--r-- | Mailman/bin/export.py | 11 | ||||
| -rw-r--r-- | Mailman/bin/import.py | 31 |
3 files changed, 31 insertions, 17 deletions
diff --git a/Mailman/Queue/HTTPRunner.py b/Mailman/Queue/HTTPRunner.py index e2c053629..32620f458 100644 --- a/Mailman/Queue/HTTPRunner.py +++ b/Mailman/Queue/HTTPRunner.py @@ -1,4 +1,4 @@ -# Copyright (C) 2006 by the Free Software Foundation, Inc. +# Copyright (C) 2006-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 @@ -63,6 +63,8 @@ server = make_server(config.HTTP_HOST, config.HTTP_PORT, qlog.info('HTTPRunner qrunner started.') try: server.serve_forever() -except: +# Do it this way because of exception hierarchy changes in Python 2.5. XXX +# Change this to BaseException for Python 2.5. +except (Exception, KeyboardInterrupt): qlog.exception('HTTPRunner qrunner exiting.') raise diff --git a/Mailman/bin/export.py b/Mailman/bin/export.py index 2bcdbf667..d83959279 100644 --- a/Mailman/bin/export.py +++ b/Mailman/bin/export.py @@ -1,4 +1,4 @@ -# Copyright (C) 2006 by the Free Software Foundation, Inc. +# Copyright (C) 2006-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 @@ -21,6 +21,7 @@ import os import sys import sha import base64 +import codecs import datetime import optparse @@ -143,7 +144,7 @@ class XMLDumper(object): print >> self._fp, '<%s%s/>' % (_name, attrs) else: # The value might contain angle brackets. - value = escape(str(_value)) + value = escape(unicode(_value)) print >> self._fp, '<%s%s>%s</%s>' % (_name, attrs, value, _name) def _do_list_categories(self, mlist, k, subcat=None): @@ -222,7 +223,7 @@ class XMLDumper(object): }.get(mlist.getDeliveryStatus(member), 'unknown') if member in digesters: - if mlist.getMemberOption('plain'): + if mlist.getMemberOption(member, Defaults.DisableMime): attrs['delivery'] = 'plain' else: attrs['delivery'] = 'mime' @@ -353,9 +354,11 @@ def main(): config.load(opts.config) if opts.outputfile in (None, '-'): + # This will fail if there are characters in the output incompatible + # with system encoding. fp = sys.stdout else: - fp = open(opts.outputfile, 'w') + fp = codecs.open(opts.outputfile, 'w', 'utf-8') try: dumper = XMLDumper(fp) diff --git a/Mailman/bin/import.py b/Mailman/bin/import.py index 3d1210c8f..68876def1 100644 --- a/Mailman/bin/import.py +++ b/Mailman/bin/import.py @@ -1,4 +1,4 @@ -# Copyright (C) 2006 by the Free Software Foundation, Inc. +# Copyright (C) 2006-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 @@ -18,6 +18,7 @@ """Import the XML representation of a mailing list.""" import sys +import codecs import optparse import traceback @@ -25,6 +26,7 @@ from xml.dom import minidom from xml.parsers.expat import ExpatError from Mailman import Defaults +from Mailman import Errors from Mailman import MemberAdaptor from Mailman import Utils from Mailman import Version @@ -135,8 +137,9 @@ def parse_roster(node): 'false': False, }.get(nodetext(subnode).lower(), False) elif attr == 'topics': - # XXX value = [] + for subsubnode in nodegen(subnode): + value.append(nodetext(subsubnode)) else: value = nodetext(subnode) member[attr] = value @@ -149,7 +152,7 @@ def load(fp): try: doc = minidom.parse(fp) except ExpatError: - print _('Expat error in file: %s', fp.name) + print _('Expat error in file: $fp.name') traceback.print_exc() sys.exit(1) doc.normalize() @@ -190,10 +193,14 @@ def create(all_listdata): print _('Skipping already existing list: $fqdn_listname') continue mlist = MailList() - mlist.Create(fqdn_listname, list_config['owner'][0], - list_config['password']) - if VERBOSE: - print _('Creating mailing list: $fqdn_listname') + try: + if VERBOSE: + print _('Creating mailing list: $fqdn_listname') + mlist.Create(fqdn_listname, list_config['owner'][0], + list_config['password']) + except Errors.BadDomainSpecificationError: + print _('List is not in a supported domain: $fqdn_listname') + continue # Save the list creation, then unlock and relock the list. This is so # that we use normal SQLAlchemy transactions to manage all the # attribute and membership updates. Without this, no transaction will @@ -226,7 +233,9 @@ def create(all_listdata): mlist.setMemberOption(mid, Defaults.OPTINFO[opt], member[opt]) - # XXX topics + topics = member.get('topics') + if topics: + mlist.setMemberTopics(mid, topics) mlist.Save() finally: mlist.Unlock() @@ -271,12 +280,12 @@ def main(): parser, opts, args = parseargs() initialize(opts.config) VERBOSE = opts.verbose - + if opts.inputfile in (None, '-'): fp = sys.stdin else: - fp = open(opts.inputfile) - + fp = open(opts.inputfile, 'r') + try: listbags = load(fp) create(listbags) |
