[Grok-dev] Re: Grok and database generations
Sebastian Ware
sebastian at urbantalk.se
Tue Sep 4 13:05:03 EDT 2007
Excellent!
I set my default attributes in the __init__ even when they aren't
passed during instansiation. Adding them as class attributes sounds
like a much better solution! This pattern would be great to use in
sample apps.
I agree, this is solution covers my usecase just fine. Further down
the line, maybe an import/export component would be useful. :)
Mvh Sebastian
4 sep 2007 kl. 18.40 skrev Philipp von Weitershausen:
> 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
More information about the Grok-dev
mailing list