python应用程序基于键值对配置的实现。

roconfiguration的Python项目详细描述


Build statuspypiTest coverage

python配置实用程序

python应用程序基于键值对配置的实现。

功能:

  • 支持最常见的应用程序设置源
  • 支持按顺序覆盖设置
  • 支持嵌套结构和列表,使用属性表示法
  • 使用特定环境设置的策略

这个库的灵感来自.NET Core Microsoft.Extensions.Configuration命名空间及其令人愉快的设计(ref.MSDN documentationMicrosoft 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文件,可选的环境文件

在此示例中,如果存在名为^ { }和值^ ^ }的环境变量,并且存在名为^ {CD6>}的配置文件,则读取它以覆盖在{{CD2>}文件中配置的值。

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Esper中声明Classtype实例变量并调用实例方法时未调用java实例方法   java Android真的很慢   macos在Mac上用Java播放声音   java如何在springboot中生成clientid和clientsecret并存储在数据库中?   返回假条件的java方法   数组在Java中截断同步ArrayList的正确方法   java HashMap<Long,String>和HashMap<>之间有什么区别?   正在寻找允许按名称读取列的java CSV库   HQL Hibernate查询中的java左连接   java以编程方式添加可绘制图像的最佳方法是什么?   已使用NetworkImageView下载的安卓加载图像上的java截击不起作用   java CORBA通知订阅(错误:org.omg.CORBA.MARSHAL:vmcid:0x0次要代码:0已完成:否)   Java BufferedReader openvms   java是搜索字符串中的一个字母并在字母前加上“a”的最佳算法?   由于测试依赖关系,java Gradle Spring云流项目未生成   Java程序中的数组ArrayIndexOutOfBoundsException,用于检查double是否为负数   java Android/RxJava如何链接网络请求并在失败时重试   java告诉OpenEJB忽略MDB   java如何在不迁移的情况下在room数据库中添加表