Garrett Smith wrote:

What is the difference between 'content' that gets modified and the
object that gets modified.

In my understanding the difference stems from the filesystem
metaphor behind Zope. The "content" of a Zope object corresponds
to the content of a file, while other attributes are more like descriptive
metadata (e.g. modification time).
The distinction however is not clear cut because content objects
can be much more complex than simple files and metadata can also be stored
in annotations.

In my use case, however, it makes sense to draw such a distinction
because I'm using the filesystem to store versions.
Content in this sense is simply that what can be edited by opening and writing files.
Since Zope3 supports WebDAV and FTP something similar is probably needed for
other systems too.

But I could also live with ObjectModifiedEvents only.  
I've to check all aspects of an object anyway, because
the non-content parts of an object are versionable too. Currently I loop over
all versionable attributes (which are provided by special adapters) and
try to detect all differences between new and old versions of an object.

A more radical approach would be to specify in each ObjectModifiedEvent
which aspects of an object changed. By aspect I mean the schema and the modified
field within the schema:

        class IPerson(Interface) :
               age = Attribute("The age of the person")

        class Person(object) :

        person = Person()
        person.age = 42
        zope.event.notify( ObjectModifiedEvent(person, aspect=IPerson["age"]))

File content then could be handled as a special case :
        = "">         zope.event.notify( ObjectModifiedEvent(person, aspect=IFile["data"]))

With this extension the ObjectModifiedEvents would be more informative and a loop over all versionable
attributes in my application would become unnecessary.  This would also make updates of
 catalogs more efficient.

Uwe Oestermeier
Zope3-dev mailing list

Reply via email to