source: CMIP6dreqbuild/trunk/src/framework/reviseMipTab.py @ 954

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CMIP6dreqbuild/trunk/src/framework/reviseMipTab.py@954
Revision 954, 3.6 KB checked in by mjuckes, 3 years ago (diff)

cand

Line 
1
2import xml, string
3import xml.dom, xml.dom.minidom
4import utils_wb
5import re
6from ingest import mipTab
7
8empty=re.compile('^$')
9
10class docedit(object):
11  def __init__(self):
12
13    self.src = 'out/annotated_20150731.xml'
14    self.dest = 'out/annotated_20150731_mt.xml'
15    self.doc = xml.dom.minidom.parse( self.src  )
16
17  def write(self):
18    txt = self.doc.toprettyxml(indent='\t', newl='\n', encoding=None)
19    oo = open( self.dest, 'w' )
20    lines = string.split( txt, '\n' )
21    for line in lines:
22      l = utils_wb.uniCleanFunc( string.strip(line) )
23      if empty.match(l):
24        continue
25      else:
26        oo.write(l + '\n')
27    oo.close()
28
29class revise(object):
30
31  def __init__(self,docObject):
32
33    self.mm = mipTab.mipt()
34    self.mmCheck()
35    self.doc = docObject.doc
36
37    maps = {'grids':['tables'], 'var':['prov'], 'CMORvar':['mipTable','mtid','prov','provNote','mipTableSection'], 
38            'requestVarGroup':['label','title','refNote'],
39            'requestLink':['tab','label','title'],
40            'requestItem':['label','title','tab'] }
41    for section in maps:
42      this = self.doc.getElementsByTagName(section)[0]
43      dil = this.getElementsByTagName('item')
44      nn = 0
45      for item in dil:
46        for atr in maps[section]:
47          tabs = item.getAttribute( atr )
48          tabs0 = tabs
49          tabs = self.filter(tabs)
50          if tabs != tabs0:
51            nn += 1
52            item.setAttribute( atr, tabs )
53      print section,len(dil), nn
54    this = self.doc.getElementsByTagName('miptable')[0]
55    dil = this.getElementsByTagName('item')
56    for item in dil:
57      this.removeChild(item)
58    for l in self.mm.ll:
59      item = self.doc.createElement( 'item' )
60      item.setAttribute( 'altLabel', l[0] )
61      item.setAttribute( 'label', l[1] )
62      item.setAttribute( 'uid', 'MIPtable::%s' % l[1] )
63      item.setAttribute( 'title', l[2] )
64      item.setAttribute( 'description', l[3] )
65      item.setAttribute( 'comment', l[4] )
66      item.setAttribute( 'frequency', l[5] )
67      this.appendChild( item )
68    self.revRealm()
69
70  def revRealm(self):
71      this = self.doc.getElementsByTagName('CMORvar')[0]
72      dil = this.getElementsByTagName('item')
73      nn = 0
74      for item in dil:
75        r = item.getAttribute( 'modeling_realm' )
76        r0 = r
77        if r.find( 'landice' ) != -1:
78          r = r.replace( 'landice', 'landIce' )
79        if r.find( 'seaice' ) != -1:
80          r = r.replace( 'seaice', 'seaIce' )
81        if r != r0:
82          item.setAttribute( 'modeling_realm', r )
83          nn += 1
84      print 'INFO.realm.00404: number of editted realms = %s' % nn
85
86  def mmCheck(self):
87      l1 = dict()
88      for l in self.mm.ll:
89        if l[0] != l[1]:
90          l1[ l[0] ] = l[1]
91      self.extra = {'em1hrclimmon':'E1hrClimMon','em3hrpt':'E3hrPt',
92                     'emDayZ':'EdayZ', 'emMonZ':'EmonZ','aermonthlyz':'AERmonZ'}
93      for d in self.extra:
94        del l1[d]
95      if False:
96       for l in self.mm.ll:
97        if l[0] != l[1] and l[0] not in defer:
98          ff = set()
99          for l2 in l1:
100            if l2 != l[0]:
101               if l2 in l[0]:
102                 assert l[0].replace( l2, l1[l2] ) == l[1], 'Ambiguos mapping: %s -- %s' % (l2,l[0] )
103                 ff.add(l2)
104          for l2 in ff:
105            del l1[l2]
106      l1['6hrLev_aer'] = '6hrLev'
107      self.maps = l1
108      print l1
109                 
110  def filter(self, ss):
111      for k in self.extra:
112          if k in ss:
113            ss = ss.replace( k, self.extra[k] )
114      for k in self.maps:
115          if k in ss:
116            ss = ss.replace( k, self.maps[k] )
117      return ss
118       
119de = docedit()
120adv = revise(de)
121de.write()
Note: See TracBrowser for help on using the repository browser.