通用配置机制

infi.conf的Python项目详细描述


概述

conf是用于存储、加载和操作配置的通用机制。

用法

基础知识

给定这样的文件:

>>> f = open("/tmp/my_file.cfg", "w")
>>> _ = f.write("""
... CONFIG = {
...    "a" : {
...       "b" : 2,
...    }
... }""")
>>> f.close()

通过以下方式获取配置对象:

>>> from infi.conf import Config
>>> c = Config.from_filename("/tmp/my_file.cfg")
>>> c.root.a.b
2

从其他来源加载

也可以从字符串加载:

>>> c = Config.from_string("CONFIG = {'a' : 2}")
>>> c.root.a
2

更新路径

设置路径由设置项完成:

>>> c['a'] = 3
>>> c.root.a
3

不允许设置以前不存在的路径,除非您分配配置对象:

>>> c['b'] = 3 #doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
 ...
CannotSetValue: Cannot set key 'b'

>>> c['b'] = Config(2)
>>> c.root.b
2

也可以通过root代理进行分配:

>>> c.root.a = 3
>>> c.root.a
3

备份/恢复

无论何时您想在更改之前保留配置并在以后还原它,都可以使用backup()restore()来完成。它们像一个堆栈一样工作,因此它们会推送并弹出状态:

>>> c = Config({"value":2})
>>> c['value']
2
>>> c.backup()
>>> c['value'] = 3
>>> c['value']
3
>>> c.backup()
>>> c['value'] = 4
>>> c['value']
4
>>> c.restore()
>>> c['value']
3
>>> c.restore()
>>> c['value']
2

公用事业

路径分配

可以通过路径分配分配给配置,例如:

>>> c = Config(dict(a=dict(b=dict(c=3))))
>>> from infi.conf.utils import assign_path
>>> assign_path(c, "a.b.c", 4)
>>> c.root.a.b.c
4

表达式路径分配

在某些情况下,您希望接收这样的字符串:

a.b.c=2

并在配置的上下文中理解它们。这可能是因为它们来自命令行、覆盖文件或其他任何来源。infi.conf的实用程序为此提供了一个函数:

>>> from infi.conf.utils import assign_path_expression
>>> assign_path_expression(c, "a.b.c=2")
>>> c.root.a.b.c
'2'

注意,在这个方法中,类型总是字符串。如果您的leaf已经有一个值,可以使用deduct_type标志从当前值推断该类型:

>>> c['a']['b']['c'] = 3
>>> assign_path_expression(c, 'a.b.c=666', deduce_type=True)
>>> c.root.a.b.c
666

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

推荐PyPI第三方库


热门话题
java将列表a作为从流收集的映射中的值   java SVN Eclipse忽略所有用户的文件夹   @PathVariable类型不匹配的java配置错误页   java在应用程序中使用Oracle数据库需要什么?   java无法确定用户何时为我的自定义异常输入数字小于0的问题   java如何通过软件导航网站?   java将JFace TableViewer添加到SWT表   Java中“field”和“this.field”的区别   java战舰代码不工作   java如何设置可执行IE 11驱动程序的路径   java这个程序如何一步一步地计算两个区间之间的阿姆斯特朗数?   JavaRestlet:在过滤器中使用转换器服务   Tensorflow:如何在java中使用python训练的语音识别模型   EclipseJava。util。使用迭代器从HashMap获取ArrayList时出现NoTouchElementException   Java Swing启动屏幕配置错误   为什么MySQL浮点与Java浮点不同?