跳转到主要内容

buildout宏食谱。

项目描述

宏快速入门

zc.recipe.macro是一组允许从宏部分和参数部分动态创建部分或甚至部分的食谱。这使得buildout可以将其数据与其输出格式分开。

基本使用

在宏的最基本使用中,部分调用宏并在自身上使用自身作为参数提供者。Buildout

[buildout]
parts = hard-rocker

[rock]
question = Why do I rock $${:rocking-style}?

[hard-rocker]
recipe = zc.recipe.macro
macro = rock
rocking-style = so hard

结果

[hard-rocker]
recipe = zc.recipe.macro:empty
result-sections = hard-rocker
rocking-style = so hard
question = Why do I rock so hard?

该食谱被更改为zc.recipe.macro:empty,这是一个什么也不做的食谱,因为调用部分必须是一个部分才能执行食谱,而buildout要求部分有一个食谱,所以它不能为空。

默认值

在宏中包含参数的默认值是可能的。

Buildout

[buildout]
parts = hard-rocker

[rock]
question = Why do I rock $${:rocking-style}?
rocking-style = so hard

[hard-rocker]
recipe = zc.recipe.macro
macro = rock

结果

[hard-rocker]
recipe = zc.recipe.macro:empty
result-sections = hard-rocker
rocking-style = so hard
question = Why do I rock so hard?

创建部分

当然,如果只能创建具有虚拟食谱的部分,那么这就没有太大意义。这就是结果-食谱选项发挥作用的地方。

Buildout

[buildout]
parts = hard-rocker

[rock]
question = Why do I rock $${:rocking-style}?

[hard-rocker]
recipe = zc.recipe.macro
result-recipe = zc.recipe.macro:test1
macro = rock
rocking-style = so hard

结果

[hard-rocker]
recipe = zc.recipe.macro:test1
result-sections = hard-rocker
question = Why do I rock so hard?
rocking-style = so hard

目标

通常,人们希望创建多个新部分。这可以通过目标选项实现。然而,这只有在可以提供多个参数源的情况下才有用。幸运的是,你可以。每个新部分后面可以跟一个冒号和一个用于参数的部分的名称。

Buildout

[buildout]
parts = rockers hard-rocker socks-rocker tired-rocker

[rock]
question = Why do I rock $${:rocking-style}?
rocking-style = $${:rocking-style}

[hard-rocker-parameters]
rocking-style = so hard

[socks-rocker-parameters]
rocking-style = my socks

[tired-rocker-parameters]
rocking-style = all night

[rockers]
recipe = zc.recipe.macro
result-recipe = zc.recipe.macro:empty
macro = rock
targets =
    hard-rocker:hard-rocker-parameters
    socks-rocker:socks-rocker-parameters
    tired-rocker:tired-rocker-parameters

结果

[rockers]
recipe = zc.recipe.macro:empty
result-sections = hard-rocker socks-rocker tired-rocker

[hard-rocker]
recipe = zc.recipe.macro:empty
rocking-style = so hard
question = Why do I rock so hard?

[socks-rocker]
recipe = zc.recipe.macro:empty
rocking-style = my socks
question = Why do I rock my socks?

[tired-rocker]
recipe = zc.recipe.macro:empty
rocking-style = all night
question = Why do I rock all night?

在上一个示例中,我们在${buildout:parts}之后硬编码了调用者后面的结果部分。这是脆弱的,因为某人可能会更改目标名称或对部分列表进行排序。当宏执行时,它的结果部分变量将有一个它修改的部分列表,该变量在执行宏时创建。

Buildout

[buildout]
parts = ${rockers:result-sections}

[rock]
question = Why do I rock $${:rocking-style}?
rocking-style = $${:rocking-style}

[hard-rocker-parameters]
rocking-style = so hard

[socks-rocker-parameters]
rocking-style = my socks

[tired-rocker-parameters]
rocking-style = all night

[rockers]
recipe = zc.recipe.macro
result-recipe = zc.recipe.macro:test1
macro = rock
targets =
    hard-rocker:hard-rocker-parameters
    socks-rocker:socks-rocker-parameters
    tired-rocker:tired-rocker-parameters

结果

[rockers]
result-sections = hard-rocker socks-rocker tired-rocker

[hard-rocker]
question = Why do I rock so hard?
recipe = zc.recipe.macro:test1
rocking-style = so hard

[socks-rocker]
question = Why do I rock my socks?
recipe = zc.recipe.macro:test1
rocking-style = my socks

[tired-rocker]
question = Why do I rock all night?
recipe = zc.recipe.macro:test1
rocking-style = all night

结果部分食谱的优先级顺序

结果部分的recipe选项的来源具有特定的优先级,如下所述

1) recipe in the parameters section of the macro target
2) result-recipe in the parameters section for the macro target
3) result-recipe in the macro invocation
4) recipe in the macro definition

以下测试将说明这些规则,从规则4开始,逐步展开。

在以下构建中,将使用rock:recipe作为[hard-rockers]部分的配方,因为规则4。构建

[buildout]
parts = rockers

[rock]
question = Why do I rock $${:rocking-style}?
rocking-style = $${:rocking-style}
recipe = zc.recipe.macro:test4

