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

Updated setup for tag 01.beta.11

File:
1 edited

Legend:

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

    r465 r471  
    2020  cc = collections.defaultdict( dict ) 
    2121  for l in ll[3:]: 
    22     for i in range( len(ll[2]) -1 ): 
    23       cc[l[0]][ll[2][i+1]] = l[i+1] 
     22    for i in range( len(ll[2]) ): 
     23      cc[l[0]][ll[2][i]] = l[i] 
    2424  return cc 
    2525 
     
    5757         ##self._globalDefault = '__unset__' 
    5858         self._contentInitialised = False 
     59         self._greenIcon = '<img height="12pt" src="/images/154g.png" alt="[i]"/>' 
    5960         if dictMode: 
    6061           self.dictInit( dict ) 
     
    8889       def __href__(self,odir="",label=None): 
    8990         igns =  {'','__unset__'} 
    90          if 'description' in self.__dict__ and string.strip( self.description ) not in igns: 
     91         if 'description' in self.__dict__ and self.description != None and string.strip( self.description ) not in igns: 
    9192           ttl = self.description 
    92          elif 'title' in self.__dict__ and string.strip( self.title ) not in igns: 
     93         elif 'title' in self.__dict__ and self.title != None and string.strip( self.title ) not in igns: 
    9394           ttl = self.title 
    9495         else: 
     
    115116           for a in self.__dict__.keys(): 
    116117             if a[0] != '_': 
     118               app = '%s%s' % (a, self.__class__.__dict__[a].__href__(label=self._greenIcon) ) 
    117119               if hasattr( self._a[a], 'useClass') and self._a[a].useClass == 'internalLink' and self._base._indexInitialised: 
    118120                 if self.__dict__[a] == '__unset__': 
    119                    m = '<li>%s: %s [missing link]</li>' % ( a, self.__dict__[a] ) 
     121                   m = '<li>%s: %s [missing link]</li>' % ( app, self.__dict__[a] ) 
    120122                 else: 
    121123                   try: 
     
    125127                     raise 
    126128                   lst = self.getHtmlLinkAttrStyle(a) 
    127                    m = lst( a, targ, frm=sect ) 
    128                    ##m = '<li>%s: [%s] %s [%s]</li>' % ( a, targ._h.label, targ.label, targ.__href__() ) 
     129                   m = lst( app, targ, frm=sect ) 
     130                   ##m = '<li>%s, %s: [%s] %s [%s]</li>' % ( a, self.__class__.__dict__[a].__href__(label=self._greenIcon), targ._h.label, targ.label, targ.__href__() ) 
    129131               else: 
    130                  m = '<li>%s: %s</li>' % ( a, self.__dict__[a] ) 
     132                 m = '<li>%s: %s</li>' % ( app, self.__dict__[a] ) 
    131133               msg.append( m ) 
    132134           msg.append( '</ul>' ) 
     
    253255    self.vdef = configdoc 
    254256    self.vsamp = thisdoc 
    255     self.nts = collections.namedtuple( 'sectdef', ['tag','label','title','id','itemLabelMode','level'] ) 
     257 
     258    self.nts = collections.namedtuple( 'sectdef', ['tag','label','title','id','itemLabelMode','level','maxOccurs','labUnique'] ) 
    256259    self.nti = collections.namedtuple( 'itemdef', ['tag','label','title','type','useClass','techNote'] ) 
    257260    self.ntt = collections.namedtuple( 'sectinit', ['header','attributes','defaults'] ) 
     
    291294## 
    292295    self._t0 = self.parsevcfg(None) 
     296    self._tableClass0 = self.itemClassFact( self._t0, ns=self.ns ) 
     297 
     298## 
     299## define a class for the section heading records. 
     300## 
     301    self._t1 = self.parsevcfg('__sect__') 
     302    self._t2 = self.parsevcfg('__main__') 
     303    self._sectClass0 = self.itemClassFact( self._t1, ns=self.ns ) 
     304 
    293305    self.tt0 = {} 
    294     self._tableClass0 = self.itemClassFact( self._t0, ns=self.ns ) 
    295306    for k in self.bscc: 
    296307      self.tt0[k] = self._tableClass0(dict=self.bscc[k]) 
    297       setattr( self._tableClass0, '_%s' % k, self.tt0[k] ) 
    298  
     308      if k in self._t0.attributes: 
     309        setattr( self._tableClass0, '%s' % k, self.tt0[k] ) 
     310      if k in self._t1.attributes: 
     311        setattr( self._sectClass0, '%s' % k, self.tt0[k] ) 
     312 
     313## 
     314## save header information, as for recordAttributeDefn below 
     315## 
     316    self._recAtDef = {'__core__':self._t0, '__sect__':self._t1} 
     317## 
     318## experimental addition of __core__ to coll dictionary .. 
     319## 
     320    self.coll['__core__'] = self.ntf( self._t0.header, self._t0.attributes, [self.tt0[k] for k in self.tt0] ) 
     321      ##self.coll[k] = self.ntf( self.recordAttributeDefn[k].header, self.recordAttributeDefn[k].attributes, self.tableItems[k] ) 
     322 
     323    self.tt1 = {} 
     324    self.ttl2 = [] 
    299325    for v in vl: 
    300326      t = self.parsevcfg(v) 
    301327      tables[t[0].label] = t 
    302328      self.tableClasses[t[0].label] = self.itemClassFact( t, ns=self.ns ) 
     329      thisc = self.tableClasses[t[0].label] 
     330      self.tt1[t[0].label] = self._sectClass0( dict=t.header.__dict__ ) 
     331      self.tt1[t[0].label].maxOccurs = t.header.maxOccurs 
     332      self.tt1[t[0].label].labUnique = t.header.labUnique 
     333      self.tt1[t[0].label].level = t.header.level 
     334      self.tt1[t[0].label].itemLabelMode = t.header.itemLabelMode 
     335      self.ttl2 += [thisc.__dict__[a] for a in t.attributes] 
     336    self.coll['__main__'] = self.ntf( self._t2.header, self._t2.attributes, self.ttl2 ) 
     337 
     338    self.coll['__sect__'] = self.ntf( self._t1.header, self._t1.attributes, [self.tt1[k] for k in self.tt1] ) 
    303339 
    304340    self.recordAttributeDefn = tables 
     
    310346          t = v.get( 'title' ) 
    311347          i = v.get( 'id' ) 
     348          uid = v.get( 'uid' ) 
     349          useclass = v.get( 'useClass' ) 
     350 
     351          self.tt1[k].label = k 
     352          self.tt1[k].title = t 
     353          self.tt1[k].id = i 
     354          self.tt1[k].uid = uid 
     355          self.tt1[k].useClass = useclass 
     356          self.tableClasses[k]._h = self.tt1[k] 
    312357          il = v.findall( '%sitem' % self.ns ) 
    313358          self.info( '%s, %s, %s, %s' % ( k, t, i, len(il) ) ) 
     
    388433  def addAttributes( self, thisClass, attrDict ): 
    389434    for k in attrDict: 
    390       setattr( thisClass, '_%s' % k , attrDict[k] ) 
     435      setattr( thisClass, '%s' % k , attrDict[k] ) 
    391436          
    392437  def parsevcfg(self,v): 
    393438      """Parse a section definition element, including all the record attributes. The results are returned as a namedtuple of attributes for the section and a dictionary of record attribute specifications.""" 
    394       if v == None: 
    395         vtt = self.nts( '__core__', 'CoreAttributes', 'Core Attributes', '00000000', 'def', '0' ) 
    396         idict = {'label':None, 'title':None, 'id':None, 'itemLabelMode':None, 'level':None } 
     439      if v in [ None,'__main__']: 
     440        idict = {'description':'An extended description of the object', 'title':'Record Description', \ 
     441         'techNote':'', 'useClass':'__core__', 'superclass':'rdf:property',\ 
     442         'type':'xs:string', 'uid':'__core__:description', 'label':'label' } 
     443        if v == None: 
     444          vtt = self.nts( '__core__', 'CoreAttributes', 'Core Attributes', '00000000', 'def', '0', '0', 'false' ) 
     445        else: 
     446          vtt = self.nts( '__main__', 'Attributes defined for the Data Request', 'Data Request Attributes', '00000001', 'def', '0', '0', 'false' ) 
     447      elif v == '__sect__': 
     448        idict = {'title':'Record Description', \ 
     449         'uid':'__core__:description', 'label':'label', 'useClass':'text', 'id':'id', 'maxOccurs':'', 'itemLabelMode':'', 'level':'', 'labUnique':'' } 
     450        vtt = self.nts( '__core__', 'sectionAttributes', 'Section Attributes', '00000000', 'def', '0', '0', 'false' ) 
     451##<var label="var" uid="SECTION:var" useClass="vocab" title="MIP Variable" id="cmip.drv.001"> 
    397452      else: 
    398453        l = v.getAttribute( 'label' ) 
     
    401456        ilm = v.getAttribute( 'itemLabelMode' ) 
    402457        lev = v.getAttribute( 'level' ) 
     458        maxo = v.getAttribute( 'maxOccurs' ) 
     459        labu = v.getAttribute( 'labUnique' ) 
    403460        il = v.getElementsByTagName( 'rowAttribute' ) 
    404         vtt = self.nts( v.nodeName, l,t,i,ilm,lev ) 
     461        vtt = self.nts( v.nodeName, l,t,i,ilm,lev, maxo, labu ) 
    405462        idict = {} 
    406463        for i in il: 
     
    414471      defs = {'type':"xs:string"} 
    415472      ll = [] 
    416       for k in ['label','title','type','useClass','techNote']: 
     473      ee = {} 
     474      for k in ['label','title','type','useClass','techNote','description','uid']: 
    417475        if i.hasAttribute( k ): 
    418476          ll.append( i.getAttribute( k ) ) 
    419477        else: 
    420478          ll.append( defs.get( k, None ) ) 
    421       l, t, ty, cls, tn = ll 
     479        ee[k] = ll[-1] 
     480      l, t, ty, cls, tn, desc, uid = ll 
    422481      self.lastTitle = t 
    423       return self.nti( i.nodeName, l,t,ty,cls,tn ) 
     482 
     483      returnClass = True 
     484      if returnClass: 
     485        return self._tableClass0( dict=ee ) 
     486      else: 
     487        return self.nti( i.nodeName, l,t,ty,cls,tn ) 
    424488 
    425489class container(object): 
Note: See TracChangeset for help on using the changeset viewer.