跳转到主要内容

应用程序配置引擎

项目描述

Tweak是一个Python辅助类,用于处理和序列化特定应用程序的配置。

Tweak提供了一个自包含的(不依赖于标准库之外的其他库)、兼容Python 2和3的配置管理器。它会在您的用户主目录中自动保存和恢复应用程序的配置。它使用JSON或(可选)YAML进行序列化。它支持类似于dict的方法和访问语义,层次配置源,以及用于配置选项分层操作的数组合并运算符(见下文)。

安装

如果您的软件包不允许依赖管理,您可以从https://github.com/kislyuk/tweak/blob/master/tweak/__init__.py直接将Config类复制到您的应用程序中。否则

pip install tweak

概述

from tweak import Config

config = Config()
config.host, config.port = "example.com", 9000
config.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()在配置对象发生赋值时运行。

配置摄入顺序

调整支持从可配置的源数组中获取配置。每个源都是一个JSON或YAML文件。紧随第一个源之后的配置源使用递归字典合并来更新配置。源按以下顺序排列

  • 全局配置源,/etc/NAME/config.(yml|json)

  • 用户配置源,~/.config/NAME/config.(yml|json)

  • 在冒号分隔的变量NAME_CONFIG_FILE中列出的任何源

数组合并运算符

当加载配置源链时,调整使用递归字典合并来组合源。此外,当原始配置值是一个列表时,调整支持数组操作符

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键可以包含一个字符串或字符串数组。这些字符串中的每个都将在使用包含指令的文件之前进行glob并摄取(例如,{"include": "config.d/*"}以摄取配置文件目录)。

作者

  • Andrey Kislyuk

许可证

根据Apache许可证版本2.0的条款许可。

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

项目详情


下载文件

下载适用于您平台的应用程序。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源分布

tweak-1.0.4.tar.gz (12.3 kB 查看哈希值

上传时间:

构建分布

tweak-1.0.4-py2.py3-none-any.whl (9.9 kB 查看哈希值

上传时间: Python 2 Python 3

支持