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)
结果部分的配方选项现在按以下顺序从以下来源获取
宏目标的参数部分中的配方
宏目标的参数部分中的result-recipe
宏调用中的result-recipe
宏定义中的配方
修正了一个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的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9107631a92bf917b199cc803196a97bd6257f4f50cb941e8fc0eb61ba0993e92 |
|
MD5 | 4b1c6705715d969a82898e2f0fc790d8 |
|
BLAKE2b-256 | 7d4364990d1df65767257663dafdf991e1aec7e4db6354092adbd79c28ed5caa |