[Zope-dev] Problems with zclass and instances!!!

Tim McLaughlin tim@iterationzero.com
Fri, 3 Aug 2001 07:34:05 -0400


Edgardo,
Have you tried accessing the __dict__ attribute of the instance in an
External Method.  This should let you know if the attribute in question is
being inherited or not.  Try something like this...

def isOnInstance(self, name):
	if self.aq_base.__dict__.has_key(name):
		return "I've got it"
	else:
		return "My parent has it"

Note: if you ever call manage_editProperties, all properties on that sheet
will be set on the instance and not inherited.  Use manage_changeProperties
to only set a those specified...

Tim

> Message: 4
> From: "Edgardo Zulian" <ezulian@elsitio.com.ar>
> To: <zope-dev@zope.org>
> Subject: [Zope-dev] Problems with zclass and instances!!!
> Date: Thu, 2 Aug 2001 11:17:34 -0300
>
> Hi there:
>
> I have created a product 'X' with a zclass call 'X1'. This X1
> zclass in the
> propertysheet has a Common Instance Property Sheet called  'section'
> (/Control_Panel/Products/X/X1/propertysheets/common/section),
> with some
> properties with default values:
> ie. one of it's property is call ed  'section1' with the
> default value 'left
> side', the type of   this property is 'string':
> section1  'left side'    string
>
> Then in the views  of  the zclass I 've  added  a method
> "propertysheets/section/manage",
> so when I create an instance I can enter to this propertysheet.
>
>
> So the problem is here:
>
>  When I create an instance of this  'X1' zclass an I enter to this
> propertysheet/section ,   I can change the default value of
> 'section1' which
> was 'left side' to 'center side' for example.
>
> But then if i change the original default value of my zclass
> 'X1' to 'right
> side' let say. The change will not be reflected in my
> instance,   which is
> okey because i have change d  the value to 'center side' before.
>
> Another case is when I  create another instance  of 'X1'
> zclass   without
> making any change to the value of 'section1'  and click on
> save changes,
> then if I change the default value in the zclass, the change
> will not be
> reflected in this instance.
>
> So the question is:
>
> There is a way to recognize when an instance will not take
> the changes that
> are make to the default values of a propertysheets (in this case
> thepropertysheet 'section' )  of a zclass from which they inheritance?
>
>  I try with this lines in an external method, but nothing:
>
>    self=self._getOb('instanceTest')         # instanceTest is
> the name of
> the instance of the 'X1 Zclass'
>    a=getattr(self,'meta_type')
>    b=getattr(self.__class__,'meta_type')
>    # in this example the answer was the same: X1
>
>    a=eval('self.__class__.propertysheets.section._propertyMap()')
>    b=eval('self.propertysheets.section._propertyMap()')
>    # the answer was again the same: {'id': 'section1', 'type':
> 'string','meta': {}, 'mode': 'w'}
>
>    #I try acceding to the zclass to know if it was different from
> theinstance...
>
> a=eval('self.Control_Panel.Products.X.propertysheets.common.se
> ction.property
> Map()')
>    # the answer not help: {'id': 'section1', 'type':
> 'string', 'meta': {}},
>
> I cannot found any property or something that help me...
>
> I don't know where to look or what to try next....if anybody
> can help me
> with this.......
>
> Thanks in advance
> Edgardo
>