从各种源加载配置的库
nectarine的Python项目详细描述
油桃
从各种源加载配置的库。在
要求
油桃需要Python3.7或更高版本,并已使用Python3.7和3.8进行了测试。在
安装
油桃可以通过pip安装。在
$ pip3 install nectarine # Install the basic version
$ pip3 install nectarine[yaml] # Install the YAML extension
供应商
油桃从称为providers的不同后端加载配置。下表列出了可用的 供应商。在
Name | Description |
---|---|
arguments | A provider that reads from the program arguments |
env | A provider that reads from the program environment variables |
dictionary | A provider that reads from a user-provided dictionary |
json | A provider that reads from a user-provided JSON file |
yaml | A provider that reads from a user-provided YAML file |
循序渐进的例子
Nectarine使您能够使用Python的数据类描述配置,并从各种 源(程序参数、配置文件等)。在
让我们考虑一个使用RabbitMQ代理的事件的程序(例如,使用awesomepika
库!)。
当然,这个小程序应该允许用户配置连接参数,比如代理的主机和
侦听端口、要使用的凭据等
我们的程序将接受来自3个不同提供商的配置:
- 程序参数
- 程序环境
- 一个JSON配置文件,比如
./conf.json
,其中包含主机/端口/用户名/密码的字段
这里的想法是允许用户使用环境或参数快速覆盖配置文件。在
为了表示这些连接参数,我们创建了以下数据类:
^{pr2}$下一步是与用户通信,获取配置,并创建RabbitMQ
的实例
用它。让我们看看如何用油桃来达到这个目的。在
油桃提供了一个load
函数,它需要两件事:要加载的类型和要从中加载的提供者列表。在
我们已经有了目标类型(即RabbitMQ
),因此我们需要选择我们的提供者:
- 对于程序参数,
arguments
提供程序 - 对于程序环境,
env
提供程序 - 对于JSON文件,
json
提供程序
现在,我们可以像下面这样调用load
函数并检索其结果:
fromnectarineimportload,arguments,env,jsonrabbitmq=load(target=RabbitMQ,providers=[arguments(),env(prefix="RABBITMQ_"),json("./conf.json")])print(rabbitmq)
差不多了!运行程序时,rabbitmq
变量现在随配置一起加载:
$ echo '{"host": "localhost", "port": 5671, "username": "user", "password": "pass"}' > ./conf.json
$ ./consumer.py
RabbitMQ(host='localhost', username='user', password='pass', port=5671)
$ ./consumer.py --port 1234
RabbitMQ(host='localhost', username='user', password='pass', port=1234)
特点
- [x] 多个配置提供程序:程序参数、环境、配置文件。。。在
- [x] 值重写:高优先级提供程序重写来自低优先级提供程序的值
- [x] 复杂结构:支持嵌套的数据类和集合
- [x] 类型检查:根据数据类中提供的类型提示检查配置数据
- [x] 数据类特性:可以像在常规数据类中一样指定默认值或工厂
- 项目
标签: