Исходный код app.utilites.conf_driver_ini

from os import path as opath
import configparser


[документация]class ConfigDriverIni: def __init__(self, file_name=''): self._file_name = '' self._parser = None # configparser.ConfigParser if file_name: self.set_file(file_name)
[документация] def get(self, key_list): val = None self._init_parser() # по идее первый элемент ключа это секция if self._parser.has_section(key_list[0]): val = self._section_to_dict(self._parser[key_list[0]]) t = key_list[1:] for k in t: if k not in val: k = k.lower() if isinstance(val, dict) and k in val: val = val[k] return val
[документация] def set_file(self, file_name): if opath.exists(file_name) and opath.isfile(file_name): self._file_name = file_name
def _init_parser(self): if self._parser is None: self._parser = configparser.ConfigParser() self._parser.optionxform = str self._parser.read(self._file_name, encoding='utf8')
[документация] def to_dict(self): data = None if opath.exists(self._file_name) and opath.isfile(self._file_name): base_name = opath.basename(self._file_name) fn_list = base_name.split('.') if 'ini' == fn_list[1]: self._init_parser() data = {} for section in self._parser: # ConfigParser add DEFAULT section # if DEFAULT -> continue if 'DEFAULT' == section: continue data[section] = self._section_to_dict(self._parser[section]) return data
def _section_to_dict(self, section): d = {} for k in section: if self._option_is_section(k): ssk = self._parse_section_key(k) if ssk[0] not in d: d[ssk[0]] = {} if ssk[1] not in d[ssk[0]]: d[ssk[0]][ssk[1]] = {} d[ssk[0]][ssk[1]] = section[k] else: d[k] = section[k] return d @staticmethod def _option_is_section(name): return -1 < name.find('[') and name.endswith(']') @staticmethod def _parse_section_key(section_key): ssk = section_key.split('[') ssk[1] = ssk[1].rstrip(']') return ssk