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

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

release 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
69  def mmCheck(self):
70      l1 = dict()
71      for l in self.mm.ll:
72        if l[0] != l[1]:
73          l1[ l[0] ] = l[1]
74      self.extra = {'em1hrclimmon':'E1hrClimMon','em3hrpt':'E3hrPt',
75                     'emDayZ':'EdayZ', 'emMonZ':'EmonZ','aermonthlyz':'AERmonZ'}
76      for d in self.extra:
77        del l1[d]
78      if False:
79       for l in self.mm.ll:
80        if l[0] != l[1] and l[0] not in defer:
81          ff = set()
82          for l2 in l1:
83            if l2 != l[0]:
84               if l2 in l[0]:
85                 assert l[0].replace( l2, l1[l2] ) == l[1], 'Ambiguos mapping: %s -- %s' % (l2,l[0] )
86                 ff.add(l2)
87          for l2 in ff:
88            del l1[l2]
89      self.maps = l1
90      print l1
91                 
92  def filter(self, ss):
93      for k in self.extra:
94          if k in ss:
95            ss = ss.replace( k, self.extra[k] )
96      for k in self.maps:
97          if k in ss:
98            ss = ss.replace( k, self.maps[k] )
99      return ss
100       
101de = docedit()
102adv = revise(de)
103de.write()
Note: See TracBrowser for help on using the repository browser.