source: CMIP6dreqbuild/trunk/src/framework/dreqPy/makeTables.py @ 642

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

removed rogue line in makeTables.py -> data3.js

Line 
1
2import dreq
3import collections, string, os
4import vrev
5try:
6    import xlsxwriter
7except:
8    print ('No xlsxwrite: will not make tables ...')
9
10class xlsx(object):
11  def __init__(self,fn):
12    self.wb = xlsxwriter.Workbook(fn)
13
14  def newSheet(self,name):
15    self.worksheet = self.wb.add_worksheet(name=name)
16    return self.worksheet
17
18  def close(self):
19    self.wb.close()
20
21def vfmt( x ):
22            if x < 1.e9:
23              s = '%sM' % int( x*1.e-6 )
24            elif x < 1.e12:
25              s = '%sG' % int( x*1.e-9 )
26            elif x < 1.e13:
27              s = '%3.1fT' % ( x*1.e-12 )
28            elif x < 1.e15:
29              s = '%3iT' % int( x*1.e-12 )
30            elif x < 1.e18:
31              s = '%3iP' % int( x*1.e-15 )
32            else:
33              s = '{:,.2f}'.format( x*1.e-9 )
34            return s
35
36#priority       long name       units   comment         questions & notes       output variable name    standard name   unconfirmed or proposed standard name   unformatted units       cell_methods    valid min       valid max       mean absolute min       mean absolute max       positive        type    CMOR dimensions CMOR variable name      realm   frequency       cell_measures   flag_values     flag_meanings
37
38strkeys = [u'procNote', u'uid', u'odims', u'flag_meanings', u'prov', u'title', u'tmid', u'label', u'cell_methods', u'coords', u'cell_measures', u'spid', u'flag_values', u'description']
39
40ntstr = collections.namedtuple( 'ntstr', strkeys )
41
42class cmpd(object):
43  def __init__(self,k):
44    self.k = k
45  def cmp(self,x,y):
46    return cmp( x.__dict__[self.k], y.__dict__[self.k] )
47
48class cmpd2(object):
49  def __init__(self,k1,k2):
50    self.k1 = k1
51    self.k2 = k2
52  def cmp(self,x,y):
53    if x.__dict__[self.k1] == y.__dict__[self.k1]:
54      return cmp( x.__dict__[self.k2], y.__dict__[self.k2] )
55    else:
56      return cmp( x.__dict__[self.k1], y.__dict__[self.k1] )
57
58class cmpdn(object):
59  def __init__(self,kl):
60    self.kl = kl
61  def cmp(self,x,y):
62    for k in self.kl:
63      if x.__dict__[k] != y.__dict__[k]:
64        return cmp( x.__dict__[k], y.__dict__[k] )
65   
66    return cmp( 0,0 )
67
68def cmpAnnex( x, y ):
69  ax = len(x) > 2 and x[:2] == 'em'
70  ay = len(y) > 2 and y[:2] == 'em'
71  bx = len(x) > 5 and x[:5] in ['CMIP5','CORDE','SPECS']
72  by = len(y) > 5 and y[:5] in ['CMIP5','CORDE','SPECS']
73  if ax  == ay and bx == by:
74    return cmp(x,y)
75  elif ax:
76    if by:
77      return cmp(0,1)
78    else:
79      return cmp(1,0)
80  elif ay:
81    if bx:
82      return cmp(1,0)
83    else:
84      return cmp(0,1)
85  elif bx:
86      return cmp(1,0)
87  else:
88    return cmp(0,1)
89
90import re
91
92
93class makePurl(object):
94  def __init__(self):
95    c1 = re.compile( '^[a-zA-Z][a-zA-Z0-9]*$' )
96    mv = dq.coll['var'].items
97    oo = open( 'htmlRewrite.txt', 'w' )
98    for v in mv:
99      if c1.match( v.label ):
100         oo.write( 'RewriteRule ^%s$ http://clipc-services.ceda.ac.uk/dreq/u/%s.html\n' % (v.label,v.uid) )
101      else:
102         print ('Match failed: %s' % v.label )
103    oo.close()
104     
105class makeTab(object):
106  def __init__(self, dq, subset=None, dest='tables/test.xlsx', skipped=set(), collected=None):
107    if subset != None:
108      cmv = [x for x in dq.coll['CMORvar'].items if x.uid in subset]
109    else:
110      cmv = dq.coll['CMORvar'].items
111    tables = sorted( list( set( [i.mipTable for i in cmv] ) ), cmp=cmpAnnex )
112
113    addMips = True
114    if addMips:
115      c = vrev.checkVar(dq)
116
117    wb = xlsx( dest )
118
119    hdr_cell_format = wb.wb.add_format({'text_wrap': True, 'font_size': 14, 'font_color':'#0000ff', 'bold':1, 'fg_color':'#aaaacc'})
120    hdr_cell_format.set_text_wrap()
121    sect_cell_format = wb.wb.add_format({'text_wrap': True, 'font_size': 14, 'font_color':'#0000ff', 'bold':1, 'fg_color':'#ccccbb'})
122    sect_cell_format.set_text_wrap()
123    cell_format = wb.wb.add_format({'text_wrap': True, 'font_size': 11})
124    cell_format.set_text_wrap()
125
126    mode = 'c'
127    sht = wb.newSheet( 'Notes' )
128    tableNotes = [('MIPs (...)','The last two columns in each row list MIPs associated with each variable. The first column in this pair lists the MIPs which are requesting the variable in one or more experiments. The second column lists the MIPs proposing experiments in which this variable is requested. E.g. If a variable is requested in a DECK experiment by HighResMIP, then HighResMIP appears in the first column and DECK in the second')]
129    sht.write( 0,0, '', hdr_cell_format )
130    sht.write( 0,1, 'Notes on tables', hdr_cell_format )
131    ri = 0
132    sht.set_column(0,0,30)
133    sht.set_column(1,1,60)
134    for t in tableNotes:
135      ri += 1
136      for i in range(2):
137          sht.write( ri,i, t[i], cell_format )
138
139    if collected != None:
140      ri += 2
141      sht.write( ri, 0, 'Table', sect_cell_format )
142      sht.write( ri, 1, 'Reference Volume (1 deg. atmosphere, 0.5 deg. ocean)', sect_cell_format )
143      for k in sorted( collected.keys() ):
144        ri += 1
145        sht.write( ri, 0, k )
146        sht.write( ri, 1, vfmt( collected[k]*2. ) )
147
148    ncga = 'NetCDF Global Attribute'
149    withoo = False
150    for t in tables:
151      if withoo:
152        oo = open( 'tables/test_%s.csv' % t, 'w' )
153      sht = wb.newSheet( t )
154      j = 0
155      if mode == 'c':
156        hrec = ['Priority','Long name', 'units', 'description', 'comment', 'Variable Name', 'CF Standard Name', 'cell_methods', 'positive', 'type', 'dimensions', 'CMOR Name', 'modeling_realm', 'frequency', 'cell_measures', 'prov', 'provNote','rowIndex']
157        hcmt = ['Default priority (generally overridden by settings in "requestVar" record)',ncga,'','','Name of variable in file','','','CMOR directive','','','CMOR name, unique within table','','','','','','','','','']
158        sht.set_column(1,1,40)
159        sht.set_column(1,3,50)
160        sht.set_column(1,4,30)
161        sht.set_column(1,5,50)
162        sht.set_column(1,6,30)
163        sht.set_column(1,9,40)
164        sht.set_column(1,18,40)
165        sht.set_column(1,19,40)
166      else:
167        hrec = ['','Long name', 'units', 'description', '', 'Variable Name', 'CF Standard Name', '','', 'cell_methods', 'valid_min', 'valid_max', 'ok_min_mean_abs', 'ok_max_mean_abs', 'positive', 'type', 'dimensions', 'CMOR name', 'modeling_realm', 'frequency', 'cell_measures', 'flag_values', 'flag_meanings', 'prov', 'provNote','rowIndex']
168      if addMips:
169        hrec.append( 'MIPs (requesting)' )
170        hrec.append( 'MIPs (by experiment)' )
171
172      ##sht.set_row(0,40)
173      for i in range(len(hrec)):
174          sht.write( j,i, hrec[i], hdr_cell_format )
175          if hcmt[i] != '':
176            sht.write_comment( j,i,hcmt[i])
177      thiscmv =  sorted( [v for v in cmv if v.mipTable == t], cmp=cmpdn(['prov','rowIndex','label']).cmp )
178      ##print 'INFO.001: Table %s, rows: %s' % (t,len(thiscmv) )
179     
180      for v in thiscmv:
181          cv = dq.inx.uid[ v.vid ]
182          strc = dq.inx.uid[ v.stid ]
183          if strc._h.label == 'remarks':
184            print ( 'ERROR: structure not found for %s: %s .. %s (%s)' % (v.uid,v.label,v.title,v.mipTable) )
185            ok = False
186          else:
187            sshp = dq.inx.uid[ strc.spid ]
188            tshp = dq.inx.uid[ strc.tmid ]
189            ok = all( [i._h.label != 'remarks' for i in [cv,strc,sshp,tshp]] )
190          #[u'shuffle', u'ok_max_mean_abs', u'vid', '_contentInitialised', u'valid_min', u'frequency', u'uid', u'title', u'rowIndex', u'positive', u'stid', u'mipTable', u'label', u'type', u'description', u'deflate_level', u'deflate', u'provNote', u'ok_min_mean_abs', u'modeling_realm', u'prov', u'valid_max']
191
192          if not ok:
193            if (t,v.label) not in skipped:
194              print ( 'makeTables: skipping %s %s' % (t,v.label) )
195              skipped.add( (t,v.label) )
196          else:
197            dims = []
198            dims += string.split( sshp.dimensions, '|' )
199            dims += string.split( tshp.dimensions, '|' )
200            dims += string.split( strc.odims, '|' )
201            dims += string.split( strc.coords, '|' )
202            dims = string.join( dims )
203            if mode == 'c':
204              orec = [str(v.defaultPriority),cv.title, cv.units, cv.description, v.description, cv.label, cv.sn, strc.cell_methods, v.positive, v.type, dims, v.label, v.modeling_realm, v.frequency, strc.cell_measures, v.prov,v.provNote,str(v.rowIndex),cv.uid]
205            else:
206              orec = ['',cv.title, cv.units, v.description, '', cv.label, cv.sn, '','', strc.cell_methods, v.valid_min, v.valid_max, v.ok_min_mean_abs, v.ok_max_mean_abs, v.positive, v.type, dims, v.label, v.modeling_realm, v.frequency, strc.cell_measures, strc.flag_values, strc.flag_meanings,v.prov,v.provNote,str(v.rowIndex),cv.uid]
207            if addMips:
208              thismips = c.chkCmv( v.uid )
209              thismips2 = c.chkCmv( v.uid, byExpt=True )
210              orec.append( string.join( sorted( list( thismips) ),',') )
211              orec.append( string.join( sorted( list( thismips2) ),',') )
212
213            if withoo:
214              oo.write( string.join(orec, '\t' ) + '\n' )
215            j+=1
216            for i in range(len(orec)):
217              sht.write( j,i, orec[i], cell_format )
218      if withoo:
219        oo.close()
220    wb.close()
221
222hdr = """
223var getData  = {
224cols: function() {
225  var columns = [ {id:0, name:'Variable', field:0, width: 100},
226              {id:1, name:'Standard name', field:1, width: 210 },
227              {id:2, name:'Long name', field:2, width: 180},
228              {id:3, name:'Units', field:3, width: 180},
229              {id:4, name:'Description', field:4, width: 180},
230              {id:5, name:'uid', field:5, width: 180}];
231 return columns;
232},
233data: function() {
234var data = [];
235"""
236ftr = """return data;
237}
238};
239"""
240##rtmpl = 'data[%(n)s] = { "id":%(n)s, 0:"%(var)s",  1:"%(sn)s", 2:"%(ln)s", 3:"%(u)s", 4:"%(uid)s" };'
241rtmpl = 'data[%(n)s] = { "id":%(n)s, 0:"%(var)s",  1:"%(sn)s", 2:"%(ln)s", 3:"%(u)s", 4:"%(d)s", 5:"%(uid)s" };'
242
243class htmlTrees(object):
244  def __init__(self,dq,odir='html/t/'):
245    self.dq = dq
246    self.odir = odir
247    self.c = vrev.checkVar( dq )
248    self.anno = {}
249    for v in dq.coll['var'].items:
250      self.makeTree( v )
251   
252  def makeTree( self, v ):
253    ee = self.c.chk2( v.label )
254    if len(ee.keys()) > 0:
255      title = 'Usage tree for %s' % v.label
256      bdy = ['<h1>%s</h1>' % title, ]
257      bdy.append( '<html><head></head><body>\n' )
258      bdy.append( '<ul>\n' )
259      for k in sorted( ee.keys() ):
260        l1, xx = ee[k]
261        lx = list( xx )
262        if len( lx ) == 0:
263          bdy.append( '<li>%s: Empty</li>\n' % l1 )
264        else:
265          bdy.append( '<li>%s:\n<ul>' % l1 )
266          for x in lx:
267            bdy.append( '<li>%s</li>\n' % x )
268          bdy.append( '</ul></li>\n' )
269      bdy.append( '</ul></body></html>\n' )
270      oo = open( '%s/%s.html' % (self.odir,v.label), 'w' )
271      oo.write( dq.pageTmpl % ( title, '', '../', '../index.html', string.join( bdy, '\n' ) ) )
272      oo.close()
273      self.anno[v.label] = '<a href="../t/%s.html">Usage</a>' % v.label
274    else:
275      self.anno[v.label] = 'Unused'
276       
277
278class makeJs(object):
279  def __init__(self,dq):
280    n = 0
281    rl = []
282    for v in dq.coll['var'].items:
283      var = '%s %s' % (v.label,v.uid)
284      sn = v.sn
285      ln = v.title
286      u = v.units
287      d = v.description
288      uid = v.uid
289      d = locals()
290      for k in ['sn','ln','u','var','d']:
291   
292        if string.find( d[k], '"' ) != -1:
293          print ( "WARNING ... quote in %s .. %s [%s]" % (k,var,d[k]) )
294          d[k] = string.replace( d[k], '"', "'" )
295          print ( d[k] )
296       
297      rr = rtmpl % d
298      rl.append( rr )
299      n += 1
300    oo = open( 'data3b.js', 'w' )
301    oo.write( hdr )
302    for r in rl:
303      oo.write( r + '\n' )
304    oo.write( ftr )
305    oo.close()
306   
307
308
309class styles(object):
310  def __init__(self):
311    pass
312
313  def rqvLink01(self,targ,frm='',ann=''):
314    if targ._h.label == 'remarks':
315      return '<li>%s: %s</li>' % ( targ.__href__(odir='../u/', label=targ.title), "Link to request variable broken"  )
316    elif frm != "CMORvar":
317      cmv = targ._inx.uid[ targ.vid ]
318      if targ._h.label == 'remarks':
319        return '<li>%s [%s]: %s</li>' % ( cmv.label, targ.__href__(odir='../u/',label=targ.priority) , 'Variable not defined or not found'  )
320      else:
321        return '<li>%s [%s]: %s</li>' % ( cmv.label, targ.__href__(odir='../u/',label=targ.priority) , cmv.__href__(odir='../u/',label=cmv.title)  )
322    else:
323      rg = targ._inx.uid[ targ.vgid ]
324      if targ._h.label == 'remarks':
325        return '<li>%s [%s]: %s</li>' % ( targ.label, targ.__href__(label=targ.priority) , 'Link not defined or not found'  )
326      elif rg._h.label == 'remarks':
327        return '<li>%s [%s]: %s</li>' % ( rg.label, targ.__href__(label=targ.priority) , 'Group not defined or not found'  )
328      else:
329        return '<li>%s [%s]: %s</li>' % ( rg.label, targ.__href__(label=targ.priority) , rg.__href__(label=rg.mip)  )
330
331  def snLink01(self,a,targ,frm='',ann=''):
332    if targ._h.label == 'remarks':
333      return '<li>%s: Standard name under review [%s]</li>' % ( a, targ.__href__() )
334    else:
335      return '<li>%s [%s]: %s</li>' % ( targ._h.title, a, targ.__href__(label=targ.label)  )
336
337  def rqlLink02(self,targ,frm='',ann=''):
338    t2 = targ._inx.uid[targ.refid]
339    if t2._h.label == 'remarks':
340      return '<li>%s: %s</li>' % ( targ.__href__(odir='../u/', label=targ.title), "Link to variable group broken"  )
341    elif frm == "requestVarGroup":
342      return '<li>%s: %s [%s]</li>' % ( targ.__href__(odir='../u/', label=targ.mip), targ.title, targ.objective  )
343    else:
344      gpsz = len(t2._inx.iref_by_sect[t2.uid].a['requestVar'])
345      return '<li>%s: Link to group: %s [%s]</li>' % ( targ.__href__(odir='../u/', label='%s:%s' % (targ.mip,targ.title)), t2.__href__(odir='../u/', label=t2.title), gpsz  )
346
347  def rqiLink02(self,targ,frm='',ann=''):
348    t2 = targ._inx.uid[targ.rlid]
349    if t2._h.label == 'remarks':
350      return '<li>%s: %s</li>' % ( targ.__href__(odir='../u/', label=targ.title), "Link to request link broken"  )
351    else:
352      t3 = t2._inx.uid[t2.refid]
353      if t3._h.label == 'remarks':
354        return '<li>%s [%s]: %s</li>' % ( targ.__href__(odir='../u/', label=targ.title), t2.__href__(odir='../u/', label=t2.title),"Link to request group broken"  )
355      else:
356        nv = len( t3._inx.iref_by_sect[t3.uid].a['requestVar'] )
357        return '<li>%s [%s]: %s (%s variables)</li>' % ( targ.__href__(odir='../u/', label=targ.title), t2.__href__(odir='../u/', label=t2.title), t3.__href__(odir='../u/', label=t3.title), nv )
358
359  def snLink(self,targ,frm='',ann=''):
360    return '<li>%s [%s]: %s</li>' % ( targ.title, targ.units, targ.__href__(odir='../u/') )
361
362  def varLink(self,targ,frm='',ann=''):
363    return '<li>%s: %s [%s]%s</li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.title, targ.units, ann )
364
365  def mipLink(self,targ,frm='',ann=''):
366    if targ.url != '':
367      return '<li>%s: %s <a href="%s">[project site]</a></li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.title, targ.url )
368    else:
369      return '<li>%s: %s</li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.title )
370
371  def cmvLink(self,targ,frm='',ann=''):
372    t2 = targ._inx.uid[targ.stid]
373    return '<li>%s {%s}: %s [%s: %s]</li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.mipTable, targ.title, targ.frequency, t2.title )
374
375  def objLink(self,targ,frm='',ann=''):
376    return '<li>%s: %s</li>' % (  targ.label, targ.__href__(odir='../u/', label=targ.title,title=targ.description) )
377
378  def strLink(self,targ,frm='',ann=''):
379    return '<li>%s: %s</li>' % (  targ.label, targ.__href__(odir='../u/', label=targ.title) )
380
381  def objLnkLink(self,targ,frm='',ann=''):
382    if frm == 'objective':
383      t2 = targ._inx.uid[targ.rid]
384      t3 = targ._inx.uid[t2.refid]
385      thislab = '%s (%s)' % (t2.mip,t3.label)
386      return '<li>%s: %s</li>' % (  t2.title, t2.__href__(odir='../u/',label=thislab) )
387    else:
388      t2 = targ._inx.uid[targ.oid]
389      return '<li>%s: %s</li>' % (  t2.label, t2.__href__(odir='../u/',label=t2.title) )
390
391  def labTtl(self,targ,frm='',ann=''):
392    return '<li>%s: %s</li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.title )
393
394  def vgrpLink(self,targ,frm='',ann=''):
395    gpsz = len(targ._inx.iref_by_sect[targ.uid].a['requestVar'])
396    nlnk = len(targ._inx.iref_by_sect[targ.uid].a['requestLink'])
397    return '<li>%s {%s}: %s variables, %s request links</li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.mip, gpsz, nlnk )
398
399class tables(object):
400  def __init__(self,sc, mips, odir='xls'):
401      self.sc = sc
402      self.dq = sc.dq
403      self.mips = mips
404      self.odir = odir
405      self.accReset()
406
407  def setMlab( self, m ):
408      if type(m) == type(''):
409        mlab = m
410      else:
411        ll = sorted( list(m) )
412        if len(ll) == 1:
413          mlab = list(m)[0]
414        else:
415          mlab=string.join( [ x[:2].lower() for x in m ], '.' )
416      return mlab
417
418  def accReset(self):
419    self.acc = [0.,collections.defaultdict(int),collections.defaultdict( float ) ]
420
421  def accAdd(self,x):
422    self.acc[0] += x[0]
423    for k in x[2]:
424       self.acc[2][k] += x[2][k]
425
426  def doTable(self,m,l1,m2,pmax,collector,acc=True, mlab=None):
427      """*acc* allows accumulation of values to be switched off when called in single expt mode"""
428     
429      if mlab == None:
430        mlab = self.setMlab( m )
431
432      if m2 in [None, 'TOTAL']:
433        x = self.acc
434      else:
435        x = self.sc.volByExpt( l1, m2, expFullEx=(m2 in self.mips), pmax=pmax )
436        if acc:
437          self.accAdd(x)
438
439      if x[0] > 0:
440        if m2 not in [ None, 'TOTAL']:
441          im2 = self.dq.inx.uid[m2]
442          mlab2 = im2.label
443          collector[mlab].a[mlab2] += x[0]
444        else:
445          mlab2 = 'TOTAL'
446#
447# create sum for each table
448#
449        xs = 0
450        kkc = '_%s_%s' % (mlab,mlab2)
451        for k in x[2].keys():
452          i = self.dq.inx.uid[k]
453          xxx =  x[2][k]
454          xs += xxx
455          if xxx > 0:
456            collector[kkc].a[i.mipTable] += xxx
457        assert x[0] == xs, 'ERROR.0088: consistency problem %s  %s %s %s' % (m,m2,x[0],xs)
458        if x[0] == 0:
459          print ( 'Zero size: %s, %s' % (m,m2) )
460          if len( x[2].keys() ) > 0:
461             print ( 'ERROR:zero: %s, %s: %s' % (m,m2,str(x[2].keys()) ) )
462
463        if acc and m2 not in [ None, 'TOTAL']:
464          collector[mlab].a['TOTAL'] += x[0]
465
466        dd = collections.defaultdict( list )
467        lll = set()
468        for v in x[2].keys():
469          vi = self.sc.dq.inx.uid[v]
470          if vi._h.label != 'remarks':
471            f,t,l,tt,d,u = (vi.frequency,vi.mipTable,vi.label,vi.title,vi.description,vi.uid)
472            lll.add(u)
473            dd[t].append( (f,t,l,tt,d,u) )
474        if len( dd.keys() ) > 0:
475          collector[mlab].dd[mlab2] = dd
476          if m2 not in [ None, 'TOTAL']:
477            if im2._h.label == 'experiment':
478              dothis = self.sc.tierMax >= im2.tier
479###
480### BUT ... there is a treset in the request item .... it may be that some variables are excluded ...
481###         need the variable list itself .....
482###
483          makeTab( self.sc.dq, subset=lll, dest='%s/%s-%s_%s_%s.xlsx' % (self.odir,mlab,mlab2,self.sc.tierMax,pmax), collected=collector[kkc].a )
484
485styls = styles()
486
487htmlStyle = {}
488htmlStyle['CMORvar'] = {'getIrefs':['__all__']}
489htmlStyle['requestVarGroup'] = {'getIrefs':['requestVar','requestLink']}
490htmlStyle['var'] = {'getIrefs':['CMORvar']}
491htmlStyle['objective'] = {'getIrefs':['objectiveLink']}
492htmlStyle['requestLink'] = {'getIrefs':['objectiveLink','requestItem']}
493htmlStyle['exptgroup'] = {'getIrefs':['__all__']}
494htmlStyle['requestItem'] = {'getIrefs':['__all__']}
495htmlStyle['experiment'] = {'getIrefs':['__all__']}
496htmlStyle['mip'] = {'getIrefs':['__all__']}
497htmlStyle['miptable'] = {'getIrefs':['__all__']}
498htmlStyle['remarks'] = {'getIrefs':['__all__']}
499htmlStyle['varChoice'] = {'getIrefs':['__all__']}
500htmlStyle['spatialShape'] = {'getIrefs':['__all__']}
501htmlStyle['temporalShape'] = {'getIrefs':['__all__']}
502htmlStyle['structure'] = {'getIrefs':['__all__']}
503htmlStyle['standardname'] = {'getIrefs':['__all__']}
504
505if __name__ == "__main__":
506  assert os.path.isdir( 'html' ), 'Before running this script you need to create "html", "html/index" and "html/u" sub-directories, or edit the call to dq.makeHtml'
507  assert os.path.isdir( 'html/u' ), 'Before running this script you need to create "html", "html/index" and "html/u" sub-directories, or edit the call to dq.makeHtml, and refernces to "u" in style lines below'
508  assert os.path.isdir( 'html/index' ), 'Before running this script you need to create "html", "html/index" and "html/u" sub-directories, or edit the call to dq.makeHtml, and refernces to "u" in style lines below'
509  assert os.path.isdir( 'tables' ), 'Before running this script you need to create a "tables" sub-directory, or edit the makeTab class'
510
511  dq = dreq.loadDreq( htmlStyles=htmlStyle, manifest='out/dreqManifest.txt' )
512##
513## add special styles to dq object "itemStyle" dictionary.
514##
515
516  dq.itemStyles['standardname'] = styls.snLink
517  dq.itemStyles['var'] = styls.varLink
518  dq.itemStyles['mip'] = styls.mipLink
519  dq.itemStyles['CMORvar'] = styls.cmvLink
520  dq.itemStyles['objective'] = styls.objLink
521  dq.itemStyles['structure'] = styls.strLink
522  dq.itemStyles['objectiveLink'] = styls.objLnkLink
523  dq.itemStyles['requestVarGroup'] = styls.vgrpLink
524  dq.itemStyles['requestLink'] = styls.rqlLink02
525  dq.itemStyles['requestItem'] = styls.rqiLink02
526  dq.itemStyles['spatialShape'] = styls.labTtl
527  dq.coll['var'].items[0].__class__._linkAttrStyle['sn'] = styls.snLink01
528##dq.coll['requestVarGroup'].items[0].__class__._linkAttrStyle['requestVar'] = styls.rqvLink01
529  dq.itemStyles['requestVar'] = styls.rqvLink01
530
531  ht = htmlTrees(dq)
532  dq.makeHtml( annotations={'var':ht.anno}, ttl0='Data Request [%s]' % dreq.version )
533  try:
534    import xlsxwriter
535    mt = makeTab( dq)
536  except:
537    print ('Could not make tables ...')
538    raise
539  mp = makePurl()
540  mj = makeJs( dq )
Note: See TracBrowser for help on using the repository browser.