Changeset 484 for CMIP6dreq/trunk


Ignore:
Timestamp:
17/11/15 16:15:14 (5 years ago)
Author:
mjuckes
Message:

removed fragile use of dict in namedtuple

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CMIP6dreq/trunk/dreqPy/dreq.py

    r482 r484  
    1010from __init__ import DOC_DIR 
    1111 
    12 class caughtError(Exception): 
    13      def __init__(self, value): 
    14          self.value = value 
    15      def __str__(self): 
    16          return repr(self.value) 
    1712 
    1813blockSchemaFile = '%s/%s' % (DOC_DIR, 'BlockSchema.csv' ) 
     
    3631  def isIntStr( self, tv ): 
    3732    """Check whether a string is a valid representation of an integer.""" 
    38     if type( tv ) not in {type(''),type(u'')}: 
     33    if type( tv ) not in [type(''),type(u'')]: 
    3934      self.reason = 'NOT STRING' 
    4035      return False 
     
    5449       _linkAttrStyle = {} 
    5550 
    56        def __init__(self,dict=None,xmlMiniDom=None,id='defaultId',etree=False): 
    57          dictMode = dict != None 
     51       def __init__(self,idict=None,xmlMiniDom=None,id='defaultId',etree=False): 
     52         dictMode = idict != None 
    5853         mdMode = xmlMiniDom != None 
    5954         assert not( dictMode and mdMode), 'Mode must be either dictionary of minidom: both assigned' 
     
    6459         self._greenIcon = '<img height="12pt" src="/images/154g.png" alt="[i]"/>' 
    6560         if dictMode: 
    66            self.dictInit( dict ) 
     61           self.dictInit( idict ) 
    6762         elif mdMode: 
    6863           self.mdInit( xmlMiniDom, etree=etree ) 
     
    9388 
    9489       def __href__(self,odir="",label=None): 
    95          igns =  {'','__unset__'} 
     90         igns =  ['','__unset__'] 
    9691         if 'description' in self.__dict__ and self.description != None and string.strip( self.description ) not in igns: 
    9792           ttl = self.description 
     
    175170 
    176171 
    177        def dictInit( self, dict ): 
     172       def dictInit( self, idict ): 
    178173         __doc__ = """Initialise from a dictionary.""" 
    179174         for a in self._a.keys(): 
    180            if a in dict: 
    181              self.__dict__[a] = dict[a] 
     175           if a in idict: 
     176             val = idict[a] 
    182177           else: 
    183              self.__dict__[a] = self._d.defaults.get( a, self._d.glob ) 
     178             val = self._d.defaults.get( a, self._d.glob ) 
     179           setattr( self, a, val ) 
    184180         self._contentInitialised = True 
    185181 
     
    218214                 v = string.strip(v) 
    219215                 thissect = '%s [%s]' % (self._h.title,self._h.tag) 
    220                  if v in { '',u'',' ', u' '}: 
     216                 if v in [ '',u'',' ', u' ']: 
    221217                   if nw1 < 20: 
    222218                     print ( 'WARN.050.0001: input integer non-compliant: %s: %s: "%s" -- set to zero' % (thissect,a,v) ) 
     
    231227                     deferredHandling=True 
    232228             elif self._a[a].type == u'xs:boolean': 
    233                v = v in {'true','1'} 
     229               v = v in ['true','1'] 
    234230             self.__dict__[a] = v 
    235231           else: 
    236              if a in {'uid'}: 
     232             if a in ['uid',]: 
    237233               thissect = '%s [%s]' % (self._h.title,self._h.tag) 
    238234               print ( 'ERROR.020.0001: missing uid: %s' % thissect ) 
     
    310306    self.tt0 = {} 
    311307    for k in self.bscc: 
    312       self.tt0[k] = self._tableClass0(dict=self.bscc[k]) 
     308      self.tt0[k] = self._tableClass0(idict=self.bscc[k]) 
    313309      if k in self._t0.attributes: 
    314310        setattr( self._tableClass0, '%s' % k, self.tt0[k] ) 
     
    330326    for v in vl: 
    331327      t = self.parsevcfg(v) 
    332       if not hasattr( t.header, '__dict__' ): 
    333         print ('FATAL ERROR: no __dict__ attribute in header: parsing %s [%s]' % (v, vl.index(v))  ) 
    334         print (type(t.header).__name__ ) 
    335         print ( string.join( dir( t.header ) ) ) 
    336         raise caughtError( 'FATAL ERROR: no __dict__ attribute in header' ) 
    337328      tables[t[0].label] = t 
    338329      self.tableClasses[t[0].label] = self.itemClassFact( t, ns=self.ns ) 
    339330      thisc = self.tableClasses[t[0].label] 
    340       self.tt1[t[0].label] = self._sectClass0( dict=t.header.__dict__ ) 
     331      self.tt1[t[0].label] = self._sectClass0( idict=t.header._asdict() ) 
    341332      self.tt1[t[0].label].maxOccurs = t.header.maxOccurs 
    342333      self.tt1[t[0].label].labUnique = t.header.labUnique 
     
    493484      returnClass = True 
    494485      if returnClass: 
    495         return self._tableClass0( dict=ee ) 
     486        return self._tableClass0( idict=ee ) 
    496487      else: 
    497488        return self.nti( i.nodeName, l,t,ty,cls,tn ) 
Note: See TracChangeset for help on using the changeset viewer.