"""Configuration objects for the MUFF Engine"""
-# Copyright (c) 2005 mudpy, Jeremy Stanley <fungi@yuggoth.org>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above
-# copyright notice, this list of conditions and the following
-# disclaimer in the documentation and/or other materials provided
-# with the distribution.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-# POSSIBILITY OF SUCH DAMAGE.
-
+# Copyright (c) 2005 mudpy, Jeremy Stanley <fungi@yuggoth.org>, all rights reserved.
+# Licensed per terms in the LICENSE file distributed with this software.
+# muff configuration files use the ini format supported by ConfigParser
import ConfigParser
-import string
+# need os for testing whether the config file exists and is readable
+import os
+
+# hack to load all modules in teh muff package
import muff
for module in muff.__all__:
exec("import " + module)
-config_data = ConfigParser.SafeConfigParser()
+# list of places to look for the config
config_dirs = [".", "./etc", "/usr/local/muff", "/usr/local/muff/etc", "/etc/muff", "/etc" ]
+
+# name of the config file
config_name = "muff.conf"
-config_files = []
+
+# find the config file
for each_dir in config_dirs:
- config_files.append(each_dir + "/" + config_name)
-config_data.read(config_files)
+ config_file = each_dir + "/" + config_name
+ if os.access(config_file, os.R_OK): break
+
+# read the config
+config_data = ConfigParser.SafeConfigParser()
+config_data.read(config_file)
+
+def get(section, option):
+ """Convenience function to get configuration data."""
+ return config_data.get(section, option)
+
+def getfloat(section, option):
+ "Convenience function to get floating-point configuration data."""
+ return config_data.getfloat(section, option)
+
+def getint(section, option):
+ """Convenience function to get integer configuration data."""
+ return config_data.getint(section, option)
+
+def set(section, option, value):
+ """Convenienve function to set miscellaneous configuration data."""
+ return muffmisc.setlong(config_data, section, option, value)