[hard-rocker-parameters]
rocking-style = so hard

[rockers]
recipe = zc.recipe.macro
macro = rock
targets = hard-rocker:hard-rocker-parameters

结果

[hard-rocker]
question = Why do I rock so hard?
recipe = zc.recipe.macro:test4
rocking-style = so hard

在以下构建中,将使用${rockers:result-recipe},因为规则3。构建

[buildout]
parts = rockers

[rock]
question = Why do I rock $${:rocking-style}?
rocking-style = $${:rocking-style}
recipe = zc.recipe.macro:test4

[hard-rocker-parameters]
rocking-style = so hard

[rockers]
recipe = zc.recipe.macro
result-recipe = zc.recipe.macro:test3
macro = rock
targets = hard-rocker:hard-rocker-parameters

结果

[hard-rocker]
question = Why do I rock so hard?
recipe = zc.recipe.macro:test3
rocking-style = so hard

在以下构建中,将使用${hard-rocker-parameters:result-recipe},因为规则2。构建

[buildout]
parts = rockers

[rock]
question = Why do I rock $${:rocking-style}?
rocking-style = $${:rocking-style}
recipe = zc.recipe.macro:test4

[hard-rocker-parameters]
result-recipe = zc.recipe.macro:test2
rocking-style = so hard

[rockers]
recipe = zc.recipe.macro
result-recipe = zc.recipe.macro:test3
macro = rock
targets = hard-rocker:hard-rocker-parameters

结果

[hard-rocker]
question = Why do I rock so hard?
recipe = zc.recipe.macro:test2
rocking-style = so hard

在以下构建中,将使用${hard-rocker-parameters:recipe},因为规则1。构建

[buildout]
parts = rockers

[rock]
question = Why do I rock $${:rocking-style}?
rocking-style = $${:rocking-style}
recipe = zc.recipe.macro:test4

[hard-rocker-parameters]
recipe = zc.recipe.macro:test1
result-recipe = zc.recipe.macro:test2
rocking-style = so hard

[rockers]
recipe = zc.recipe.macro
result-recipe = zc.recipe.macro:test3
macro = rock
targets = hard-rocker:hard-rocker-parameters

结果

[hard-rocker]
question = Why do I rock so hard?
recipe = zc.recipe.macro:test1
rocking-style = so hard

特殊变量

zc.recipe.macro使用__name__表示宏调用的部分名称。这允许用户不知道特定部分的名称,但仍然可以在输出中使用它。

Buildout

[buildout]
parts = rockers

[rock]
question = Why does $${:__name__} rock $${:rocking-style}?

[hard-rocker-parameters]
rocking-style = so hard

[socks-rocker-parameters]
rocking-style = my socks

[tired-rocker-parameters]
rocking-style = all night

[rockers]
recipe = zc.recipe.macro
result-recipe = zc.recipe.macro:empty
macro = rock
targets =
    hard-rocker:hard-rocker-parameters
    socks-rocker:socks-rocker-parameters
    tired-rocker:tired-rocker-parameters

结果

[rockers]
recipe = zc.recipe.macro:empty
result-sections = hard-rocker socks-rocker tired-rocker

[hard-rocker]
question = Why does hard-rocker rock so hard?
recipe = zc.recipe.macro:empty

[socks-rocker]
question = Why does socks-rocker rock my socks?
recipe = zc.recipe.macro:empty

[tired-rocker]
question = Why does tired-rocker rock all night?
recipe = zc.recipe.macro:empty

变更记录

1.3.0 (2009-07-22)

  • 结果部分的配方选项现在按以下顺序从以下来源获取

    1. 宏目标的参数部分中的配方

    2. 宏目标的参数部分中的result-recipe

    3. 宏调用中的result-recipe

    4. 宏定义中的配方

  • 修正了一个REST错误,防止使用docutils 0.4安装包。

1.2.5 (2009-03-05)

  • 从文档中删除了版本部分。

  • 提高了测试覆盖率。

  • 将QUICKSTART.txt置于测试中,使用manuel。

  • 宏调用将增加一个result-sections值,列出它们修改或创建的部分。

  • README.txt现在主要是Manuellified。

1.2.4 (2008-07-18)

  • 修复了一个错误,该错误导致当宏利用默认值且读取默认值的选项在Options迭代中第一个出现时,自我目标的调用失败,并添加了一个回归测试。

  • 更改了测试设置,以便通过调用方法而不是创建子进程来测试构建。这使得在bin/test中使用–coverage标志成为可能,并使得调试和模拟测试输出变得更加容易。

  • 修复了添加目标,以便在调用buildout.keys()时它们可以正确显示。

1.2.3 (2008-07-11)

  • 修复了CHANGES ReST中的错误

1.2.2 (2008-07-11)

  • 修复了setup.py中的错误,其中setuptools没有被导入

  • 将CHANGES.txt中的日期格式更改为YYYY-MM-DD

1.2.1 (2008-07-10)

  • 修复了quickstart中的错误

1.2.0 (2008-07-10)

  • 第一个版本

项目详情


下载文件

下载适合您平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

zc.recipe.macro-1.3.0.tar.gz (12.7 kB 查看哈希)

上传时间

由以下机构支持

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