Changeset 4184

Show
Ignore:
Timestamp:
06/25/08 18:09:33 (2 months ago)
Author:
ed
Message:

Improved the object resolution for string references.

Removed bare 'except:' lines.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/dabo/ui/dDataControlMixinBase.py

    r4178 r4184  
    117117                    self.Value = self.getBlankValue() 
    118118        else: 
    119             if self._srcIsInstanceMethod is None and self.Source is not None: 
    120                 if isinstance(self.Source, basestring): 
     119            src = self.Source 
     120            if self._srcIsInstanceMethod is None and src is not None: 
     121                if isinstance(src, basestring): 
    121122                    self._srcIsInstanceMethod = False 
    122123                else: 
    123                     self._srcIsInstanceMethod = eval("type(self.Source.%s)" % self.DataField) == type(self.update) 
     124                    self._srcIsInstanceMethod = callable(getattr(src, self.DataField)) 
     125            srcatt = getattr(src, self.DataField) 
    124126            if self._srcIsInstanceMethod: 
    125                 expr = "self.Source.%s()" % self.DataField 
     127                self.Value = srcatt() 
    126128            else: 
    127                 expr = "self.Source.%s" % self.DataField 
    128             try: 
    129                 self.Value = eval(expr) 
    130             except: 
    131                 ## Couldn't evaluate, for whatever reason. Do the same thing that we do 
    132                 ## for bizobj datasources: fill in the blank value. 
    133                 self.Value = self.getBlankValue() 
    134                 #dabo.errorLog.write("Could not evaluate value for %s" % expr) 
     129                self.Value = srcatt 
    135130 
    136131 
     
    340335            try: 
    341336                self._designerMode = self.Form._designerMode 
    342             except
     337            except AttributeError
    343338                self._designerMode = False 
    344339        return self._designerMode 
     
    380375                    elif ds.startswith("self."): 
    381376                        # it's a locally resolvable reference. 
    382                         try: 
    383                             self.__src = eval(ds) 
    384                             self._srcIsBizobj = isinstance(self.__src, dabo.biz.dBizobj) 
    385                         except: 
    386                             dabo.errorLog.write("Couldn't evaluate DataSource '%s'" % ds) 
     377                        def resolveObjRef(txt, ref=None): 
     378                            sp = txt.split(".", 1) 
     379                            if ref is None: 
     380                                ref = eval(sp[0]) 
     381                                return resolveObjRef(sp[1], ref) 
     382                            else: 
     383                                try: 
     384                                    ref = getattr(ref, sp[0]) 
     385                                except AttributeError: 
     386                                    return None 
     387                                if len(sp) > 1: 
     388                                    return resolveObjRef(sp[1], ref) 
     389                                else: 
     390                                    return ref 
     391                        nonself = ds.split(".", 1)[1] 
     392                        self.__src = resolveObjRef(nonself, self) 
     393                        self._srcIsBizobj = isinstance(self.__src, dabo.biz.dBizobj) 
    387394                    else: 
    388395                        # See if it's a RegID reference to another object 
    389                         try: 
    390                             self.__src = self.Form.getObjectByRegID(ds) 
    391                         except: 
    392                             self.__src = None 
     396                        self.__src = self.Form.getObjectByRegID(ds) 
    393397                        if self.__src is None: 
    394398                            # It's a bizobj reference; get it from the Form. Note that we could