diff -r 000000000000 -r 2e8eeb919028 configurationengine/source/cone/public/settings.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configurationengine/source/cone/public/settings.py Thu Mar 11 17:04:37 2010 +0200 @@ -0,0 +1,92 @@ +# +# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +# All rights reserved. +# This component and the accompanying materials are made available +# under the terms of "Eclipse Public License v1.0" +# which accompanies this distribution, and is available +# at the URL "http://www.eclipse.org/legal/epl-v10.html". +# +# Initial Contributors: +# Nokia Corporation - initial contribution. +# +# Contributors: +# +# Description: +# +import os +import logging +import ConfigParser + +DEFAULT_SECTION = 'DEFAULT' +class ConeSettings(object): + def __init__(self, parser, section=DEFAULT_SECTION): + self.parser = parser + self.section = section + + def get(self, property, default=None, vars=None): + """ + Try to get a single property from the ConeSettings section. The method support the + ConfigParser interpolation of variables and deliver extra variables via the vars param. + + 1. Try to get the property from configured section. + 2. If section is not found try to get it from DEFAULT section. + 3. Still if property is not found return the default values + @param property: the name of the setting property get + @param default: the default value to return if the property is not found from settings + @param vars: a dictionary of variables that are given to the ConfigParser get + for interpolation. e.g. {'output':'testing'}. + + """ + try: + return self.parser.get(self.section, property, False, vars) + # if the section is not found try to use default + except ConfigParser.NoSectionError: + try: + return self.parser.get(DEFAULT_SECTION, property, False, vars) + except ConfigParser.NoOptionError: + if default != None: + return self.parser._interpolate(DEFAULT_SECTION,property,default,vars) + else: + return default + # if the option is not found return the default value + except ConfigParser.NoOptionError: + if default != None: + return self.parser._interpolate(DEFAULT_SECTION,property,default,vars) + else: + return default + #return default + + +class SettingsFactory(object): + configsettings = None + configpath = '' + defaultconfig = 'cone_defaults.cfg' + + @classmethod + def get_defaultconfig_path(cls): + return os.path.join(cls.configpath,cls.defaultconfig) + + @classmethod + def cone_parser(cls): + """ + Get a singleton instance of ConfigParser. + """ + if not cls.configsettings: + cls.configsettings = ConfigParser.ConfigParser() + + try: + cls.configsettings.readfp(open(cls.get_defaultconfig_path())) + except IOError: + logging.getLogger('cone').warning("Could not read default configuration file %s" % cls.get_defaultconfig_path()) + return cls.configsettings + + @classmethod + def clear(cls): + """ + Clear everything back to default so that the next time the settings are re-parsed. + + This method is provided for unit testing purposes. + """ + cls.configsettings = None + cls.configpath = '' + cls.defaultconfig = 'cone_defaults.cfg' \ No newline at end of file