--- /dev/null
+# Copyright 2019 Nokia
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import configparser
+from yarf.exceptions import ConfigError
+
+
+class INILoader(dict):
+ def __init__(self, inifile, defaults=None, defaultsection=None):
+ super(INILoader, self).__init__(self)
+ self.inifile = inifile
+ self.handlers = 'handlers'
+ self.configparser = configparser.ConfigParser(defaults)
+ self.config = self.configparser.read(inifile)
+ self.defaultsection = defaultsection
+ if inifile not in self.config:
+ raise ConfigError("Failed to read config file: %s" % inifile)
+
+ def get_sections(self):
+ return self.configparser.sections()
+
+ def get_handlers(self, section):
+ return self[section][self.handlers].split(',')
+
+ def __getitem__(self, key):
+ try:
+ return self.configparser[key]
+ except KeyError:
+ raise ConfigError("No such key %s" % key)
+
+ def get(self, key, section=None, type_of_value=str):
+ if section is None and self.defaultsection is not None:
+ section = self.defaultsection
+ else:
+ return None
+
+ if type_of_value is int:
+ return self.configparser.getint(section, key)
+ elif type_of_value is bool:
+ return self.configparser.getboolean(section, key)
+ elif type_of_value is float:
+ return self.configparser.getfloat(section, key)
+ return self.configparser.get(section, key)
+
+ def keys(self):
+ return self.configparser.sections()
+
+ def get_section(self, section, format='list'):
+ if section in self.keys():
+ items = self.configparser.items(section)
+ if format == 'dict':
+ return dict(items)
+ return items
+ return None