具有文件指定继承的configparser子类。

iniherit的Python项目详细描述


======
ini文件继承
=======


=======


将ini文件继承添加到configparser。注意,尽管它的有效行为与将多个文件传递给configparser的'read()'方法非常相似,但这需要在
处更改代码。如果这不可行,或者ini文件应该指定继承本身,那么“iniherit”包是一个更好的选择。


哦,“iniherit”还通过`%(env:varname)s``增加了对环境变量扩展的支持。这确实不应该出现在这里,但是由于
`iniherit`支持`%(super)s``扩展,因此添加envvar扩展也“太简单了”…




project info
===


*项目页面:https://github.com/cadithealth/iniherit
*错误跟踪:https://github.com/cadithealth/iniherit/issues


=


给定以下两个文件:``base.ini`:

…代码::ini

[app:main]
name=my application name


代码::ini

[默认值]
下面将导致“base.ini”和“override.ini”都被继承。“?”表示如果找不到“override.ini”将被忽略,否则将发生错误。
%inherit=base.ini?override.ini

则以下代码将传递断言:

…代码::python

import-iniherit
cfg=iniherit.safeconfigparser()
cfg.read('config.ini')


assert cfg.get('app:main','name')='我的应用程序名'

代码::python < Br/>模块导入configparser以使全局覆盖生效。


代码::bash

$iniherit--watch--interval 2--verbose input.ini output.ini
info:iniherit.cli:“source.ini”已更改;正在更新输出…
info:iniherit.cli:“inherited file.ini”已更改;正在更新输出…
^c



installation
==


代码::bash

如果使用python 3+,请首先升级“distribute”包*
$pip install“distribute>;=0.7.3“

指定的文件。示例:

…代码::ini

[默认]
%inherit=base.ini
def_var=覆盖“base.ini”的“默认”部分中的“def_var”设置(如果存在)。

[my app]
sect_var=覆盖“base.ini”的“my app”部分中的“sect_var”设置(如果存在)。
“base.ini”中的其他部分也将被继承,即使未在此处指定


*选项“`%inherit`”指向一个以空格分隔、URL编码的
要从中继承值的文件列表,该列表的值是从左到右加载的
深度优先。例如:

…代码::ini

[默认值]
%inherit=base.ini文件,空间为%20space.ini可调用部分。默认情况下,
相同名称的节将从其他文件加载,除非文件名
以方括号括起来(“[”…)作为后缀。]”,URL编码,
节名称。示例:

…代码::ini

[节]
%inherit=base.ini override.ini[其他%20节]

这些将**不**结转!在其他
单词中,继承当前仅继承实际值,而不是
解释值。请注意,这可能会导致意外的结果!

如果文件名的实际名称中有“[”,则可以对其进行url编码。

*如果相对指定,则将文件名视为相对于当前ini文件。

*如果文件名的前缀是“?”然后,它将被随意加载:如果文件不存在,它将被忽略。如果文件没有“?”前缀为且找不到
,则会引发“ioerror”。注意,这与标准的configparser.read()行为不同,后者会自动忽略任何找不到的
文件。

如果文件名有“?”作为它的第一个字符,它可以是url编码的。

*注意,对于全局效果,inherit.parser.default_inheritag``可以通过
更改'inherit.parser.default_inheritag``来更改inherit选项的实际名称,或者``configparser.im_inheritag``用于每个实例的效果。




指定一个值,如果未提供默认值
,则会引发“interpolationmissingsupererror”。
“继承值”首先计算深度。请注意,“super”必须全部大写。


例如,给定以下ini文件:

…代码:ini

代码:ini

config.ini
[默认值]
%inherit=base.ini
[记录器]
键=%(超级)s,auth
wdef=%(超级:-更多)s或更少
nada=%(超级)s boom!



然后将生成以下python:


In Hyth.By/P>导入构造器< Br/> CFG= CONTROPSER.SAFECOFICANPARSER():Read('CONFIG.INI))BR/> BR/> CFG。获取(“日志器”,“密钥”),“根,APP,AUTH”BR/> CFG。获取(“日志者”,“WDEF”)=“=”&“或多或少”< BR/> CFG。代码:Python < BR>“nada”)35;==>;与标准插值错误一样,引发插值丢失超级错误




,只有当从配置中请求
值(将“raw”设置为falsy)时,才会引发
interpolationmissingsupererror异常。


*``%(env:varname[:-default])s``

计算结果为环境变量名“varname”的值。
如果未定义环境变量且没有默认值
如果已提供,则会引发“interpolationmissingenvenerror”。注意
环境变量名称总是区分大小写。

例如,给定以下ini文件:

…代码::ini

config.ini
[节]
home=%(env:home)s
rdir=%(env:rdir:-/var/run)s
nada=%(env:rdir)s



代码::Python
=“/家/用户”保证“家庭”EnvaVaR存在“BR/OS.Envial.POP”(“RDIR”,没有)确保不存在“BR/>< BR/> CFG。获取(“段”,“home”)*==& gt;“/home /用户”< BR/> CFG。GET(“段”,“Rdir”)α==& gt;'/Va/Run’< BR/> CFG。导入OS:BR/> OS环境引发InterpolationMissingInverror



与标准插值错误一样,只有当从配置请求
值时(将“raw”设置为falsy),才会引发



==

*加载启用继承的ini文件后,配置分析器no
longer知道某个选项是从何处加载的,或者它是如何派生的。因此,当调用“write”方法时,configparser将生成一个不带继承的ini文件。
换句话说,它将展平继承树。

。_ configparser:http://docs.python.org/2/library/configparser.html

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

推荐PyPI第三方库


热门话题
java如何将UDP消息从桌面发送到移动设备?   java DefaultMessageListenerContainer使用JMX+ActiveMQ在单个队列上管理多个使用者   java CMU Sphinx:Voxforge德国型号不精确   java生成一个定制的lastIndexOf方法   java生成pdf PDFBox无头docker容器失败   java实例化HashMap中存储的类的实例   java将JAAS表单身份验证传递给REST服务   爪哇:Tomcat。伊奥。IOException:无法创建目标“xxx”目录“   java GoogleTokenResponse未执行。。!   java Lastmodified标头在第二次刷新后不工作   java Android onClickListener没有注册点击(我想)   当引导调用远程模式时,不会加载java Google reCaptcha   java将二进制字符串转换为字节数组   java为JPA本机查询的结果分配ID的最简单方法是什么?   java上的数组参数行为   组织中的java字段数据源。O7计划。关于公司。MainController需要“javax”类型的bean。sql。找不到“数据源”   java如何使用selenium在excel文件中查找字符串的位置   java Hibernate注释。如何注释?   在Java中反转字符串时出错