跳转到主要内容

又一配置解析器。

项目描述

又一配置对象。兼容更新的 configparser

travis Coverage

用法

>>> 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 (9.0 kB 查看散列值)

上传时间

由以下机构支持