python应用程序基于键值对配置的实现。
roconfiguration的Python项目详细描述
python配置实用程序
python应用程序基于键值对配置的实现。
功能:
- 支持最常见的应用程序设置源
- 支持按顺序覆盖设置
- 支持嵌套结构和列表,使用属性表示法
- 使用特定环境设置的策略
这个库的灵感来自.NET Core Microsoft.Extensions.Configuration
命名空间及其令人愉快的设计(ref.MSDN documentation,Microsoft Extensions Configuration Deep Dive)。
主要阶级受到卢西亚诺·拉马略的影响 json结构浏览器,使用属性表示法,在他的书Fluent Python。
支持的源:
- yaml文件
- json文件
- ini文件
- 环境变量
- 词典
- 键和值
安装
pip install roconfiguration
示例
yaml文件和环境变量
在本例中,配置将由文件settings.yaml
中的任何内容和环境变量组成。设置按顺序应用,因此具有匹配名称的环境变量将重写yaml
文件中的值。
fromroconfigurationimportConfigurationconfig=Configuration()config.add_yaml_file('settings.yaml')config.add_environmental_variables()
yaml文件,可选的环境文件
在此示例中,如果存在名为^ {
importosfromroconfigurationimportConfigurationenvironment_name=os.environ['APP_ENVIRONMENT']config=Configuration()config.add_yaml_file('settings.yaml')config.add_yaml_file(f'settings.{environment_name}.yaml',optional=True)config.add_environmental_variables()
按前缀过滤环境变量
importosfromroconfigurationimportConfigurationconfig=Configuration()# will read only environmental variables# starting with 'APP_', case insensitivelyconfig.add_environmental_variables('APP_')
ini文件
ini文件是使用内置的configparser
模块解析的,因此支持[DEFAULT]
部分;所有值都保持为字符串。
fromroconfigurationimportConfigurationconfig=Configuration()config.add_ini_file('settings.ini')
json文件
json文件使用内置的json
模块进行解析。
fromroconfigurationimportConfigurationconfig=Configuration()config.add_json_file('settings.json')
词典
fromroconfigurationimportConfigurationconfig=Configuration({'host':'localhost','port':8080})config.add_map({'hello':'world','example':[{'id':1},{'id':2}]})assertconfig.host=='localhost'assertconfig.port==8080assertconfig.hello=='world'assertconfig.example[0].id==1assertconfig.example[1].id==2
键和值
fromroconfigurationimportConfigurationconfig=Configuration({'host':'localhost','port':8080})config.add_value('port',44555)assertconfig.host=='localhost'assertconfig.port==44555
覆盖嵌套值
config=Configuration({'a':{'b':1,'c':2,'d':{'e':3,'f':4}}})assertconfig.a.b==1assertconfig.a.d.e==3assertconfig.a.d.f==4config.add_value('a:d:e',5)assertconfig.a.d.e==5assertconfig.a.d.f==4
使用env variables
覆盖嵌套值config=Configuration({'a':{'b':1,'c':2,'d':{'e':3,'f':4}}})assertconfig.a.b==1assertconfig.a.d.e==3assertconfig.a.d.f==4# NB: if an env variable such as:# a:d:e=5# or...# a__d__e=5## is defined, it overrides the value from the dictionaryconfig.add_environmental_variables()assertconfig.a.d.e==5
使用env variables
覆盖列表项中的值config=Configuration({'b2c':[{'tenant':'1'},{'tenant':'2'},{'tenant':'3'}]})config.add_value('b2c:1:tenant','4')assertconfig.b2c[0].tenant=='1'assertconfig.b2c[1].tenant=='4'assertconfig.b2c[2].tenant=='3'
在本地开发和运行测试
pip install -r dev_requirements.txt
# run tests using automatic discovery:
pytest