197 lines
6.8 KiB
Python
197 lines
6.8 KiB
Python
# coding=utf-8
|
||
|
||
import configparser
|
||
import os
|
||
import codecs
|
||
from base_framework.base_config.current_pth import *
|
||
from base_framework.public_tools import log
|
||
|
||
obj_log = log.get_logger()
|
||
|
||
|
||
class ReadConfig:
|
||
"""
|
||
专门读取配置文件的,.ini文件格式
|
||
"""
|
||
|
||
def __init__(self, filename=config_file_path):
|
||
self.config_path = filename
|
||
fd = open(self.config_path, encoding='utf-8')
|
||
data = fd.read()
|
||
if data[:3] == codecs.BOM_UTF8:
|
||
data = data[3:]
|
||
files = codecs.open(self.config_path, "w")
|
||
files.write(data)
|
||
files.close()
|
||
fd.close()
|
||
|
||
self.cf = configparser.SafeConfigParser(allow_no_value=True)
|
||
self.cf.read(self.config_path, encoding='utf-8')
|
||
|
||
def get_value(self, sections, options):
|
||
"""
|
||
获取config文件数据
|
||
"""
|
||
return self.cf.get(sections, options)
|
||
|
||
def read_cfg(self):
|
||
"""
|
||
读取配置文件路径
|
||
"""
|
||
return self.cf.read(filenames=self.config_path, encoding='utf-8')
|
||
|
||
def get_sections(self):
|
||
"""
|
||
读取配置文件中所有的section(可以理解为组名)
|
||
"""
|
||
return self.cf.sections()
|
||
|
||
def get_options(self, section):
|
||
"""
|
||
读取该section下所有的option(可以理解成读取该组下的所有key)
|
||
"""
|
||
return self.cf.options(section)
|
||
|
||
def get_items(self, section):
|
||
"""
|
||
读取该section下的所有值,并以键值对形式输出
|
||
"""
|
||
return self.cf.items(section)
|
||
|
||
def add_section(self, section):
|
||
"""
|
||
添加一个section,参数为section的名称
|
||
"""
|
||
self.cf.add_section(section)
|
||
with open(self.config_path, 'w') as fw: # 循环写入
|
||
self.cf.write(fw)
|
||
|
||
def set_section(self, section, option, value):
|
||
"""
|
||
在section下面添加一条数据(key=value),需要调用write()将内容写入文件
|
||
"""
|
||
self.cf.set(section, option, value)
|
||
with open(self.config_path, 'w') as fw: # 循环写入
|
||
self.cf.write(fw)
|
||
|
||
def get_all_cfg(self, section=None):
|
||
all_config = {}
|
||
for key in self.get_sections():
|
||
all_values = {}
|
||
for value_key in self.get_options(key):
|
||
all_values[value_key] = self.get_value(key, value_key)
|
||
all_config[key] = all_values
|
||
if section:
|
||
if section in all_config:
|
||
return all_config[section]
|
||
else:
|
||
raise Exception("配置节点:{}在文件中不存在,请检查....".format(section))
|
||
else:
|
||
return all_config
|
||
|
||
|
||
def get_current_config(file_path=env_choose_path, section=None, key=None):
|
||
"""
|
||
功能:读取env_choose.ini中的配置并返回
|
||
"""
|
||
rd = ReadConfig(file_path)
|
||
if key in rd.get_options(section=section):
|
||
return rd.get_value(sections=section, options=key)
|
||
else:
|
||
return "server not exist"
|
||
|
||
|
||
def get_zhyy_config(file_path=config_choose_path, section=None, key=None):
|
||
"""
|
||
功能:读取env_choose.ini中的配置并返回
|
||
"""
|
||
rd = ReadConfig(file_path)
|
||
if key in rd.get_options(section=section):
|
||
return rd.get_value(sections=section, options=key)
|
||
else:
|
||
return "server not exist"
|
||
|
||
|
||
def get_current_env():
|
||
"""
|
||
功能:读取env_choose.ini中的当前环境配置并返回
|
||
"""
|
||
rd = ReadConfig(env_choose_path)
|
||
env = rd.get_value(sections="run_jira_id", options="huohua-podenv")
|
||
if not env:
|
||
env = rd.get_value(sections="run_evn_name", options="current_evn")
|
||
return env
|
||
|
||
|
||
def get_uat_config(website, page, key=None, section='page_element'):
|
||
"""
|
||
| 功能说明: | 从uat_config文件夹下的对应文件中读取key |
|
||
| 输入参数: | website | 站点名,public_business/uat/uat_config目录下的文件名 |
|
||
| | page | web页面名称,website文件夹下的文件名,不用.ini的文件后缀名 |
|
||
| | section | 配置文件中的节点名,默认读取页面元素 |
|
||
| | key | 配置文件中的key,如果不输入,将以当前构建环境为key,如qa,sim |
|
||
| 作者信息: | 吴勇刚 | 2022.06.22 |
|
||
"""
|
||
config_path = os.path.join(uat_config_path, website, "{}.ini".format(page))
|
||
if not key:
|
||
key = get_current_config(section="run_evn_name", key="current_evn").lower()
|
||
rd = ReadConfig(config_path)
|
||
return rd.get_value(sections=section, options=key)
|
||
|
||
|
||
class InitConfig:
|
||
|
||
def __init__(self, run_user_name=None, current_evn=None):
|
||
self.cfg_rtn = ReadConfig()
|
||
self.evn_rtn = ReadConfig(env_choose_path)
|
||
self.db_rtn = ReadConfig(db_config_path)
|
||
self.config_rtn = ReadConfig(config_choose_path)
|
||
self.all_cfg = self.cfg_rtn.get_all_cfg()
|
||
self.config_cfg = self.config_rtn.get_all_cfg()
|
||
self.evn_cfg = self.evn_rtn.get_all_cfg()
|
||
self.db_cfg = self.db_rtn.get_all_cfg()
|
||
try:
|
||
self.astwb_cfg = ReadConfig(astwb_config)
|
||
self.astwb_all_cfg = self.astwb_cfg.get_all_cfg()
|
||
# 合并配置文件
|
||
self.all_cfg.update(self.astwb_all_cfg)
|
||
except Exception as e:
|
||
pass
|
||
if current_evn is None:
|
||
self.current_evn = self.evn_cfg['run_evn_name']['current_evn'] if self.evn_cfg['run_evn_name'][
|
||
'current_evn'] != '' else 'QA'
|
||
else:
|
||
self.current_evn = current_evn
|
||
if run_user_name:
|
||
self.current_user = run_user_name
|
||
else:
|
||
self.current_user = self.evn_cfg['run_user_name']['default_user']
|
||
self.zhyy_host = self.get_current_env_info(self.config_cfg, self.current_evn, 'zhyy_login')
|
||
|
||
def get_current_env_info(self, cfg_obj, current_env, key):
|
||
"""
|
||
config.ini中环境处理专用
|
||
:param cfg_obj: self.cfg_rtn = ReadConfig() self.all_cfg = self.cfg_rtn.get_all_cfg() cfg_obj = self.all_cfg
|
||
:param current_env: QA SIM PRODUCT
|
||
:param key: options
|
||
:return:
|
||
"""
|
||
try:
|
||
value = cfg_obj[current_env][key]
|
||
except KeyError:
|
||
value = cfg_obj['QA'][key]
|
||
if current_env == 'SIM':
|
||
value = value.replace('.qa.', '.sim.')
|
||
return value
|
||
elif current_env == 'PRODUCT':
|
||
value = value.replace('.qa.', '.')
|
||
return value
|
||
return value
|
||
|
||
|
||
if __name__ == '__main__':
|
||
pass
|
||
# init_cfg = InitConfig(curt_evn='QA', curt_user='lrq')
|
||
print(ReadConfig().add_section(section='temp_teacher'))
|
||
print(ReadConfig().set_section(section='temp_teacher', option='show_username', value=11))
|