Copying containers using zope.copypastemove does not update metadata of container contents

Bug #620353 reported by Michael Howitz on 2010-08-19
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
zope.copypastemove
Undecided
Michael Howitz
zope.dublincore
Fix Released
Undecided
Michael Howitz

Bug Description

I found something strange in metadata when copying a persistent object.

My situation is the following:
I have a container with some elements inside. I create a copy of this container using

zope.copypastemove.ObjectCopier(my_container).copyTo(my_container.__parent__)

(Actually I use zope.copypastemove.interfaces.IObjectCopier(my_container) but this calls the adapter mentioned above.)

Side note: Is this the right way to copy an persistent object nowadays?

This happens tho dublin core metadata then:
As zope.dublincore.timeannotators.CreatedAnnotator is subscribed to zope.lifecycleevent.IObjectCreatedEvent it gets called as the ObjectCopiedEvent is a subclass of ObjectCreatedEvent. The copy of the container gets a new creation date set in its metadata.

But zope.copypastemove.dispatchToSublocations calls the subscribers for the sublocations using
zope.component.subscribers((sub, event), None)

So the zope.dublincore.timeannotators.CreatedAnnotator does not get called as it is not registered for (object, event) but only for (event,).

This leads to a strange situation: the metadata of the copied container get updated but not the metadata of its contents.
This behavior has not changed since version 3.4.0 which was about 2,5 years ago.

I think this is a long-standing bug and it should it be fixed in zope.dublincore by registering the subscribers for (object, event)? (Additionally or exclusively, I'm not sure.)

Changed in zope.copypastemove:
status: New → In Progress
assignee: nobody → Michael Howitz (mh-gocept)
Michael Howitz (mh-gocept) wrote :

I implemented the described solution (additionally registering the annotators for (object, event)) here:
http://svn.zope.org/zope.dublincore/branches/icemac-lp620353/setup.py?rev=115800&view=rev

I added a test in zope.copypastemove which would have failed before as the creation date on the sub folder was not changed:
http://svn.zope.org/zope.copypastemove/branches/icemac-lp620353/setup.py?rev=115799&view=rev

Changed in zope.dublincore:
assignee: nobody → Michael Howitz (mh-gocept)
Changed in zope.copypastemove:
status: In Progress → Opinion
Changed in zope.dublincore:
status: New → Opinion
Changed in zope.copypastemove:
status: Opinion → Fix Released
Changed in zope.dublincore:
status: Opinion → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers