Ignore:
Timestamp:
09/01/16 07:55:20 (5 years ago)
Author:
mjuckes
Message:

updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CMIP6dreqbuild/trunk/src/framework/dreqPy/dreq.py

    r539 r546  
    6565 
    6666       def __init__(self,idict=None,xmlMiniDom=None,id='defaultId',etree=False): 
     67         self._strictRead = True 
    6768         dictMode = idict != None 
    6869         mdMode = xmlMiniDom != None 
     
    238239               aa = '%s%s' % (self.ns,a) 
    239240               tvtl.append( (a,True, str( el.get( a ) ) ) ) 
     241             elif self._a[a].__dict__.get( 'required', True ) in [False,'false',u'false']: 
     242               tvtl.append( (a,True,None) ) 
    240243             else: 
    241244               tvtl.append( (a,False,None) ) 
     
    244247             if el.hasAttribute( a ): 
    245248               tvtl.append( (a,True, str( el.getAttribute( a ) ) ) ) 
    246              else: 
     249## 
     250## attributes are treated as required unless they have a required attribute set to false 
     251## 
     252             elif self._a[a].__dict__.get( 'required', True ) not in [False,'false',u'false']: 
    247253               tvtl.append( (a,False,None) ) 
    248254        
    249255         for a,tv,v in tvtl: 
    250256           if tv: 
    251              if self._a[a].type == u'xs:float': 
     257             if v == None: 
     258               pass 
     259             elif self._a[a].type == u'xs:float': 
    252260               if v == '': 
    253261                 v = None 
     
    258266                   print ( 'Failed to convert real number: %s,%s,%s' % (a,tv,v) ) 
    259267                   raise 
     268             elif self._a[a].type in [u'aa:st__floatList', u'aa:st__floatListMonInc']: 
     269                 v = [float(x) for x in string.split(v)] 
     270             elif self._a[a].type in [u'aa:st__integerList', u'aa:st__integerListMonInc']: 
     271                 ##print a,self._a[a].type,str(v) 
     272                 v = [int(x) for x in string.split(v)] 
     273                 if self._a[a].type in [u'aa:st__integerListMonInc'] and self._strictRead: 
     274                   ##print a,self._a[a].type,str(v) 
     275                   for i in range(len(v)-1): 
     276                     assert v[i] < v[i+1], 'Attribute %s of type %s with non-monotonic value: %s' % (a,self._a[a].type,str(v)) 
    260277             elif self._a[a].type == u'xs:integer': 
    261278               if self._rc.isIntStr( v ): 
     
    278295             elif self._a[a].type == u'xs:boolean': 
    279296               v = v in ['true','1'] 
     297             elif self._a[a].type not in [u'xs:string']: 
     298               print ('ERROR: Type %s not recognised' % self._a[a].type ) 
    280299             self.__dict__[a] = v 
    281300           else: 
     
    308327 
    309328    self.nts = collections.namedtuple( 'sectdef', ['tag','label','title','id','itemLabelMode','level','maxOccurs','labUnique','uid'] ) 
    310     self.nti = collections.namedtuple( 'itemdef', ['tag','label','title','type','useClass','techNote'] ) 
     329    self.nti = collections.namedtuple( 'itemdef', ['tag','label','title','type','useClass','techNote','required'] ) 
    311330    self.ntt = collections.namedtuple( 'sectinit', ['header','attributes','defaults'] ) 
    312331    self.nt__default = collections.namedtuple( 'deflt', ['defaults','glob'] ) 
     
    501520        idict = {'description':'An extended description of the object', 'title':'Record Description', \ 
    502521         'techNote':'', 'useClass':'__core__', 'superclass':'rdf:property',\ 
    503          'type':'xs:string', 'uid':'__core__:description', 'label':'label' } 
     522         'type':'xs:string', 'uid':'__core__:description', 'label':'label', 'required':'required' } 
    504523        if v == None: 
    505524          vtt = self.nts( '__core__', 'CoreAttributes', 'X.1 Core Attributes', '00000000', 'def', '0', '0', 'false', '__core__' ) 
     
    508527      elif v == '__sect__': 
    509528        idict = {'title':'Record Description', \ 
    510          'uid':'__core__:description', 'label':'label', 'useClass':'text', 'id':'id', 'maxOccurs':'', 'itemLabelMode':'', 'level':'', 'labUnique':'' } 
     529         'uid':'__core__:description', 'label':'label', 'useClass':'text', 'id':'id', 'maxOccurs':'', 'itemLabelMode':'', 'level':'', 'labUnique':'', 'required':'' } 
    511530        vtt = self.nts( '__sect__', 'sectionAttributes', 'X.3 Section Attributes', '00000000', 'def', '0', '0', 'false', '__sect__' ) 
    512531##<var label="var" uid="SECTION:var" useClass="vocab" title="MIP Variable" id="cmip.drv.001"> 
     
    533552      ll = [] 
    534553      ee = {} 
    535       for k in ['label','title','type','useClass','techNote','description','uid']: 
     554      for k in ['label','title','type','useClass','techNote','description','uid','required']: 
    536555        if i.hasAttribute( k ): 
    537556          ll.append( i.getAttribute( k ) ) 
     
    539558          ll.append( defs.get( k, None ) ) 
    540559        ee[k] = ll[-1] 
    541       l, t, ty, cls, tn, desc, uid = ll 
     560      l, t, ty, cls, tn, desc, uid, rq = ll 
    542561      self.lastTitle = t 
    543562 
     
    546565        return self._tableClass0( idict=ee ) 
    547566      else: 
    548         return self.nti( i.nodeName, l,t,ty,cls,tn ) 
     567        return self.nti( i.nodeName, l,t,ty,cls,tn,rq ) 
    549568 
    550569class container(object): 
Note: See TracChangeset for help on using the changeset viewer.