[Zope-CMF] GenericSetup: How to use upgradeStep?
Maurits van Rees
m.van.rees at zestsoftware.nl
Tue Aug 21 17:25:40 EDT 2007
Hi,
I am having problems understanding how the new upgradeStep
functionality of GenericSetup works. Maybe the most important
question: is there a product that already uses this, so I can look at
its code as an example?
Warning: I am quite lengthy below in describing my (mis)understanding
of upgradeSteps. Do not continue reading if you are already
sleepy. ;-)
I am testing it in a fresh Plone 3.0 site. So that makes it CMF-2.1.0
and GenericSetup-1.3.1.
Expectation
-----------
The way I expect/hope to use upgradeSteps in add-on products is:
- Have one default GS profile for first time installs.
- Have one or more upgradeSteps to go from an old to a new version.
Perhaps a new version of portal_quickinstaller (or a clever
Extensions/install.py of a product) could then apply the default
profile when installing the product and could apply the correct
upgradeSteps when _re_installing.
Example
-------
- I release version 1.0 of my testupgrade product. In
profiles/default it has this catalog.xml (some lines omitted for
clarity):
<index name="goodName" meta_type="FieldIndex" />
<index name="wrongName" meta_type="FieldIndex" />
- Alex installs version 1.0 of testupgrade by applying the GS profile.
- I spot an error in my product: one of the indexes it adds is wrong.
In profiles/default I fix this:
<index name="goodName" meta_type="FieldIndex" />
<index name="betterName" meta_type="FieldIndex" />
- For people like Alex I supply an upgradeStep to fix this in their
site. This step consists of a profile in profiles/upgrade_10-15/
with this catalog.xml:
<index name="secondField" meta_type="FieldIndex" remove="True"/>
<index name="thirdField" meta_type="FieldIndex" />
- With these fixes I release version 1.5 of testupgrade.
- Alex fixes his catalog by applying the upgradeStep.
- Betty is a first time user and installs version 1.5 by applying the
install profile.
Is something like this possible with the new upgradeSteps?
Problems
--------
In a zcml file my upgrade step would like this:
<genericsetup:upgradeStep
title="Cleanup catalog"
description="Remove secondField and add thirdField to portal_catalog"
source="1.0"
destination="1.5"
handler="Products.testupgrade.upgrades.from_10_to_15"
sortkey="1"
profile="Products.testupgrade:testupgrade-15" />
If I do not supply a handler, on Zope startup I get:
ConfigurationError: ('Missing parameter:', 'handler')
If I do not supply a profile, on Zope startup I get:
ConfigurationError: ('Missing parameter:', 'profile')
I have two problems here:
1. Since this upgradeStep needs a profile I also need to register that
profile with another zcml snippet. I had hoped that I would not
need that profile. Or rather: I had hoped that the upgradeStep
snippet would automatically register a profile (maybe by using a
name attribute).
In the ZMI there is now a notable difference between base and
extension profiles. I had also hoped for such a distinction with
respect to "upgrade profiles". As it is now, the upgradeStep
itself is nicely visible on the Upgrades tab, but it needs a base
or extension profile as well, which clutters those two lists.
The current Plone 3.0 already registers four extension profiles
using its own upgrade profiles (which I think were meant as
temporary measure before the GS upgradeSteps were in place). I
want to avoid that the list of extension profiles gets cluttered
with upgrade profiles from every add-on product.
But maybe I am missing the correct meaning of the profile in
relation to the upgradeStep, as I see a second problem.
2. I am a bit surprised that I need both a handler and a profile. As
I understand it, we are supposed to move away from setuphandlers in
python code as far as possible and instead do everything with
profiles. In fact, I have hopes that the upgradeSteps make this
better possible than in the past.
As it is, I see that the code of the python handler correctly gets
called. The profile is not applied though. I guess I could put
code in the handler that actually applies the profile. But I would
hope that the upgradeStep would handle that for me. So: is the
profile attribute of an upgradeStep meant for something else?
I hope someone can shed some light on my clouded vision of how the
upgradeSteps are supposed to work. Examples would be great. :)
--
Maurits van Rees | http://maurits.vanrees.org/ [NL]
Work | http://zestsoftware.nl/
"Do not worry about your difficulties in computers,
I can assure you mine are still greater."
More information about the Zope-CMF
mailing list