[Zope-dev] ZPatterns AttributeProvider question

Phillip J. Eby pje@telecommunity.com
Sat, 21 Apr 2001 13:53:49 -0500


At 08:18 PM 4/21/01 +0200, Christian Scholz wrote:
>Hi!
>
>> > Good evening everybody!
>> > 
>> > I have some question regarding attribute and agent programming for
ZPatterns.
>> > 
>> > I have some provider which is registered for the "handlers" and
"attributes"
>> > methods and some attributes.
>> > 
>> > My problem is when trying to create a new object and directly editing
it, e.g.
>> > 
>> > obj=newItem()
>> > obj.propertysheets.data.manage_changeProperties(foobar=13)
>> > 
>> > the propertysheet is defined and my provider is also registered for
>> > handling the property "foobar". Unfortunately my SetAttributeFor() method
>> > is never called.
>> 
>> 
>> Have you defined a namesForRegistration method in your provider?
>
>Yes, as said above it registers for handlers and attributes. Also
>_objectChanged and _SetAttributeFor() etc. are called. They're just not
called 
>directly after creating the object (when being in the same request that is).

_objectChanged() is a transaction-commit message.  You'll only get it when
the (sub)transaction commits.  You'll receive _objectChanging() just
*before* the object changes.

As for _SetAttributeFor(), it should be called at the time
manage_changeProperties executes, not at object creation.  Are you sure
that you have it properly named and that it isn't still being defined by
one of your ancestor classes instead?  The "AttributeProvider" and
"GTMixin" base classes in ZPatterns implement _SetAttributeFor() by simply
noting the change for later.  If you don't override this behavior, your
class won't see _SetAttributFor() itself.