File: unicodify_archives.py

package info (click to toggle)
mailman 1%3A2.1.9-7
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 29,236 kB
  • ctags: 2,701
  • sloc: python: 22,177; sh: 1,275; makefile: 1,082; perl: 614; ansic: 356
file content (65 lines) | stat: -rw-r--r-- 1,985 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#! /usr/bin/python
#
# Copyright (C) 2007 Lionel Elie Mamane <lmamane@debian.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

"""Convert a list's archive databases to unicode where appropriate

This script is intended to be run as a bin/withlist script, i.e.

% bin/withlist -l -r unicodify_archives <mylist>
"""

import paths
import time
from Mailman.i18n import _
from Mailman import mm_cfg

def unicodify_string(s):
    if isinstance(s,unicode):
        return s
    elif isinstance(s,str):
        try:
            return s.decode()
        except UnicodeDecodeError:
            pass
        try:
            return s.decode('utf-8')
        except UnicodeDecodeError:
            pass
        return s.decode('windows-1252', 'replace')

def unicodify_fst(t):
    l = list(t[1:])
    l.insert(0, unicodify_string(t[0]))
    return tuple(l)

def unicodify_archives(mlist):
    # Only act if we are using the internal archiver
    if mm_cfg.PUBLIC_EXTERNAL_ARCHIVER:
        return
    else:
        from Mailman.Archiver import HyperArch
        h = HyperArch.HyperArchive(mlist)
        for archive in h.archives:
            for hdr in ('subject', 'author'):
                h.database.mapKeys(unicodify_fst, archive, hdr)
        h.close()



if __name__ == '__main__':
    print _(__doc__.replace('%', '%%'))