Source code for dt4test.lib.config_ini

## Author: charisma
## Birthday: 2021-12-03
## Test under: py3.8
## ConfigParser 在 py2 和 py3 中是不一样的
###################################

import os
import configparser

from .helper import Helper
from .logger import Logger

log = Logger().get_logger(__name__)


[docs]class ConfigIni(Helper): """ INI 格式的配置文件的处理,get ,set ,if exists """
[docs] def set_item(self, filename, section, item, value, add_new=False): """ | 设置配置文件中的配置项 | :param filename: 配置文件名 | :param section: 配置段 | :param item: 配置项 | :param value: 配置值 | :return: value OR "" """ if not os.path.exists(filename): log.error("找不到配置文件: {}".format(filename)) raise FileNotFoundError("{}".format(filename)) config = configparser.ConfigParser() config.read_file(open(filename)) log.info("修改配置:file:{},section:{},item:{},value:{}".format(filename, section, item, value)) if not config.has_section(section) and not add_new: log.info("没有此Section: {}".format(section)) raise ValueError("没有此Section: {}".format(section)) if not config.has_section(section) and add_new: log.info("增加Section: {}".format(section)) config.add_section(section) if not config.has_option(section, item) and not add_new: log.info("section:{} 没有此item: {}".format(section, item)) raise ValueError("section:{} 没有此item: {}".format(section, item)) if not config.has_option(section, item) and add_new: config[section][item] = value with open(filename, 'w') as configfile: config.write(configfile) return value
[docs] def get_item(self, filename, section, item): """ | 取得配置项的值 | filename: 配置文件名 | section: INI 配置文件的section | item: Section下面的 配置项 | :return: value OR '' """ if not os.path.exists(filename): log.error("找不到配置文件: {}".format(filename)) raise FileNotFoundError("{}".format(filename)) config = configparser.ConfigParser() config.read_file(open(filename)) log.info("取得配置:file:{},section:{},item:{}".format(filename, section, item)) return config.get(section, item, fallback='')
[docs] def item_should_exists(self, filename, section, item): """ | 配置项应该存在 | filename: 配置文件名 | section: INI配置文件中的Section | item: 配置项 | :return: True OR False """ if not os.path.exists(filename): log.error("找不到配置文件: {}".format(filename)) raise FileNotFoundError("{}".format(filename)) config = configparser.ConfigParser() config.read_file(open(filename)) return config.has_option(section, item)
[docs] def item_should_not_exists(self, filename, section, item): """ | 判断配置项不应该存在 | filename: 配置文件名 | section: INI配置文件中的Section | item: 配置项 | :return: True OR False """ return not self.item_should_exists(filename, section, item)
[docs] def get_variables(self, filename): """ | 取得所有配置项目的值 | filename: 配置文件 | :return: varialbles{"section.key":value} """ config = configparser.ConfigParser() config.read_file(open(filename)) variables = {} for section in config.sections(): for key, value in config.items(section): var = "%s.%s" % (section, key) variables[var] = value return variables
def has_section(self, conf_file, section): config = configparser.ConfigParser() config.read_file(open(conf_file)) return config.has_section(section)
[docs] def get_sections(self, conf_file): """ 返回 ``sections`` 列表 """ config = configparser.ConfigParser() config.read_file(open(conf_file)) return config.sections()
def add_section(self, conf_file, section): config = configparser.ConfigParser() config.read_file(open(conf_file)) return config.add_section(section) def add_item(self, conf_file, section, item, value): self.set_item(conf_file, section, item, value, add_new=True)