yiningmao's picture
Upload 34 files
c5db72e
import os
from collections import OrderedDict
from configparser import ConfigParser
class Config:
def __init__(self, main_conf_path):
self.main_conf_path = main_conf_path
self.main_config = self.read_config(os.path.join(main_conf_path, 'main_config.cfg'))
def read_config(self, conf_path):
conf_dict = OrderedDict()
config = ConfigParser()
config.read(conf_path)
for section in config.sections():
section_config = OrderedDict(config[section].items())
conf_dict[section] = self.type_ensurance(section_config)
self.__dict__.update((k, v) for k, v in conf_dict[section].items())
return conf_dict
def ensure_value_type(self, v):
BOOLEAN = {'false': False, 'False': False,
'true': True, 'True': True}
if isinstance(v, str):
try:
value = eval(v)
if not isinstance(value, (str, int, float, list, tuple)):
value = v
except:
if v in BOOLEAN:
v = BOOLEAN[v]
value = v
else:
value = v
return value
def type_ensurance(self, config):
BOOLEAN = {'false': False, 'False': False,
'true': True, 'True': True}
for k, v in config.items():
try:
value = eval(v)
if not isinstance(value, (str, int, float, list, tuple)):
value = v
except:
if v in BOOLEAN:
v = BOOLEAN[v]
value = v
config[k] = value
return config
def get_param(self, section, param):
if section in self.main_config:
section = self.main_config[section]
else:
raise NameError("There are not the parameter named '%s'" % section)
if param in section:
value = section[param]
else:
raise NameError("There are not the parameter named '%s'" % param)
return value
def update_params(self, params):
# for now, assume 'params' is dictionary
for k, v in params.items():
updated=False
for section in self.main_config:
if k in self.main_config[section]:
self.main_config[section][k] = self.ensure_value_type(v)
self.__dict__[k] = self.main_config[section][k]
updated = True
break
if not updated:
# raise ValueError
print('Parameter not updated. \'%s\' not exists.' % k)
def save(self, base_dir):
def helper(section_k, section_v):
sec_str = '[%s]\n' % section_k
for k, v in section_v.items():
sec_str += '%s=%s\n' % (str(k), str(v))
sec_str += '\n'
return sec_str
# save main config
main_conf_str =''
for section in self.main_config:
main_conf_str += helper(section, self.main_config[section])
with open(os.path.join(base_dir, 'main_config.cfg'), 'wt') as f:
f.write(main_conf_str)
print('main config saved in %s' % base_dir)
def __getitem__(self, item):
if not isinstance(item, str):
raise TypeError("index must be a str")
if item in self.main_config:
section = self.main_config[item]
else:
raise NameError("There are not the parameter named '%s'" % item)
return section
def __str__(self):
config_str = '\n'
config_str += '>>>>> Main Config\n'
for section in self.main_config:
config_str += '[%s]\n' % section
config_str += '\n'.join(['{}: {}'.format(k, self.main_config[section][k]) for k in self.main_config[section]])
config_str += '\n\n'
return config_str
if __name__ == '__main__':
param = Config('../main_config.cfg')
print(param)