[Zope] How can a method know if it was acquired?

Itai Tavor itai@iinet.net.au
Tue, 8 Jul 2003 12:35:04 +1000


Thanks, Dieter!

Argh... this should be easy to do... another thing Zope should be doing 
for us...


On Tuesday, July 8, 2003, at 03:55 AM, Dieter Maurer wrote:

> Itai Tavor wrote at 2003-7-7 20:00 +1000:
>> I got a folderish python product with the following method:
>>
>>      def SKU(self):
>>          """ Return our SKU for the catalog """
>>          return self.sku
>>
>> The problem is that when objects contained in instances of this 
>> product
>> are cataloged, they acquire the SKU method, so they also get the sku
>> property. That is bad. So what I need is something like this:
>>
>>      def SKU(self):
>>          """ Return our SKU for the catalog """
>>          if (I was acquired):
>>              return None
>>          else:
>>              return self.sku
>>
>> But I can't figure out how to do that. Help?
>
> I fear this is impossible and would not be the right way either.
>
> The right way (in my view) would be to make indexes manageable
> and allow to set 3 boolean properties:
>
>   ALLOW_ACQUISITION= 1 # to indicate that attributes may be acquired
>   HIDE_EXCEPTIONS= 1   # silently ignore (most) exceptions during calls
>   ALLOW_CALL= 1        # indicate that attributes are called when 
> callable
>
> I have implemented an "IndexBase" class that determines the value
> of object "obj" for index "id" in the following way:
>
>   def getValue(self,obj,default= None):
>     '''the value of *obj* with respect to this index.'''
>     marker= self
>
>     # determine base value
>     id= self.id
>     if self.ALLOW_ACQUISITION:
>       val= getattr(obj,id,default)
>     elif hasattr(aq_base(obj), id): val= getattr(obj,id)
>     else: val= default
>
>     if safe_callable(val):
>       if not self.ALLOW_CALL: return default
>       try: val= val()
>       except EXCEPTIONS_NOT_TO_BE_CAUGHT: raise
>       except:
>         if self.HIDE_EXCEPTIONS: return default
>         raise
>     return val
>
>
> Dieter
>
>
Itai Tavor                       "Je sautille, donc je suis."
itai@iinet.net.au                           - Kermit the Frog
-- "Supposing a tree fell down, Pooh, when we were underneath it?"
-- "Supposing it didn't," said Pooh after careful thought.