开发人员的配置处理
项目描述
目的
- 提供统一的配置
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>包含结果配置作为映射的子模块
???