又一配置解析器。
项目描述
又一配置对象。兼容更新的 configparser。
用法
>>> from konfig import Config
>>> c = Config('myconfig.ini')
然后阅读 configparser的文档 了解API。
Konfig提供一些额外的API,如 as_args(),它将配置文件作为argparse兼容的参数返回
>>> c.as_args() ['--other-stuff', '10', '--httpd', '--statsd-endpoint', 'http://ok']
对于自动过滤,您还可以将argparse解析器对象传递给 scan_args()。它将遍历您在解析器中定义的参数,并在配置文件中查找它们,然后返回与 as_args() 相同的参数列表。您可以使用此列表直接与 parser.parse_args() 一起使用 - 或者用 sys.argv 或其他内容完成。
>>> import argparse >>> parser = argparse.ArgumentParser() >>> parser.add_argument('--log-level', dest='loglevel') >>> parser.add_argument('--log-output', dest='logoutput') >>> parser.add_argument('--daemon', dest='daemonize', action='store_true')>>> config = Config('myconfig.ini') >>> args_from_config = config.scan_args(parser)>>> parser.parse_args(args=sys.argv[1:]+args_from_config)
语法定义
配置文件是一个基于ini的文件。(有关更多详细信息,请参阅 http://en.wikipedia.org/wiki/INI_file。)变量名称可以分配值,并分组到部分。以“#”开头的行是注释掉的。空行也被删除。
示例
[section1]
# comment
name = value
name2 = "other value"
[section2]
foo = bar
Python、PHP和其他语言的ini读取器都理解这种语法。尽管如此,它们在解释值的方式上存在细微差别,尤其是在转换值的方式上。
值转换
以下是一组转换值的规则
如果值用“”引号引用,则它是一个字符串。这种表示法对于在值中包含“=”字符很有用。如果值包含一个“”字符,则必须用“”字符转义。
当值由数字组成,并且可选地以“-”开头时,它将暂时转换为整数或长整数,具体取决于语言。如果数字超出了语言中可用的范围,它将保持为字符串。
如果值是“true”或“false”,则将其转换为布尔值,或者在没有布尔类型的情况下转换为0和1。
值可以是环境变量:“${VAR}”如果环境中有VAR的值,则替换为该值。如果变量未找到,则必须引发错误。
值可以包含多行。在读取时,行将被转换为一系列值。多行值的每一行都必须至少以一个空格或制表符字符开始。
示例
[section1]
# comment
a_flag = True
a_number = 1
a_string = "other=value"
another_string = other value
a_list = one
two
three
user = ${USERNAME}
扩展文件
INI文件可以扩展另一个文件。为此,必须包含一个“DEFAULT”部分,其中包含一个“extends”变量,该变量可以指向一个或多个INI文件,这些文件将通过添加新部分和值合并到当前文件中。
如果“extends”指向的文件中包含在原始文件中已经存在的部分/变量名称,则不会覆盖现有的值。
以下是一个示例:您有一个公共配置文件,并希望保留一些数据库密码为私有。您可以将这些密码放在单独的文件中。
public.ini
[database]
user = tarek
password = PUBLIC
[section2]
foo = baz
bas = bar
然后在private.ini中
[DEFAULT]
extends = public.ini
[database]
password = secret
现在如果您使用private.ini,您将得到
[database]
user = tarek
password = secret
[section2]
foo = baz
bas = bar
要指向多个文件,可以使用多行表示法
[DEFAULT]
extends = public1.ini
public2.ini
当提供多个文件时,它们将被顺序处理。因此,如果第一个文件有一个在第二个文件中也存在的值,第二个文件将被忽略。这意味着配置是从最专业到最通用的。
覆盖模式
如果您想扩展文件并覆盖现有值,您可以使用“overrides”而不是“extends”。
以下是一个示例。file2.ini
[section1]
name2 = "other value"
[section2]
foo = baz
bas = bar
file1.ini
[DEFAULT]
overrides = file2.ini
[section2]
foo = bar
使用file1.ini的结果
[section1]
name2 = "other value"
[section2]
foo = baz
bas = bar
在section2中,请注意foo现在变成了baz。
项目详情
konfig-1.1.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 7aa4c6463d6c13f4c98c02a998cbef4729da9ad69b676627acc8d3b3efb02b57 |
|
MD5 | 368e7c217d31de6c5918c740da6e8dfb |
|
BLAKE2b-256 | 3d0c2d61f29390063d9aabd20f1859b846faeb9e82711aae1ad92c5663264b00 |