[Grok-dev] Grok schema migrations (was Re: Getting the application
in views and viewlets)
Kevin Smith
kevin at mcweekly.com
Fri Jun 20 20:32:11 EDT 2008
Hey Kevin,
I cargo-culted this one awhile back, it goes something like this....
/myproject/app.py
from generations import schemaManager
from zope.app.generations.interfaces import ISchemaManager
#register schema_manager for generations of this content
grok.global_utility(schemaManager, provides=ISchemaManager,
name=u'generations') # name may be optional
myproject/generations/__init__.py
from zope.app.generations.generations import SchemaManager
pkg = 'myproject.generations'
def schemaManager(*args, **kw):
return SchemaManager(minimum_generation=1,
generation=1,
package_name=pkg)
# can't remember if you need to start with generation 0 or 1 whatever
the number is, it is a convention and will generations look for the
module "evolve%s.py" % SchemaManager.generation as defined above
#so in this example evolve1.py is sought in the generations package
myproject/generations/evolve1.py
#this is tied to the preceding generation number
from zope.app.zopeappgenerations import getRootFolder
from myproject.app import MyModel
def evolve(context):
""" Upgrade schemas
"""
root_folder = getRootFolder(context)
from zope.app.generations.utility import findObjectsMatching
for myobj in findObjectsMatching(root_folder,
lambda ob:isinstance(ob, MyModel )):
myobj.myattr = True
# you'll definately want to have a look at findObjectsMatching, it makes
it easy to iterate through the entire zodb
Somone correct me if I'm wrong, but it's possible that grok may not
define the utility early enough, if that is the case you may need to use
configure.zcml
<zope:utility
name="generations"
provides="zope.app.generations.interfaces.ISchemaManager"
factory=".generations.schemaManager"
/>
HTH,
Kevin Smith
Kevin Teague wrote:
>>>
>> Well, it's content upgrades in general, and yes, it would be possible
>> to build a nicer solution that what's available right now with
>> zope.generations. It's just it needs some time investment of a few
>> people to design it and implement it. It'd make a good sprint topic too.
>
> I am trying to get zope.app.generations working in a Grok app ATM. Has
> anyone done this? Anyone have any example code? (I'm finding the
> zope.app.generations docs a bit tough to get started with). Any
> comment on what kind of improvements could be made over the existing
> generations package?
>
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> http://mail.zope.org/mailman/listinfo/grok-dev
>
>
More information about the Grok-dev
mailing list