构建的宏配方。
zc.recipe.macro的Python项目详细描述
宏快速启动
macro是一组允许部分甚至部分 从宏节和参数节动态创建。这使得 使其数据与其输出格式分离的构建。
基本用途
在宏的最基本用法中,节调用自身的宏,并且 使用自身作为参数提供程序。 构建:
[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,这是一个什么都不做的配方, 因为调用secion必须是执行recipes的一部分,并且 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?
创建部件
当然,如果只能创建部分,这就没有什么意义了 用一个假食谱。这就是result recipe选项出现的地方。
构建:
[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] 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}。这很脆弱,因为有人可能会更改 目标或按字母顺序排列明细表。调用将有一个 它在result sections变量中修改的节,在 宏被执行。
构建:
[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
结果部分配方的优先顺序
result部分的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将用于[硬摇滚] 因为第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
在下面的构建中,由于规则3,将使用${rockers:result recipe}。 构建:
[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
在下面的构建中,由于规则2,将使用${hard rocker parameters:result recipe}。 构建:
[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
在下面的构建中,由于规则1,将使用${hard rocker parameters:recipe}。 构建:
[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
特殊变量
macro使用“name”来表示宏所在节的名称 被调用。这使得人们不知道特定的 但仍在输出中使用。
构建:
[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)
结果部分的配方选项现在从下面的 来源,按以下顺序:
- recipe in the parameters section of the macro target
- result-recipe in the parameters section for the macro target
- result-recipe in the macro invocation
- recipe in the macro definition
更正一个rest错误,该错误阻止软件包与 文件编号0.4。
1.2.5(2009-03-05)
- 已从文档中删除版本部分。
- 提高了测试覆盖率。
- 使用manuel测试quickstart.txt。
- 宏调用将增加一个列出节的result sections值 他们修改或创造。
- readme.txt现在主要是手工制作的。
1.2.4(2008-07-18)
- 修正了当宏使用 默认值和选项n读到默认值,选项就出来了 首先迭代,添加回归测试。
- 更改测试设置,以便通过调用方法而不是 而不是创建子流程。这使得覆盖鞭子可以在 bin/test,并对测试输出进行调试和模拟 更容易的。
- 修正了目标的添加,这样当一个调用时它们将正确显示 buildout.keys()。
1.2.3(2008-07-11)
- 修复了更改rest中的一个错误
1.2.2(2008-07-11)
- 修复了setup.py中未导入setuptools的错误
- 将changes.txt中的日期格式更改为yyyy-mm-dd
1.2.1(2008-07-10)
- 修复了快速启动中的一个错误
1.2.0(2008-07-10)
- 首次发布