应用程序配置引擎

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/*"}来摄取配置文件目录)之前,这些字符串中的每一个都将被全局化和摄取。

作者

  • 安德烈·基斯利克

许可证

根据Apache License, Version 2.0条款授权。

https://travis-ci.org/kislyuk/tweak.pnghttps://img.shields.io/coveralls/kislyuk/tweak.svghttps://img.shields.io/pypi/v/tweak.svghttps://img.shields.io/pypi/l/tweak.svghttps://readthedocs.org/projects/tweak/badge/?version=latest

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

推荐PyPI第三方库


热门话题
地址簿在地址簿中添加和检查Java中的条目   java在请求范围中存储和检索值   java Android:您能否使用AlertDialog清除数据,以便在启动电子邮件活动后数据不会损坏?   用户和角色的javajpa设计   java为什么mybatis更新和删除不起作用?   在使用swingx jxtreetable进行测试时,java Fest的速度会减慢   如何使用ApachePOI4.0XDDFChartData、XDDFBarChartData生成堆叠条形图;在使用java的excel工作表中,我不想使用jfree   oauth Java执行oAuth1。0具有给定consumerKey、ConsumerCret、accessToken、accessTokenSecret和realm的已验证请求   java TTS OuttanceProgressListener无法正常工作   java if条件在不同的环境中返回不同的值   java Spring Boot应用程序的嵌入式HTTP服务器在哪里?   基于SSL的java SOAP客户端:sun。安全供应商。certpath。SunCertPathBuilderException:找不到请求目标的有效证书路径   java StringBuilder()与StringBuilder(空)与StringBuilder(“”)