跳转到主要内容

从字符串加载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)

如果对象不需要实例化(例如,一个独立的函数,argskwargs可能不存在或为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 装饰器语法摘要

  1. [foo:%(here)s/objects.py:MyClass]:使用从节中给出的参数创建类型为 MyClass 的对象 foo

  2. [foo:bar]:使用 bar 节中的模式创建对象 foo,但使用此节中的参数覆盖 bar 节中的任何参数

  3. [foo:bar:%(here)s/objects.py:MyClass]:创建一个对象 foo,它是 MyClass 的实例,被 bar 模式创建的对象包装。 bar 被传递一个特殊参数,%(object)s,它是包装对象的实例(MyClass 实例)。在内部,包装对象通过整个节名称(foo:bar:%(here)s/objects.py:MyClass)来识别。此节中的参数适用于 MyClass(...)

  4. [foo:bar:app=%(object)s,value=1:%(here)s/objects.py:MyClass]:与 3 相同,但使用 app=%(object)svalue=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 (9.7 kB 查看哈希值)

上传时间

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面