| @@ -13,103 +13,95 @@ class ConfigSaver(object): | |||||
| if not os.path.exists(self.file_path): | if not os.path.exists(self.file_path): | ||||
| raise FileNotFoundError("file {} NOT found!".__format__(self.file_path)) | raise FileNotFoundError("file {} NOT found!".__format__(self.file_path)) | ||||
| """ | |||||
| def save_section(self, section_name, section): | |||||
| cfg = configparser.ConfigParser() | |||||
| if not os.path.exists(self.file_path): | |||||
| raise FileNotFoundError("config file {} not found. ".format(self.file_path)) | |||||
| cfg.read(self.file_path) | |||||
| if section_name not in cfg: | |||||
| cfg.add_section(section_name) | |||||
| gen_sec = cfg[section_name] | |||||
| for key in section: | |||||
| if key in gen_sec.keys(): | |||||
| try: | |||||
| val = json.load(gen_sec[key]) | |||||
| except Exception as e: | |||||
| print("cannot load attribute %s in section %s" | |||||
| % (key, section_name)) | |||||
| try: | |||||
| assert section[key] == val | |||||
| except Exception as e: | |||||
| logger = create_logger(__name__, "./config_saver.log") | |||||
| logger.warning("this is a warning #TODO") | |||||
| cfg.set(section_name,key, section[key]) | |||||
| cfg.write(open(self.file_path, 'w')) | |||||
| """ | |||||
| def _get_section(self, sect_name): | |||||
| """ | |||||
| :param sect_name: the name of section what wants to load | |||||
| :return: the section | |||||
| """ | |||||
| sect = ConfigSection() | |||||
| ConfigLoader(self.file_path).load_config(self.file_path, {sect_name: sect}) | |||||
| return sect | |||||
| def _read_section(self): | |||||
| """ | |||||
| :return: sect_list, sect_key_list | |||||
| sect_list is a list of ConfigSection() | |||||
| sect_key_list is a list of names in sect_list | |||||
| """ | |||||
| sect_name = None | |||||
| sect_list = {} | |||||
| sect_key_list = [] | |||||
| single_section = {} | |||||
| single_section_key = [] | |||||
| with open(self.file_path, 'r') as f: | |||||
| lines = f.readlines() | |||||
| for line in lines: | |||||
| if line.startswith('[') and line.endswith(']\n'): | |||||
| if sect_name is None: | |||||
| pass | |||||
| else: | |||||
| sect_list[sect_name] = single_section, single_section_key | |||||
| single_section = {} | |||||
| single_section_key = [] | |||||
| sect_key_list.append(sect_name) | |||||
| sect_name = line[1: -2] | |||||
| continue | |||||
| if line.startswith('#'): | |||||
| single_section[line] = '#' | |||||
| single_section_key.append(line) | |||||
| continue | |||||
| if line.startswith('\n'): | |||||
| single_section_key.append('\n') | |||||
| continue | |||||
| if '=' not in line: | |||||
| log = create_logger(__name__, './config_saver.log') | |||||
| log.error("can NOT load config file [%s]" % self.file_path) | |||||
| raise RuntimeError("can NOT load config file {}".__format__(self.file_path)) | |||||
| key = line.split('=', maxsplit=1)[0].strip() | |||||
| value = line.split('=', maxsplit=1)[1].strip() + '\n' | |||||
| single_section[key] = value | |||||
| single_section_key.append(key) | |||||
| if sect_name is not None: | |||||
| sect_list[sect_name] = single_section, single_section_key | |||||
| sect_key_list.append(sect_name) | |||||
| return sect_list, sect_key_list | |||||
| def _write_section(self, sect_list, sect_key_list): | |||||
| """ | |||||
| :param sect_list: a list of ConfigSection() need to be writen into file | |||||
| :param sect_key_list: a list of name of sect_list | |||||
| :return: | |||||
| """ | |||||
| with open(self.file_path, 'w') as f: | |||||
| for sect_key in sect_key_list: | |||||
| single_section, single_section_key = sect_list[sect_key] | |||||
| f.write('[' + sect_key + ']\n') | |||||
| for key in single_section_key: | |||||
| if key == '\n': | |||||
| f.write('\n') | |||||
| continue | |||||
| if single_section[key] == '#': | |||||
| f.write(key) | |||||
| continue | |||||
| f.write(key + ' = ' + single_section[key]) | |||||
| f.write('\n') | |||||
| def save_config_file(self, section_name, section): | def save_config_file(self, section_name, section): | ||||
| def get_section(file_path, sect_name): | |||||
| sect = ConfigSection() | |||||
| ConfigLoader(file_path).load_config(file_path, {sect_name: sect}) | |||||
| return sect | |||||
| def read_section(file_path): | |||||
| sect_name = None | |||||
| sect_list = {} | |||||
| sect_key_list = [] | |||||
| single_section = {} | |||||
| single_section_key = [] | |||||
| with open(file_path, 'r') as f: | |||||
| lines = f.readlines() | |||||
| for line in lines: | |||||
| if line.startswith('[') and line.endswith(']\n'): | |||||
| if sect_name is None: | |||||
| pass | |||||
| else: | |||||
| sect_list[sect_name] = single_section, single_section_key | |||||
| single_section = {} | |||||
| single_section_key = [] | |||||
| sect_key_list.append(sect_name) | |||||
| sect_name = line[1: -2] | |||||
| continue | |||||
| if line.startswith('#'): | |||||
| single_section[line] = '#' | |||||
| single_section_key.append(line) | |||||
| continue | |||||
| if line.startswith('\n'): | |||||
| single_section_key.append('\n') | |||||
| continue | |||||
| if '=' not in line: | |||||
| log = create_logger(__name__, './config_saver.log') | |||||
| log.error("can NOT load config file [%s]" % file_path) | |||||
| raise RuntimeError("can NOT load config file {}".__format__(file_path)) | |||||
| key = line.split('=', maxsplit=1)[0].strip() | |||||
| value = line.split('=', maxsplit=1)[1].strip() + '\n' | |||||
| single_section[key] = value | |||||
| single_section_key.append(key) | |||||
| if sect_name is not None: | |||||
| sect_list[sect_name] = single_section, single_section_key | |||||
| sect_key_list.append(sect_name) | |||||
| return sect_list, sect_key_list | |||||
| def write_section(file_path, sect_list, sect_key_list): | |||||
| with open(file_path, 'w') as f: | |||||
| for sect_key in sect_key_list: | |||||
| single_section, single_section_key = sect_list[sect_key] | |||||
| f.write('[' + sect_key + ']\n') | |||||
| for key in single_section_key: | |||||
| if key == '\n': | |||||
| f.write('\n') | |||||
| continue | |||||
| if single_section[key] == '#': | |||||
| f.write(key) | |||||
| continue | |||||
| f.write(key + ' = ' + single_section[key]) | |||||
| f.write('\n') | |||||
| section_file = get_section(self.file_path, section_name) | |||||
| """ | |||||
| :param section_name: the name of section what needs to be changed and saved | |||||
| :param section: the section with key and value what needs to be changed and saved | |||||
| :return: | |||||
| """ | |||||
| section_file = self._get_section(section_name) | |||||
| if len(section_file.__dict__.keys()) == 0:#the section not in file before | if len(section_file.__dict__.keys()) == 0:#the section not in file before | ||||
| with open(self.file_path, 'a') as f: | with open(self.file_path, 'a') as f: | ||||
| f.write('[' + section_name + ']\n') | f.write('[' + section_name + ']\n') | ||||
| @@ -135,7 +127,7 @@ class ConfigSaver(object): | |||||
| if not change_file: | if not change_file: | ||||
| return | return | ||||
| sect_list, sect_key_list = read_section(self.file_path) | |||||
| sect_list, sect_key_list = self._read_section() | |||||
| if section_name not in sect_key_list: | if section_name not in sect_key_list: | ||||
| raise AttributeError() | raise AttributeError() | ||||
| @@ -149,7 +141,4 @@ class ConfigSaver(object): | |||||
| sect[k] = "\"" + sect[k] + "\"" | sect[k] = "\"" + sect[k] + "\"" | ||||
| sect[k] = sect[k] + "\n" | sect[k] = sect[k] + "\n" | ||||
| sect_list[section_name] = sect, sect_key | sect_list[section_name] = sect, sect_key | ||||
| write_section(self.file_path, sect_list, sect_key_list) | |||||
| self._write_section(sect_list, sect_key_list) | |||||