summaryrefslogtreecommitdiff
path: root/Mailman/configuration.py
blob: cf3af03f3242e4eeb5b6e1726d13a075467243f0 (plain)
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# Copyright (C) 2006 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
# 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.

"""Configuration file loading and management."""

import os
import errno

from Mailman import Defaults

_missing = object()



class Configuration(object):
    def load(self, filename=None):
        # Load the configuration from the named file, or if not given, search
        # in VAR_PREFIX for an etc/mailman.cfg file.  If that file is missing,
        # use Mailman/mm_cfg.py for backward compatibility.
        #
        # Whatever you find, create a namespace and execfile that file in it.
        # The values in that namespace are exposed as attributes on this
        # Configuration instance.
        if filename is None:
            filename = os.path.join(Defaults.VAR_PREFIX, 'etc', 'mailman.cfg')
        # Set up the execfile namespace
        ns = Defaults.__dict__.copy()
        # Prune a few things
        del ns['__file__']
        del ns['__name__']
        del ns['__doc__']
        # Attempt our first choice
        path = os.path.abspath(os.path.expanduser(filename))
        try:
            execfile(path, ns, ns)
        except EnvironmentError, e:
            if e.errno <> errno.ENOENT:
                raise
            # The file didn't exist, so try mm_cfg.py
            from Mailman import mm_cfg
            ns = mm_cfg.__dict__.copy()
        # Pull out the defaults
        PREFIX          = ns['PREFIX']
        VAR_PREFIX      = ns['VAR_PREFIX']
        EXEC_PREFIX     = ns['EXEC_PREFIX']
        # Now that we've loaded all the configuration files we're going to
        # load, set up some useful directories.
        self.LIST_DATA_DIR      = os.path.join(VAR_PREFIX, 'lists')
        self.LOG_DIR            = os.path.join(VAR_PREFIX, 'logs')
        self.LOCK_DIR = lockdir = os.path.join(VAR_PREFIX, 'locks')
        self.DATA_DIR = datadir = os.path.join(VAR_PREFIX, 'data')
        self.ETC_DIR = etcdir   = os.path.join(VAR_PREFIX, 'etc')
        self.SPAM_DIR           = os.path.join(VAR_PREFIX, 'spam')
        self.WRAPPER_DIR        = os.path.join(EXEC_PREFIX, 'mail')
        self.BIN_DIR            = os.path.join(PREFIX, 'bin')
        self.SCRIPTS_DIR        = os.path.join(PREFIX, 'scripts')
        self.TEMPLATE_DIR       = os.path.join(PREFIX, 'templates')
        self.MESSAGES_DIR       = os.path.join(PREFIX, 'messages')
        self.PUBLIC_ARCHIVE_FILE_DIR  = os.path.join(VAR_PREFIX,
                                                     'archives', 'public')
        self.PRIVATE_ARCHIVE_FILE_DIR = os.path.join(VAR_PREFIX,
                                                     'archives', 'private')
        # Directories used by the qrunner subsystem
        self.QUEUE_DIR = qdir   = os.path.join(VAR_PREFIX, 'qfiles')
        self.INQUEUE_DIR        = os.path.join(qdir, 'in')
        self.OUTQUEUE_DIR       = os.path.join(qdir, 'out')
        self.CMDQUEUE_DIR       = os.path.join(qdir, 'commands')
        self.BOUNCEQUEUE_DIR    = os.path.join(qdir, 'bounces')
        self.NEWSQUEUE_DIR      = os.path.join(qdir, 'news')
        self.ARCHQUEUE_DIR      = os.path.join(qdir, 'archive')
        self.SHUNTQUEUE_DIR     = os.path.join(qdir, 'shunt')
        self.VIRGINQUEUE_DIR    = os.path.join(qdir, 'virgin')
        self.BADQUEUE_DIR       = os.path.join(qdir, 'bad')
        self.RETRYQUEUE_DIR     = os.path.join(qdir, 'retry')
        self.MAILDIR_DIR        = os.path.join(qdir, 'maildir')
        # Other useful files
        self.PIDFILE                = os.path.join(datadir,
                                                   'master-qrunner.pid')
        self.SITE_PW_FILE           = os.path.join(datadir, 'adm.pw')
        self.LISTCREATOR_PW_FILE    = os.path.join(datadir, 'creator.pw')
        self.CONFIG_FILE            = os.path.join(etcdir, 'mailman.cfg')
        self.LOCK_FILE              = os.path.join(lockdir, 'master-qrunner')
        # Now update our dict so attribute syntax just works
        self.__dict__.update(ns)



config = Configuration()