应用程序配置引擎
tweak的Python项目详细描述
tweak是一个python助手类,用于接收和序列化特定于应用程序的配置。
tweak提供了一个自包含(标准库之外没有依赖项)、python 2和3兼容的配置 经理。它会自动在用户主目录中保存和恢复应用程序的配置。它使用json或 (可选)用于序列化的yaml。它支持类似dict的方法和访问语义、层次结构配置源, 以及用于分层配置选项的数组合并运算符(请参见下文)。
安装
如果包不允许依赖关系管理,则可以将Config类直接复制到 来自https://github.com/kislyuk/tweak/blob/master/tweak/__init__.py的应用程序。否则:
pip install tweak
概要
fromtweakimportConfigconfig=Config()config.host,config.port="example.com",9000config.nested_config={}config.nested_config.foo=True
重新启动应用程序后:
config = Config() print(config) >>> {'host': 'example.com', 'port': 9000, 'nested_config': {'foo': True}}
使用argparse.parse_args()返回的argparse.Namespace对象:
parser = argparse.ArgumentParser() ... args = parser.parse_args() if args.foo is not None: config.foo = args.foo elif "foo" not in config: raise Exception("foo unconfigured") config.update(vars(args))
使用yaml:
config = Config(use_yaml=True) ...
通过Config(save_on_exit=False)在python关闭时禁用自动配置保存(如果您 只想读取配置,不想写入配置,或者如果您想手动调用config.save()。通过 Config(autosave=True)使save()在配置对象发生赋值时运行。
配置摄取顺序
tweak支持从可配置的源数组摄取配置。每个源都是一个json或yaml文件。 跟随第一个源的配置源使用递归字典合并更新配置。消息来源是 按以下顺序枚举:
- 站点范围的配置源,/etc/NAME/config.(yml|json)
- 用户配置源,~/.config/NAME/config.(yml|json)
- 冒号分隔变量NAME_CONFIG_FILE 中列出的任何源
数组合并运算符
当加载配置源链时,tweak使用递归字典合并来组合 消息来源。另外,当原始配置值是列表时,tweak支持数组操作运算符:
In [1]: from tweak import Config In [2]: c = Config() In [3]: c.update(x=[1, 2, 3]) In [4]: c Out[4]: {'x': [1, 2, 3]} In [5]: c.update(x={"$append": 4}) In [6]: c Out[6]: {'x': [1, 2, 3, 4]} In [7]: c.update(x={"$extend": [5, 6]}) In [8]: c Out[8]: {'x': [1, 2, 3, 4, 5, 6]} In [9]: c.update(x={"$insert": {0: 0}}) In [10]: c Out[10]: {'x': [0, 1, 2, 3, 4, 5, 6]} In [11]: c.update(x={"$extendleft": [-2, -1]}) In [12]: c Out[12]: {'x': [-2, -1, 0, 1, 2, 3, 4, 5, 6]} In [13]: c.update(x={"$remove": 0}) In [14]: c Out[14]: {'x': [-2, -1, 1, 2, 3, 4, 5, 6]}
每个运算符($append,$extend,$insert,$extendleft,$remove)必须是 表示更新的字典,并且要更新的值必须是列表。例如,在下面的两个集合中 yaml文件,第二个文件扩展了第一个文件中的列表。
/etc/NAME/config.yml:
x: - y - z
~/.config/NAME/config.yml:
x: $extend: - a - b
包含指令
可选的Config(allow_includes=True)关键字参数可用于触发对 配置文件。对于接收到的每个配置源文件,顶级include键可以包含字符串或数组 串。在包含指令的文件(例如{"include": "config.d/*"}来摄取配置文件目录)之前,这些字符串中的每一个都将被全局化和摄取。
链接
虫子
请在GitHub上报告错误、问题、功能请求等。