[ZPatterns] fixed in CVS (was re: Problem in latest ZPatterns: setattr, id, etc.)

Jean Jordaan jean@upfrontsystems.co.za
Mon, 1 Oct 2001 16:19:18 +0200


Hi Steve, all 

The patch works, and I wanted to apply it locally in a site-wide manner, 
so I thought that a logical place to do this might be our checkout of the 
public ZPatterns CVS repository (anoncvs.eby-sarna.com). 

However, when doing this, I noticed that the '_v_parent' issue has been
addressed in CVS in August, but in a different manner from yours (that 
is, SteveA's). Here is the relevant snippet. This ZPatterns version also 
works for me. I'd be completely out of my depth if I tried to compare 
the two, but would like to ask which one should go in TransactionAgents?

Regards,
Jean

============================
File: DataSkins.py      Status: Up-to-date

   Working revision:    1.60
   Repository revision: 1.60    /cvsroot/ZProducts/ZPatterns/DataSkins.py,v
----------------------------
symbolic names:
    ZPatterns-0-4-3p2: 1.59
[...]
----------------------------
revision 1.60
date: 2001/08/13 17:00:53;  author: pje;  state: Exp;  lines: +48 -7
Added fixes for setId-before-__of__ problems.
----------------------------

    def __set_attr__(self,name,val,_v_dm_=_v_dm_):

        d = self.__dict__
        
        try:
            dm = d[_v_dm_]
        except KeyError:
            if name=='id' and val==d['id']: return
            raise

        if d.has_key('_v_parent'):
        
            # Only try providers if we're bound to a canonical parent
            
            self = self._canonicalForm()
            self._objectChanging(name)

            for ap in dm._getProvidersFor(self,'setattr',(name,'*')):
                if ap._SetAttributeFor(self,name,val):
                    return