通用配置机制
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