Source code for settings
"""
Basic settings loader that provides easy to use functionality to load from simple
configuration files that have take the following form on every line:
* Option=Yes
* Number=20
* String=Whatever
Copyright (c) 2013 Robert MacGregor
This software is licensed under the GNU General
Public License version 3. Please refer to gpl.txt
for more information.
"""
import string
[docs]class Settings:
""" The Settings loader class provides simple functionality to load from simple configuration files. """
_settings_entries = None
_yes = ['1', 'true', 'y', 'yes', 'enable', 'toggle', 'enabled']
[docs] def __init__(self, target_file):
""" Initializes an instance of the Settings loader. """
self._settings_entries = { }
self.load(target_file)
[docs] def load(self, target_file):
""" Loads a configuration file from the hard disk. """
try:
file_handle = open(target_file, 'r')
except IOError:
return
for line_data in file_handle:
preference_data = string.split(line_data, '=')
line_data = line_data.lstrip()
if (len(preference_data) == 2):
data = preference_data[1]
self._settings_entries[preference_data[0]] = data[:len(data)].replace('\n','')
# TODO: Make this actually do some work to make post-fix comments work ...
elif(line_data.find('#') and line_data != ''):
continue
file_handle.close()
[docs] def get_indices(self):
""" Returns all known indices. This is a list of the indices you would use in :func:`get_index`. """
return self._settings_entries.keys()
[docs] def get_index(self, index=None, datatype=None):
""" Returns a loaded configuration setting from the Settings loader.
Keyword arguments:
* index -- The name of the setting that is to be loaded from the file.
* datatype -- The datatype that is supposed to be used to represent this setting in the return value.
"""
if(index in self._settings_entries):
entries = self._settings_entries
if (datatype is bool):
if (string.lower(self._settings_entries[index]) in self._yes):
return True
else:
return False
else:
return datatype(entries[index])
else:
return None