Add Debian directory
[mspang/vmailman.git] / debian / unicodify_archives.py
1 #! /usr/bin/python
2 #
3 # Copyright (C) 2007 Lionel Elie Mamane <lmamane@debian.org>
4 #
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
9
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software 
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
19 """Convert a list's archive databases to unicode where appropriate
20
21 This script is intended to be run as a bin/withlist script, i.e.
22
23 % bin/withlist -l -r unicodify_archives <mylist>
24 """
25
26 import paths
27 import time
28 from Mailman.i18n import _
29 from Mailman import mm_cfg
30
31 def unicodify_string(s):
32     if isinstance(s,unicode):
33         return s
34     elif isinstance(s,str):
35         try:
36             return s.decode()
37         except UnicodeDecodeError:
38             pass
39         try:
40             return s.decode('utf-8')
41         except UnicodeDecodeError:
42             pass
43         return s.decode('windows-1252', 'replace')
44
45 def unicodify_fst(t):
46     l = list(t[1:])
47     l.insert(0, unicodify_string(t[0]))
48     return tuple(l)
49
50 def unicodify_archives(mlist):
51     # Only act if we are using the internal archiver
52     if mm_cfg.PUBLIC_EXTERNAL_ARCHIVER:
53         return
54     else:
55         from Mailman.Archiver import HyperArch
56         h = HyperArch.HyperArchive(mlist)
57         for archive in h.archives:
58             for hdr in ('subject', 'author'):
59                 h.database.mapKeys(unicodify_fst, archive, hdr)
60         h.close()
61
62
63 \f
64 if __name__ == '__main__':
65     print _(__doc__.replace('%', '%%'))