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

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

cleaned scope.py

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              #{id:4, name:'uid', field:4, width: 180}];
232 return columns;
233},
234data: function() {
235var data = [];
236"""
237ftr = """return data;
238}
239};
240"""
241##rtmpl = 'data[%(n)s] = { "id":%(n)s, 0:"%(var)s",  1:"%(sn)s", 2:"%(ln)s", 3:"%(u)s", 4:"%(uid)s" };'
242rtmpl = 'data[%(n)s] = { "id":%(n)s, 0:"%(var)s",  1:"%(sn)s", 2:"%(ln)s", 3:"%(u)s", 4:"%(d)s", 5:"%(uid)s" };'
243
244class htmlTrees(object):
245  def __init__(self,dq,odir='html/t/'):
246    self.dq = dq
247    self.odir = odir
248    self.c = vrev.checkVar( dq )
249    self.anno = {}
250    for v in dq.coll['var'].items:
251      self.makeTree( v )
252   
253  def makeTree( self, v ):
254    ee = self.c.chk2( v.label )
255    if len(ee.keys()) > 0:
256      title = 'Usage tree for %s' % v.label
257      bdy = ['<h1>%s</h1>' % title, ]
258      bdy.append( '<html><head></head><body>\n' )
259      bdy.append( '<ul>\n' )
260      for k in sorted( ee.keys() ):
261        l1, xx = ee[k]
262        lx = list( xx )
263        if len( lx ) == 0:
264          bdy.append( '<li>%s: Empty</li>\n' % l1 )
265        else:
266          bdy.append( '<li>%s:\n<ul>' % l1 )
267          for x in lx:
268            bdy.append( '<li>%s</li>\n' % x )
269          bdy.append( '</ul></li>\n' )
270      bdy.append( '</ul></body></html>\n' )
271      oo = open( '%s/%s.html' % (self.odir,v.label), 'w' )
272      oo.write( dq.pageTmpl % ( title, '', '../', '../index.html', string.join( bdy, '\n' ) ) )
273      oo.close()
274      self.anno[v.label] = '<a href="../t/%s.html">Usage</a>' % v.label
275    else:
276      self.anno[v.label] = 'Unused'
277       
278
279class makeJs(object):
280  def __init__(self,dq):
281    n = 0
282    rl = []
283    for v in dq.coll['var'].items:
284      var = '%s %s' % (v.label,v.uid)
285      sn = v.sn
286      ln = v.title
287      u = v.units
288      d = v.description
289      uid = v.uid
290      d = locals()
291      for k in ['sn','ln','u','var','d']:
292   
293        if string.find( d[k], '"' ) != -1:
294          print ( "WARNING ... quote in %s .. %s [%s]" % (k,var,d[k]) )
295          d[k] = string.replace( d[k], '"', "'" )
296          print ( d[k] )
297       
298      rr = rtmpl % d
299      rl.append( rr )
300      n += 1
301    oo = open( 'data3.js', 'w' )
302    oo.write( hdr )
303    for r in rl:
304      oo.write( r + '\n' )
305    oo.write( ftr )
306    oo.close()
307   
308
309
310class styles(object):
311  def __init__(self):
312    pass
313
314  def rqvLink01(self,targ,frm='',ann=''):
315    if targ._h.label == 'remarks':
316      return '<li>%s: %s</li>' % ( targ.__href__(odir='../u/', label=targ.title), "Link to request variable broken"  )
317    elif frm != "CMORvar":
318      cmv = targ._inx.uid[ targ.vid ]
319      if targ._h.label == 'remarks':
320        return '<li>%s [%s]: %s</li>' % ( cmv.label, targ.__href__(odir='../u/',label=targ.priority) , 'Variable not defined or not found'  )
321      else:
322        return '<li>%s [%s]: %s</li>' % ( cmv.label, targ.__href__(odir='../u/',label=targ.priority) , cmv.__href__(odir='../u/',label=cmv.title)  )
323    else:
324      rg = targ._inx.uid[ targ.vgid ]
325      if targ._h.label == 'remarks':
326        return '<li>%s [%s]: %s</li>' % ( targ.label, targ.__href__(label=targ.priority) , 'Link not defined or not found'  )
327      elif rg._h.label == 'remarks':
328        return '<li>%s [%s]: %s</li>' % ( rg.label, targ.__href__(label=targ.priority) , 'Group not defined or not found'  )
329      else:
330        return '<li>%s [%s]: %s</li>' % ( rg.label, targ.__href__(label=targ.priority) , rg.__href__(label=rg.mip)  )
331
332  def snLink01(self,a,targ,frm='',ann=''):
333    if targ._h.label == 'remarks':
334      return '<li>%s: Standard name under review [%s]</li>' % ( a, targ.__href__() )
335    else:
336      return '<li>%s [%s]: %s</li>' % ( targ._h.title, a, targ.__href__(label=targ.label)  )
337
338  def rqlLink02(self,targ,frm='',ann=''):
339    t2 = targ._inx.uid[targ.refid]
340    if t2._h.label == 'remarks':
341      return '<li>%s: %s</li>' % ( targ.__href__(odir='../u/', label=targ.title), "Link to variable group broken"  )
342    elif frm == "requestVarGroup":
343      return '<li>%s: %s [%s]</li>' % ( targ.__href__(odir='../u/', label=targ.mip), targ.title, targ.objective  )
344    else:
345      gpsz = len(t2._inx.iref_by_sect[t2.uid].a['requestVar'])
346      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  )
347
348  def rqiLink02(self,targ,frm='',ann=''):
349    t2 = targ._inx.uid[targ.rlid]
350    if t2._h.label == 'remarks':
351      return '<li>%s: %s</li>' % ( targ.__href__(odir='../u/', label=targ.title), "Link to request link broken"  )
352    else:
353      t3 = t2._inx.uid[t2.refid]
354      if t3._h.label == 'remarks':
355        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"  )
356      else:
357        nv = len( t3._inx.iref_by_sect[t3.uid].a['requestVar'] )
358        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 )
359
360  def snLink(self,targ,frm='',ann=''):
361    return '<li>%s [%s]: %s</li>' % ( targ.title, targ.units, targ.__href__(odir='../u/') )
362
363  def varLink(self,targ,frm='',ann=''):
364    return '<li>%s: %s [%s]%s</li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.title, targ.units, ann )
365
366  def mipLink(self,targ,frm='',ann=''):
367    if targ.url != '':
368      return '<li>%s: %s <a href="%s">[project site]</a></li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.title, targ.url )
369    else:
370      return '<li>%s: %s</li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.title )
371
372  def cmvLink(self,targ,frm='',ann=''):
373    t2 = targ._inx.uid[targ.stid]
374    return '<li>%s {%s}: %s [%s: %s]</li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.mipTable, targ.title, targ.frequency, t2.title )
375
376  def objLink(self,targ,frm='',ann=''):
377    return '<li>%s: %s</li>' % (  targ.label, targ.__href__(odir='../u/', label=targ.title,title=targ.description) )
378
379  def strLink(self,targ,frm='',ann=''):
380    return '<li>%s: %s</li>' % (  targ.label, targ.__href__(odir='../u/', label=targ.title) )
381
382  def objLnkLink(self,targ,frm='',ann=''):
383    if frm == 'objective':
384      t2 = targ._inx.uid[targ.rid]
385      t3 = targ._inx.uid[t2.refid]
386      thislab = '%s (%s)' % (t2.mip,t3.label)
387      return '<li>%s: %s</li>' % (  t2.title, t2.__href__(odir='../u/',label=thislab) )
388    else:
389      t2 = targ._inx.uid[targ.oid]
390      return '<li>%s: %s</li>' % (  t2.label, t2.__href__(odir='../u/',label=t2.title) )
391
392  def labTtl(self,targ,frm='',ann=''):
393    return '<li>%s: %s</li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.title )
394
395  def vgrpLink(self,targ,frm='',ann=''):
396    gpsz = len(targ._inx.iref_by_sect[targ.uid].a['requestVar'])
397    nlnk = len(targ._inx.iref_by_sect[targ.uid].a['requestLink'])
398    return '<li>%s {%s}: %s variables, %s request links</li>' % (  targ.__href__(odir='../u/', label=targ.label), targ.mip, gpsz, nlnk )
399
400class tables(object):
401  def __init__(self,sc, mips, odir='xls'):
402      self.sc = sc
403      self.dq = sc.dq
404      self.mips = mips
405      self.odir = odir
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 doTable(self,m,l1,m2,pmax,collector,acc=True, mlab=None):
419      """*acc* allows accumulation of values to be switched off when called in single expt mode"""
420
421      if mlab == None:
422        mlab = self.setMlab( m )
423       
424
425      if m2 == 'TOTAL':
426        thisex = None
427      else:
428        thisex = m2
429      x = self.sc.volByExpt( l1, thisex, expFullEx=(m2 in self.mips), pmax=pmax )
430      if x[0] > 0:
431        if m2 not in [ None, 'TOTAL']:
432          im2 = self.dq.inx.uid[m2]
433          mlab2 = im2.label
434        else:
435          mlab2 = 'all'
436        collector[mlab].a[mlab2] += x[0]
437#
438# create sum for each table
439#
440        xs = 0
441        kkc = '_%s_%s' % (mlab,mlab2)
442        for k in x[2].keys():
443          i = self.dq.inx.uid[k]
444          xxx =  x[2][k]
445          xs += xxx
446          if xxx > 0:
447            collector[kkc].a[i.mipTable] += xxx
448        assert x[0] == xs, 'ERROR.0088: consistency problem %s  %s %s %s' % (m,m2,x[0],xs)
449        if x[0] == 0:
450          print ( 'Zero size: %s, %s' % (m,m2) )
451          if len( x[2].keys() ) > 0:
452             print ( 'ERROR:zero: %s, %s: %s' % (m,m2,str(x[2].keys()) ) )
453
454        if acc:
455          collector[mlab].a['TOTAL'] += x[0]
456
457        dd = collections.defaultdict( list )
458        lll = set()
459        for v in x[2].keys():
460          vi = self.sc.dq.inx.uid[v]
461          if vi._h.label != 'remarks':
462            f,t,l,tt,d,u = (vi.frequency,vi.mipTable,vi.label,vi.title,vi.description,vi.uid)
463            lll.add(u)
464            dd[t].append( (f,t,l,tt,d,u) )
465        if len( dd.keys() ) > 0:
466          collector[mlab].dd[mlab2] = dd
467          if m2 not in [ None, 'TOTAL']:
468            if im2._h.label == 'experiment':
469              dothis = self.sc.tierMax >= im2.tier
470###
471### BUT ... there is a treset in the request item .... it may be that some variables are excluded ...
472###         need the variable list itself .....
473###
474          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 )
475
476styls = styles()
477
478htmlStyle = {}
479htmlStyle['CMORvar'] = {'getIrefs':['requestVar']}
480htmlStyle['requestVarGroup'] = {'getIrefs':['requestVar','requestLink']}
481htmlStyle['var'] = {'getIrefs':['CMORvar']}
482htmlStyle['objective'] = {'getIrefs':['objectiveLink']}
483htmlStyle['requestLink'] = {'getIrefs':['objectiveLink','requestItem']}
484htmlStyle['exptgroup'] = {'getIrefs':['__all__']}
485htmlStyle['requestItem'] = {'getIrefs':['__all__']}
486htmlStyle['experiment'] = {'getIrefs':['__all__']}
487htmlStyle['mip'] = {'getIrefs':['__all__']}
488htmlStyle['remarks'] = {'getIrefs':['__all__']}
489htmlStyle['varChoice'] = {'getIrefs':['__all__']}
490htmlStyle['spatialShape'] = {'getIrefs':['__all__']}
491htmlStyle['temporalShape'] = {'getIrefs':['__all__']}
492htmlStyle['structure'] = {'getIrefs':['__all__']}
493htmlStyle['standardname'] = {'getIrefs':['__all__']}
494
495if __name__ == "__main__":
496  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'
497  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'
498  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'
499  assert os.path.isdir( 'tables' ), 'Before running this script you need to create a "tables" sub-directory, or edit the makeTab class'
500
501  dq = dreq.loadDreq( htmlStyles=htmlStyle)
502##
503## add special styles to dq object "itemStyle" dictionary.
504##
505
506  dq.itemStyles['standardname'] = styls.snLink
507  dq.itemStyles['var'] = styls.varLink
508  dq.itemStyles['mip'] = styls.mipLink
509  dq.itemStyles['CMORvar'] = styls.cmvLink
510  dq.itemStyles['objective'] = styls.objLink
511  dq.itemStyles['structure'] = styls.strLink
512  dq.itemStyles['objectiveLink'] = styls.objLnkLink
513  dq.itemStyles['requestVarGroup'] = styls.vgrpLink
514  dq.itemStyles['requestLink'] = styls.rqlLink02
515  dq.itemStyles['requestItem'] = styls.rqiLink02
516  dq.itemStyles['spatialShape'] = styls.labTtl
517  dq.coll['var'].items[0].__class__._linkAttrStyle['sn'] = styls.snLink01
518##dq.coll['requestVarGroup'].items[0].__class__._linkAttrStyle['requestVar'] = styls.rqvLink01
519  dq.itemStyles['requestVar'] = styls.rqvLink01
520
521  ht = htmlTrees(dq)
522  dq.makeHtml( annotations={'var':ht.anno}, ttl0='Data Request [%s]' % dreq.version )
523  try:
524    import xlsxwriter
525    mt = makeTab( dq)
526  except:
527    print ('Could not make tables ...')
528    raise
529  mp = makePurl()
530  mj = makeJs( dq )
Note: See TracBrowser for help on using the repository browser.