[Zope3-dev] Re: Event fixes

Florent Guillaume fg at nuxeo.com
Tue Nov 29 08:06:55 EST 2005


Hi,

On 29 Nov 2005, at 08:27, Dominik Huber wrote:
> Florent Guillaume wrote:
>>
>> Excuse my insistence, but the only thing I *added* was a  
>> modification  event when you reorder the children of an ordered  
>> container. Before  attacking it, please undestand what I checked in.
>
> Excuse the confusion of my mail. I was to tired yesterday. I try it  
> another time :)
>
> zope.app.container.contained.py,  line 594
> def setitem(container, setitemf, name, object):
>    ...
>    if event:
>        notify(event)
>        notifyContainerModified(container)

But Dominik, before my modification, the code was:

     if event:
         notify(event)
         modified(container)

Where `modified` is defined in zope.app.event.objectevent and does:

def modified(object, *descriptions):
     notify(ObjectModifiedEvent(object, *descriptions))

So I didn't introduce a redundant event, it's always been there.

> This method is called every time when an item is set to a  
> container. Isn't it?
> Therefore additionally to the object moved resp. object added event  
> newly an container modified event is notified.
>
> The second notification is kind of redundant information to the  
> framework, because we can get all the information from the first  
> event. The only problem - and there I'm with you - is that the  
> subscription for handlers that applies to the container itself is  
> cumbersome (-> Use case A, for example modification handlers for  
> containers).
>
> The solution you have choosen to solve use case A brings two  
> disadvantages to my applications:
>
> 1. I'm not able to make batchwise additions to a container and  
> notify afterward a single modification event of the container  
> anymore (Anology: Modification event within the form framework are  
> notified by views (adapters) -> The model itself notifies never an  
> modification, because those events would be to granular (an event  
> for each edited attribute)
>
> 2. For complex event proceeding of components I sometimes use a  
> single handler that is registered to different events. This brings  
> the advantage that you can bundle event-specific code within one  
> handler (omit redundant and distributed logic -> more  
> understandable). Now the disadvantage is that  those handlers get  
> invoked twice during the same logical transaction (once by moved  
> event and right afterward by the modified event). This additional  
> event is cluttering, because once the container modified event is  
> notified to handle an additional container state (-> Use case B,  
> for example ordered containers) and once a only state that is  
> already covered by the moved event. The container modified event  
> covers two use cases (A and B), but is not able to model them  
> semantically.

These are two very valid use cases, and I believe they are answered  
by pre-setting __parent__ and __name__ on the object before adding/ 
moving/removing it -- again, code I didn't introduce. Please read the  
docstring for containedEvent() and uncontained().

Florent

>
>
> Other solution would be...
> Use Case A:... to dispatch the moved event using a similar  
> mechanism like dispatchToSublocations-handler (- 
> >dispatchToParentHandler) without notifying a second modified event.
>
> Use Cas B: as you proposed or modification descriptors
>
> Mixture Use Case A and B: We could use modification descriptors to  
> stuff the semantical lack of the container modified event, but  
> then... ;)
>
>>> I think I understand your intention. The only thing I realy  
>>> defend  is the fact that we should not implement different  
>>> approaches  (models of a containment hierarchy) using the same  
>>> events, because  we have no change to differ those point of views  
>>> within our event  handlers. Therefore it is very important that  
>>> we notify only one  event (IObjectModifiedEvent.isOrExtends 
>>> (event)), because we don't  have a chance to check for redundant  
>>> event informations that  affects different logical systems.
>>>
>>> I'm realy tired of this hick-hack-thread. IMO the correct way  
>>> would  be a proposal for such a fundamental change.
>>
>>
>> I'm always for a good dicussion thread when things have to be  
>> explained.
>>
>> But here I think there's a big misunderstanding.
>
> I hope I could lighten the msiunderstanding a little bit.
>
> Regards,
> Dominik
> <dominik.huber.vcf>

-- 
Florent Guillaume, Nuxeo (Paris, France)   Director of R&D
+33 1 40 33 71 59   http://nuxeo.com   fg at nuxeo.com





More information about the Zope3-dev mailing list