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

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

draft code to edit tables

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 revise(object):
11
12  def __init__(self):
13
14    self.mm = mipTab.mipt()
15    self.mmCheck()
16    src = 'out/annotated_20150731.xml'
17    self.dest = 'out/annotated_20150731_tmp.xml'
18    self.doc = xml.dom.minidom.parse( src  )
19
20    maps = {'grids':['tables'], 'var':['prov'], 'CMORvar':['mipTable','mtid','prov','provNote','mipTableSection'], 
21            'requestVarGroup':['label','title','refNote'],
22            'requestLink':['tab','label','title'],
23            'requestItem':['label','title','tab'] }
24    for section in maps:
25      this = self.doc.getElementsByTagName(section)[0]
26      dil = this.getElementsByTagName('item')
27      nn = 0
28      for item in dil:
29        for atr in maps[section]:
30          tabs = item.getAttribute( atr )
31          tabs0 = tabs
32          tabs = self.filter(tabs)
33          if tabs != tabs0:
34            nn += 1
35            item.setAttribute( atr, tabs )
36      print section,len(dil), nn
37    this = self.doc.getElementsByTagName('miptable')[0]
38    dil = this.getElementsByTagName('item')
39    for item in dil:
40      this.removeChild(item)
41    for l in self.mm.ll:
42      item = self.doc.createElement( 'item' )
43      item.setAttribute( 'altLabel', l[0] )
44      item.setAttribute( 'label', l[1] )
45      item.setAttribute( 'uid', 'MIPtable::%s' % l[1] )
46      item.setAttribute( 'title', l[2] )
47      item.setAttribute( 'description', l[3] )
48      item.setAttribute( 'comment', l[4] )
49      item.setAttribute( 'frequency', l[5] )
50      this.appendChild( item )
51
52  def mmCheck(self):
53      l1 = dict()
54      for l in self.mm.ll:
55        if l[0] != l[1]:
56          l1[ l[0] ] = l[1]
57      defer = ['em1hrclimmon','em3hrpt','emDaypt','emMonpt']
58      for d in defer:
59        del l1[d]
60      for l in self.mm.ll:
61        if l[0] != l[1] and l[0] not in defer:
62          ff = set()
63          for l2 in l1:
64            if l2 != l[0]:
65               if l2 in l[0]:
66                 assert l[0].replace( l2, l1[l2] ) == l[1], 'Ambiguos mapping: %s -- %s' % (l2,l[0] )
67                 ff.add(l2)
68          for l2 in ff:
69            del l1[l2]
70      self.extra = {'E1hrclimmon':'E1hrClimMon','E3hrpt':'E3hrPt','Edaypt':'EdayPt','Emonpt':'EmonPt'}
71      self.maps = l1
72      print l1
73                 
74                 
75  def filter(self, ss):
76      for k in self.maps:
77          if k in ss:
78            ss = ss.replace( k, self.maps[k] )
79      for k in self.extra:
80          if k in ss:
81            ss = ss.replace( k, self.extra[k] )
82      return ss
83       
84  def write(self):
85    txt = self.doc.toprettyxml(indent='\t', newl='\n', encoding=None)
86    oo = open( self.dest, 'w' )
87    lines = string.split( txt, '\n' )
88    for line in lines:
89      l = utils_wb.uniCleanFunc( string.strip(line) )
90      if empty.match(l):
91        continue
92      else:
93        oo.write(l + '\n')
94    oo.close()
95
96adv = revise()
97adv.write()
Note: See TracBrowser for help on using the repository browser.