configurationengine/source/cone/public/settings.py
changeset 0 2e8eeb919028
--- /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