以简单的方式处理项目中的配置文件
Config-Handler的Python项目详细描述
配置处理程序
以简单的方式处理项目中的配置文件。
安装
> pip install config-handler
规则
规则1
使用ini文件进行配置。
关于这一点,请遵循ini文件语言:https://en.wikipedia.org/wiki/INI_file
规则2
只使用字符串、整数和布尔值。
如果你需要使用其他的东西,设计是不对的。
规则3
不要将配置文件(config.ini)放在Git存储库中。
相反,您有一个配置模板文件(config.ini.template)。
规则4
配置文件应该只包含用户可以更改的内容。
如果数据永远不会更改,请使用常量。
配置模板文件
config.ini.template文件应该是这样的:
config.ini.template文件支持模板变量(${project_root_path}
)。
用法
情景1
<>你第一次运行你的应用程序,而CONTI.IN还不存在。 因此,您需要从config.ini.template文件创建它(如果需要,请使用模板变量):importosfromconfig_handlerimportConfigHandlertemplate_config_variables={'project_root_path':os.path.join('path','to','project','root')}ConfigHandler('./config.ini').sync(template_config_variables)
在这个调用之后,config.ini文件被创建在config.ini.template所在的同一目录中,应该如下所示:
情景2
现在请阅读新创建的config.ini:
fromconfig_handlerimportConfigHandlerconfig=ConfigHandler('./config.ini').read()print(config.sections())# >>> ['app1', 'app2']print(dict(config['DEFAULT']))# >>> {'send_email': 'true', 'authenticate_user': 'true'}print(dict(config['app1']))# >>> {'send_email': 'false', 'line_height': '12', 'input_path': 'path/to/project/root/input/app1', 'authenticate_user': 'true'}print(config['DEFAULT']['send_email'])# >>> 'true'print(config['app1']['front_page_title'])# >>> 'Hello World!'print(config.getboolean('DEFAULT','send_email'))# >>> Trueprint(config.getboolean('app2','send_email'))# >>> False
.read()
从python的本机Configuration file parser lib返回ConfigParser
对象
情景3
用户在config.ini文件中做了一些更改:
开发人员在config.ini.template文件中进行了一些更改:
然后您需要再次运行同步:
importosfromconfig_handlerimportConfigHandlertemplate_config_variables={'project_root_path':os.path.join('path','to','project','root')}ConfigHandler('./config.ini').sync(template_config_variables)
同步之后,config.ini文件应该如下所示:
因此,用户更改或添加的内容将保留在config.ini中。
在config.ini.template中添加的所有新内容也都添加到config.ini中。
情景4
您可以同时同步和读取:
fromconfig_handlerimportConfigHandlerconfig=ConfigHandler('./config.ini').sync({...}).read()...
异常处理
fromconfig_handlerimport(ConfigHandler,ConfigHandlerException,ConfigHandlerFileReadException)try:config=ConfigHandler('./config.ini').sync({...}).read()exceptConfigHandlerFileReadException:"""Read exceptions"""exceptConfigHandlerException:"""All Config Handler exceptions"""