[Checkins] SVN: zc.recipe.macro/trunk/ Merge precedence-setting code onto the trunk.
Aaron Lehmann
aaron at zope.com
Sun Mar 8 01:45:26 EST 2009
Log message for revision 97645:
Merge precedence-setting code onto the trunk.
Changed:
U zc.recipe.macro/trunk/CHANGES.txt
U zc.recipe.macro/trunk/setup.py
U zc.recipe.macro/trunk/src/zc/recipe/macro/QUICKSTART.txt
U zc.recipe.macro/trunk/src/zc/recipe/macro/README.txt
U zc.recipe.macro/trunk/src/zc/recipe/macro/recipe.py
-=-
Modified: zc.recipe.macro/trunk/CHANGES.txt
===================================================================
--- zc.recipe.macro/trunk/CHANGES.txt 2009-03-08 06:42:07 UTC (rev 97644)
+++ zc.recipe.macro/trunk/CHANGES.txt 2009-03-08 06:45:25 UTC (rev 97645)
@@ -1,6 +1,20 @@
CHANGES
=======
+1.2.6 (unreleased)
+------------------
+
+- The recipe option for result sections is now pulled from the following
+ sources, in this order:
+
+ 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
+
+- Correct a rest error, that prevent the package of being installed with
+ docutils 0.4.
+
1.2.5 (2009-03-05)
------------------
Modified: zc.recipe.macro/trunk/setup.py
===================================================================
--- zc.recipe.macro/trunk/setup.py 2009-03-08 06:42:07 UTC (rev 97644)
+++ zc.recipe.macro/trunk/setup.py 2009-03-08 06:45:25 UTC (rev 97645)
@@ -75,7 +75,10 @@
ENTRY_POINTS = """
[zc.buildout]
default = zc.recipe.macro:Macro
-test = zc.recipe.macro:Test
+test1 = zc.recipe.macro:Test
+test2 = zc.recipe.macro:Test
+test3 = zc.recipe.macro:Test
+test4 = zc.recipe.macro:Test
empty = zc.recipe.macro:Empty
"""
Modified: zc.recipe.macro/trunk/src/zc/recipe/macro/QUICKSTART.txt
===================================================================
--- zc.recipe.macro/trunk/src/zc/recipe/macro/QUICKSTART.txt 2009-03-08 06:42:07 UTC (rev 97644)
+++ zc.recipe.macro/trunk/src/zc/recipe/macro/QUICKSTART.txt 2009-03-08 06:45:25 UTC (rev 97645)
@@ -77,14 +77,14 @@
[hard-rocker]
recipe = zc.recipe.macro
- result-recipe = zc.recipe.macro:test
+ result-recipe = zc.recipe.macro:test1
macro = rock
rocking-style = so hard
Result::
[hard-rocker]
- recipe = zc.recipe.macro:test
+ recipe = zc.recipe.macro:test1
result-sections = hard-rocker
question = Why do I rock so hard?
rocking-style = so hard
@@ -171,7 +171,7 @@
[rockers]
recipe = zc.recipe.macro
- result-recipe = zc.recipe.macro:test
+ result-recipe = zc.recipe.macro:test1
macro = rock
targets =
hard-rocker:hard-rocker-parameters
@@ -180,22 +180,151 @@
Result::
+ [rockers]
+ result-sections = hard-rocker socks-rocker tired-rocker
+
[hard-rocker]
question = Why do I rock so hard?
- recipe = zc.recipe.macro:test
+ recipe = zc.recipe.macro:test1
rocking-style = so hard
[socks-rocker]
question = Why do I rock my socks?
- recipe = zc.recipe.macro:test
+ recipe = zc.recipe.macro:test1
rocking-style = my socks
[tired-rocker]
question = Why do I rock all night?
- recipe = zc.recipe.macro:test
+ recipe = zc.recipe.macro:test1
rocking-style = all night
+Order of Precedence for Recipes for Result Sections
+---------------------------------------------------
+
+The source for the `recipe` option for result sections has a particular
+precedence, as follows::
+
+ 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
+
+The following tests will illustrate these rules, starting with rule 4 and
+building up.
+
+In the following buildout, rock:recipe will be used in the [hard-rockers]
+section as the recipe, because of rule 4.
+Buildout::
+
+ [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
+
+Result::
+
+ [hard-rocker]
+ question = Why do I rock so hard?
+ recipe = zc.recipe.macro:test4
+ rocking-style = so hard
+
+In the following buildout, ${rockers:result-recipe} will be used because of rule 3.
+Buildout::
+
+ [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
+
+Result::
+
+ [hard-rocker]
+ question = Why do I rock so hard?
+ recipe = zc.recipe.macro:test3
+ rocking-style = so hard
+
+In the following buildout, ${hard-rocker-paramers:result-recipe} will be used because of rule 2.
+Buildout::
+
+ [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
+
+Result::
+
+ [hard-rocker]
+ question = Why do I rock so hard?
+ recipe = zc.recipe.macro:test2
+ rocking-style = so hard
+
+In the following buildout, ${hard-rocker-parameters:recipe} will be used because of rule 1.
+Buildout::
+
+ [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
+
+Result::
+
+ [hard-rocker]
+ question = Why do I rock so hard?
+ recipe = zc.recipe.macro:test1
+ rocking-style = so hard
+
+
Special Variables
-----------------
Modified: zc.recipe.macro/trunk/src/zc/recipe/macro/README.txt
===================================================================
--- zc.recipe.macro/trunk/src/zc/recipe/macro/README.txt 2009-03-08 06:42:07 UTC (rev 97644)
+++ zc.recipe.macro/trunk/src/zc/recipe/macro/README.txt 2009-03-08 06:45:25 UTC (rev 97645)
@@ -38,14 +38,14 @@
[instance0]
recipe = zc.recipe.macro
- result-recipe = zc.recipe.macro:test
+ result-recipe = zc.recipe.macro:test1
macro = instance-macro
address = 8080
monitor-port = 8089
[instance1]
recipe = zc.recipe.macro
- result-recipe = zc.recipe.macro:test
+ result-recipe = zc.recipe.macro:test1
macro = instance-macro
address = 9080
monitor-port = 9089
@@ -56,7 +56,7 @@
- These parts in turn specified that they would be using the
macro system: ``recipe = zc.recipe.macro``.
-- The output of the macro should be used with the ``zc.recipe.macro:test``
+- The output of the macro should be used with the ``zc.recipe.macro:test1``
recipe, as specified by the ``result-recipe`` option.
- This resulting recipe will receive the ``address`` option from the two
@@ -337,7 +337,7 @@
[instance0]
recipe = zc.recipe.macro
- result-recipe = zc.recipe.macro:test
+ result-recipe = zc.recipe.macro:test1
macro = instance-macro
Result::
@@ -346,7 +346,7 @@
address = 8080
application = application
monitor-port = 8089
- recipe = zc.recipe.macro:test
+ recipe = zc.recipe.macro:test1
result-sections = instance0
zope.conf =
<eventlog>
@@ -421,7 +421,7 @@
...
... [instance0]
... recipe = zc.recipe.macro
- ... result-recipe = zc.recipe.macro:test
+ ... result-recipe = zc.recipe.macro:test1
... macro = instance-macro
... """)
>>> buildout.install([])
@@ -442,7 +442,7 @@
'instance0': {'address': '8080',
'application': 'application',
'monitor-port': '8089',
- 'recipe': 'zc.recipe.macro:test',
+ 'recipe': 'zc.recipe.macro:test1',
'result-sections': 'instance0',
'zope.conf': '
<eventlog>
Modified: zc.recipe.macro/trunk/src/zc/recipe/macro/recipe.py
===================================================================
--- zc.recipe.macro/trunk/src/zc/recipe/macro/recipe.py 2009-03-08 06:42:07 UTC (rev 97644)
+++ zc.recipe.macro/trunk/src/zc/recipe/macro/recipe.py 2009-03-08 06:45:25 UTC (rev 97645)
@@ -35,7 +35,7 @@
new_macro[key] = c_re.sub(
replace_match, value.replace('$${:__name__}', name))
if recipe:
- new_macro['recipe'] = new_macro.get('recipe', recipe)
+ new_macro['recipe'] = recipe
return new_macro
def parse_target(invoker, target):
@@ -44,9 +44,21 @@
target, input_section = target.split(':')
return target, input_section
+def get_recipe(invocation_section, macro_section, parameter_section, default=None):
+ if 'recipe' in parameter_section:
+ return parameter_section['recipe']
+ elif 'result-recipe' in parameter_section:
+ return parameter_section['result-recipe']
+ elif 'result-recipe' in invocation_section:
+ return invocation_section['result-recipe']
+ elif 'recipe' in macro_section:
+ return macro_section['recipe']
+ else:
+ return default
+
+
def Macro(buildout, name, options):
del options['recipe']
- recipe = options.pop('result-recipe', '')
macro = options.pop('macro').strip()
targets = options.pop('targets', name).strip().split()
macro_summation = {}
@@ -55,12 +67,14 @@
new_sections = []
for output, input in (parse_target(name, target) for target in targets):
+ recipe = get_recipe(options, macro_summation, buildout[input])
new_sections.append(output)
opt = Options(
buildout,
output,
evaluate_macro(
buildout, output, macro_summation, input, recipe))
+ opt.pop('result-recipe', '')
if output == name:
# If we're targetting the invoker
options._raw.update(opt._raw)
@@ -68,7 +82,7 @@
else:
# If we're targetting some other section
buildout._raw[output] = opt._raw
- #opt._initialize()
+ options.pop('result-recipe', '')
#Make a result-sections variable holding the sections that are modified
if new_sections:
@@ -116,3 +130,5 @@
def uninstall(self):
pass
+
+
More information about the Checkins
mailing list