summaryrefslogtreecommitdiff
path: root/mailman/initialize.py
diff options
context:
space:
mode:
Diffstat (limited to 'mailman/initialize.py')
-rw-r--r--mailman/initialize.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/mailman/initialize.py b/mailman/initialize.py
new file mode 100644
index 000000000..0c9338128
--- /dev/null
+++ b/mailman/initialize.py
@@ -0,0 +1,78 @@
+# Copyright (C) 2006-2008 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.
+
+"""Initialize all global state.
+
+Every entrance into the Mailman system, be it by command line, mail program,
+or cgi, must call the initialize function here in order for the system's
+global state to be set up properly. Typically this is called after command
+line argument parsing, since some of the initialization behavior is controlled
+by the command line arguments.
+"""
+
+import os
+
+from zope.interface.verify import verifyObject
+
+import mailman.configuration
+import mailman.loginit
+
+from mailman.app.plugins import get_plugin
+from mailman.interfaces import IDatabase
+
+
+
+# These initialization calls are separated for the testing framework, which
+# needs to do some internal calculations after config file loading and log
+# initialization, but before database initialization. Generally all other
+# code will just call initialize().
+
+def initialize_1(config_path, propagate_logs):
+ # By default, set the umask so that only owner and group can read and
+ # write our files. Specifically we must have g+rw and we probably want
+ # o-rwx although I think in most cases it doesn't hurt if other can read
+ # or write the files. Note that the Pipermail archive has more
+ # restrictive permissions in order to handle private archives, but it
+ # handles that correctly.
+ os.umask(007)
+ mailman.configuration.config.load(config_path)
+ # Create the queue and log directories if they don't already exist.
+ mailman.configuration.config.ensure_directories_exist()
+ mailman.loginit.initialize(propagate_logs)
+
+
+def initialize_2(debug=False):
+ database_plugin = get_plugin('mailman.database')
+ # Instantiate the database plugin, ensure that it's of the right type, and
+ # initialize it. Then stash the object on our configuration object.
+ database = database_plugin()
+ verifyObject(IDatabase, database)
+ database.initialize(debug)
+ mailman.configuration.config.db = database
+ # Initialize the rules and chains. Do the imports here so as to avoid
+ # circular imports.
+ from mailman.app.chains import initialize as initialize_chains
+ from mailman.app.rules import initialize as initialize_rules
+ from mailman.app.pipelines import initialize as initialize_pipelines
+ initialize_rules()
+ initialize_chains()
+ initialize_pipelines()
+
+
+def initialize(config_path=None, propagate_logs=False):
+ initialize_1(config_path, propagate_logs)
+ initialize_2()