[Grok-dev] Grok schema migrations (was Re: Getting the application in views and viewlets)

Kevin Smith kevin at mcweekly.com
Fri Jun 20 20:37:43 EDT 2008


Hey Kevin,

Actually, I stopped using zope.generations after learning how to program 
defensively from Phillip, see below.



On Sep 4 2007, 9:40 am, Philipp von Weitershausen 
<phil... at weitershausen.de> wrote:
 > Sebastian Ware wrote:
 > > I have been looking at the zope.app.generations package. For those who
 > > don't know about it, generations keeps track on your objects. The
 > > generations schema manager allows you to execute an evolve method in
 > > order to update objects to a required level of functionality. To
 > > determine which objects to update ituses a counter.
 >
 > > However, my most usual use case is that I have added some new default
 > > values to the __init__ method of a class and I want to update all the
 > > objects of that class to reflect this change. But I want to do this
 > > without having to write any extra code. I just want to sync my 
objects...
 >
 > > Is there any simple and smart way I could do this?
 >
 > Yup. It's called class attributes. When an instance doesn't have a
 > particular attribute, but a class does, the class attribute will be
 > used. When overwritten, it will be done so on the instance. For example::
 >
 >    class Foo(object):
 >
 >        # make sure old instances also get this attribute
 >        attr = default_value_for_old_instances
 >
 >        def __init__(self, attr=some_default):
 >            self.attr = attr
 >
 > So if you have an instance of 'Foo' that was created before __init__ set
 > the 'attr' attribute, it will now be possible to say 'foo_instance.attr'
 > and it will resolve to 'default_value_for_old_instances'.
 >
 > > If not, would this not be an excellent feature to add to Grok?
 >
 > For simple cases, I think defensive programming (e.g. gracefully
 > handling the absence of attributes) and tricks like I've shown above
 > work well enough that we don't need something special in Grok.
 >
 > *If* we have to introduce something to Grok, then it'll likely have to
 > handle trickier things as well. But tricky things are hard to do
 > in-place. They usually require good understanding of the way the ZODB
 > works. I think 'dump and reload' is much easier when you have massive
 > and/or tricky refactorings going on. As Tres says, it's not a surprise
 > that pretty much all RDBMS do it this way.
 >
 > --http://worldcookery.com-- Professional Zope documentation and training
 > _______________________________________________
 > Grok-dev mailing list
 > Grok-... at zope.orghttp://mail.zope.org/mailman/listinfo/grok-dev


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