[Chandler-dev] Getting rid of all __init__ methods (for Item subclasses)

Grant Baillie grant at osafoundation.org
Thu Mar 22 12:15:05 PST 2007


On 22 Mar, 2007, at 11:58, Bryan Stearns wrote:

> Phillip J. Eby wrote:
>> In discussion with Morgen, Bear, and John, we've determined that  
>> the optimum way to support fast dump and reload with proper  
>> support for multiple inheritance and type changes due to sharing,  
>> is to get rid of custom __init__ methods for Item subclasses.
>> [...]
>> The second feature is a new 'schema.initialValues()' function that  
>> you can call in the body of a class to define how the class'  
>> attributes should be initialized.  For example:
>>
>>     class ContentItem(Item):
>>         ...
>>         schema.initialValues(
>>             createdOn = lambda self: datetime.now()
>>         )
>>
>> In other words, keyword arguments are used for the attribute  
>> names, and the values are functions taking the item as an argument  
>> and returning the desired attribute value.  The attributes are  
>> *not* limited to schema attributes; they can be transient  
>> attributes or even properties, and they override any values  
>> defined in a superclass or in the attribute's "initialValue"  
>> aspect.  This also eliminates the need for __init__ to supply  
>> default values for keyword arguments or to change default  
>> attribute values established by base classes.
>>
>> The order that individual attributes will be set in is not  
>> guaranteeed, but they are *all* set before your __setup__ method  
>> is called.  Any keyword arguments passed to __init__ will prevent  
>> that attribute value from being calculated - it'll just be set  
>> from the keyword before __setup__ is called.
> Can you please wrap this initialization with:
>        with view.observersDeferred():
>            with view.reindexingDeferred():
>                # change item class here
>                # do initialization here
>
> so that observers don't fire until the state of the object is  
> consistent? (I don't know whether disabling indexing is important,  
> but I don't think it'll hurt...)

I think, but am not 100% sure, the reindexingDeferred() is dangerous,  
since setting attributes (in general) can cause reindexing of  
FilterCollections that depend on those attributes.

--Grant




More information about the chandler-dev mailing list