从字符串加载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可能不存在或为None(JSON中的null)。
INI格式
pyloader还提供INI格式,该格式转换为JSON格式,但增加了几个便利功能。简单对象的表达式为
[foo:dotted.or.file.path:ObjectName] . = positional, arguments keyword = arguments
`.`表示位置参数,是一个以逗号分隔的列表。其余的(键,值)对成为关键字参数。节名称包含对象名称(例如foo),后面跟着一个冒号,然后是加载路径。与JSON类似,可以使用点路径或文件路径。此外,还有其他(可插拔)加载路径可用
覆盖加载器:您可以使用类似于[foo:bar]的节名称来覆盖bar对象中的变量,使用foo中的变量
[foo:bar] . = cats, dogs type = count [bar:%(here)s/some/path.py:MyObject] . = elephants type = concatenate
这将在foo生成一个JSON块,如下所示
{'foo': {'args': ['elephants', 'cats', 'dogs'], 'kwargs': {'type': 'concatenate'}, 'path': '/location/of/ini/file/some/path.py:MyObject'}}
args已扩展。 kwargs将被覆盖。
包装器:除了覆盖模式之外,您还可以包装一个对象
[foo:bar:baz]
这将创建一个对象foo,该对象通过由bar给出的模式包装对象baz。在这种情况下,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文件有几个便利变量
%(here)s : .ini文件所在目录的位置
%(object)s : 用于包装
消费者可能提供额外的变量。
.ini 装饰器语法摘要
[foo:%(here)s/objects.py:MyClass]:使用从节中给出的参数创建类型为 MyClass 的对象 foo
[foo:bar]:使用 bar 节中的模式创建对象 foo,但使用此节中的参数覆盖 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 相同,但使用 app=%(object)s 和 value=1 覆盖 bar 节中的值
节名称语法
[name:resource]:创建一个名为 name 的对象,其中资源是节名称或如 JSON 格式 中所述的 path。如果资源是另一个节名称,则选项将覆盖 resource 节中给出的选项,并将创建一个名为 name 的新对象。如果 section 是一个路径,则将创建一个对象,如 path 所示,并带有给定的选项。
[name:decorator:resource]:创建一个名为 name 的对象,其中由 resource 给出的对象传递给 decorator。重写和加载与 [name:reource] 相同。为包装对象创建一个匿名对象,该对象包含整个节名称。因此,这种形式会导致 JSON 格式 中有两个节。decorator 是与 name 相同命名空间中的节。
[name:decorator:overrides:resource]:类似于 [name:decorator:resource],但将 overides 应用到 decorator 节。overrides 是一个格式为 foo,bar,fleem=5 的字符串。
Jeff Hammel http://k0s.org/
项目详情
pyloader-0.1.6.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 21ac2ad09c4b7f4bd16a4685c5c45c2bcde6044d99700f67b0484ec844438577 |
|
MD5 | f5f24602f1898ce0cd2cf6a2d17f93b3 |
|
BLAKE2b-256 | 99bdca9f114e7c5de6849d0930bc6207c5b2feaf4059efb749dda637016eedaf |