开发人员的配置处理
项目描述
目的
- 提供统一的配置
python2
和python3
应用方式 - 方便具有技术背景的开发人员、devops、QA 和用户
读数
- yaml教程
- http://yaml.org/spec/1.1/
- YAML 不是 JSON,也不是数据序列化格式。它是一种对象序列化格式
要求
- 必须开箱即用地支持 yaml
- 必须通过递归合并开发人员定义的配置(默认)和运行时提供的配置来配置程序(独立模块或 python 包)。
- 每个配置层(例如默认值、运行时配置等)必须是嵌套映射
- 合并层的数量是无限的,可以由开发人员重新定义
- 层合并顺序可以由开发人员重新定义
- 必须包含一组 yaml构造函数
!url
!date
!datetime
!timedelta
!strjoin
!envvar
!regexp
!filecontent
- 应该包含一组危险的 yaml 构造函数
!file
!socket
!yamlfile
- 通过文件路径或 url 包含 yaml
- 可以使用递归检测处理构造函数(请参阅要求说明)
- 可能包含 cli arg 映射构造函数
- 应该提供一种在加载配置之前扩展构造函数集的方法
- 必须提供一种使用
logging.dictConfig
合并配置中的值来配置日志记录的方法 - 运行时配置路径可以用 envvar 重新定义(如
$ CONFIG=./some-config.yml program.py
) - 运行时配置路径可以用 cli arg 重新定义(如
$ program.py --config=./some-config.yml
) - 应该允许在层之间共享锚点
- 不应允许重新定义已在先前层中定义的锚点
- 必须支持文件系统路径作为配置路径
- 必须支持
file://
,http(s)://
urls 作为配置路径 - 可以支持
ftp://
urls 作为配置路径 - 可以支持
git://
urls 作为配置路径
要求说明
!class
,!object
, 并且!yamlfile
被认为是危险的,因为创建类或对象可能需要在构造函数调用期间不存在的现有配置。!yamlfile
可以引用!class
或!object
内部和/或导致无限的 yaml 加载递归或模块加载递归。!file
并且!socket
被认为是危险的,因为它们不可序列化
执行
- 提供
<module>.<config>
包含结果配置作为映射的子模块
???