从字符串加载python属性
pyloader的Python项目详细描述
从字符串加载python属性
json格式
pyloader使用json可序列化格式 (可序列化)python对象的形式:
{'foo': # (arbitrary) object name, {'args': ['positional', 'arguments'], 'kwargs': {'keyword': 'arguments}, 'path': 'dotted.or.file.path:ObjectName'}, 'bar': ... } # etc
对象的实例化方式如下:
ObjectName(*args, **kwargs)
在对象不被实例化的情况下(例如 独立函数args和kwargs将不是 不存在或将不存在(null在json中)。
INI格式
pyloader还具有一个ini格式,该格式被转换为json 但增加了一些方便的功能。一个简单的对象是 表示为:
[foo:dotted.or.file.path:ObjectName] . = positional, arguments keyword = arguments
.表示以逗号分隔的位置参数 名单。剩下的(键,值)对成为关键字参数。这个 节名称包含对象名称(例如foo),后跟 :后跟加载路径。像json、点路径或文件 可以使用路径。另外,其他(可插入的)加载路径是 可用:
重写加载程序:您可以使用像[foo:bar]这样的节名来 使用bar对象中的变量重写bar对象中的变量 foo:
[foo:bar] . = cats, dogs type = count [bar:%(here)s/some/path.py:MyObject] . = elephants type = concatenate
上面的结果为foo生成了一个json blob,比如:
{'foo': {'args': ['elephants', 'cats', 'dogs'], 'kwargs': {'type': 'concatenate'}, 'path': '/location/of/ini/file/some/path.py:MyObject'}}
args已扩展。kwargs将被重写。
包装器:除了覆盖模式之外,您还可以包装 对象:
[foo:bar:baz]
这将创建一个对象foo,它将对象baz包装在 由bar给出的模式。在这种情况下,将提供bar。 一个特殊的变量,
%(app)s
。您也可以这样做:
[foo:bar:hi,hello,x=1,y=2:%(here)/objects.py:MyClass]
此外,.ini文件可能包括其他.ini文件。这就允许 特定.ini文件意图的封装:
[include:%(here)s/some/file.ini]
ini文件有几个方便的变量:
- %(此处)s:ini文件所在目录的位置
- %(object)s:用于包装器
消费者可以提供其他变量。
.ini decorator语法摘要
- [foo:%(here)s/objects.py:MyClass]:创建类型为的对象foo。 MyClass使用节中给出的参数
- [foo:bar]:使用来自部分的模式创建对象foo。 bar但用bar部分重写任何参数 本节中的内容
- [foo:bar:%(here)s/objects.py:MyClass]:创建对象foo 它是MyClass的一个实例,包装在由 bar模式。bar传递了一个特殊参数, %(object)s,它是包装对象( MyClass实例)。在内部,包装的对象由 整个节名(foo:bar:%(here)s/objects.py:MyClass)。这个 本节中的参数适用于MyClass(...)
- [foo:bar:app=%(object)s,value=1:%(here)s/objects.py:MyClass]: 与3相同。但是用bar部分中的值重写 app=%(object)s和value=1
节名称语法
- [name:resource]:创建名为name的对象,其中resource 是节名或path,如JSON Format中所述。 如果resource是另一个节名,则选项 将覆盖resource部分中给定的选项,并新建 将创建名为name的对象。如果section是 一个路径,将按照path给定的方式创建一个对象 给定的选项。
- [name:decorator:resource]:创建名为name的对象,其中 由resource给定的对象传递给decorator。重写 加载如[name:reource]所述。匿名者 对象是为包装的 反对。所以这个表单为JSON Format生成两个部分。 decorator与name位于同一命名空间中。
- [名称:decorator:overrides:resource]:类似于 [名称:decorator:resource],但将overides应用于 decorator节。overrides是格式字符串 foo,bar,fleem=5。
杰夫·哈梅尔 http://k0s.org/