source: CMIP6dreq/trunk/dreqPy/simpleCheck.py @ 594

Subversion URL: http://proj.badc.rl.ac.uk/svn/exarch/CMIP6dreq/trunk/dreqPy/simpleCheck.py@594
Revision 594, 5.1 KB checked in by mjuckes, 4 years ago (diff)

Updated setup for tag 01.beta.20

Line 
1from __init__ import DOC_DIR
2import string, os, sys
3
4try:
5  import pkgutil
6  l = pkgutil.iter_modules()
7  ll = map( lambda x: x[1], l )
8  pkgutilFailed=False
9except:
10  pkgutilFailed=True
11  print ( 'Failed to load pkgutil .. more limited tests on available modules will be done' )
12  ll = []
13
14requiredModules = ['xml']
15confirmed = []
16installFailed = []
17missingLib = []
18for x in requiredModules:
19  if x in ll or pkgutilFailed:
20      try:
21        __import__(x)
22        confirmed.append( x )
23      except:
24        installFailed.append( x )
25        print ( 'Failed to install %s' % x )
26  else:
27      missingLib.append( x )
28
29if len( missingLib ) > 0 or len(installFailed) > 0:
30  print ( 'Could not load all required python libraries' )
31  if len(missingLib) > 0:
32    print ( 'MISSING LIBRARIES: %s' % str(missingLib) )
33  if len(installFailed) > 0:
34    print ( 'LIBRARIES PRESENT BUT FAILED TO INSTALL:%s' % str(missingLib) )
35  all = False
36  exit(0)
37else:
38  print ( 'Required libraries present' )
39  all = True
40
41import inspect
42class checkbase(object):
43  def __init__(self,lab):
44    self.lab = lab
45    self.ok = True
46    self.entryPoint = sys.argv[0].split( '/' )[-1]
47
48#document directory
49    self.docdir = DOC_DIR
50#schema location
51    self.schema = '%s/dreq2Schema.xsd' % self.docdir
52#sample xml location
53    self.sampleXml = '%s/dreq2Sample.xml' % self.docdir
54#definition document xml location
55    self.defnXml = '%s/dreq2Defn.xml' % self.docdir
56
57    ml = inspect.getmembers( self, predicate=inspect.ismethod ) 
58    ok = True
59    for tag,m in ml:
60      if tag[:3] == '_ch':
61        try:
62          self.ok = False
63          m()
64          ok &= self.ok
65        except:
66          print ( 'Failed to complete check %s' % tag )
67          raise
68    if ok:
69      print ( '%s: All checks passed' % lab )
70    else: 
71      print ( '%s: Errors detected' % lab )
72       
73class check1(checkbase):
74  def _ch01_importDreq(self):
75    import dreq
76    print ( 'Dreq software import checked' )
77    self.ok = True
78
79  def _ch02_importSample(self):
80    import dreq
81    self.dq = dreq.loadDreq( dreqXML=self.sampleXml,configdoc=self.defnXml )
82    print ( 'Dreq sample load checked' )
83    self.ok = True
84
85  def _ch03_linkCheck(self):
86    nn = 0
87    import dreq
88    self.dq = dreq.loadDreq(  )
89    for section in self.dq.coll :
90      ks=[k for k in self.dq.coll[section].attDefn.keys() if self.dq.coll[section].attDefn[k].useClass == 'internalLink']
91      nerr = 0
92      for i in self.dq.coll[section].items:
93        for k in ks :
94          if k in i.__dict__:
95            if i.__dict__[k] not in self.dq.inx.uid:
96              nerr += 1
97              ##print section, k, i.__dict__[k]
98      if nerr > 0:
99           print ( 'Section %s: bad links: %s' % (section,nerr) )
100           nn += nerr
101      ##print section, ks, nerr
102    if nn == 0:
103      print ( 'Dreq links checked' )
104    self.ok = nn == 0
105
106class check2(checkbase):
107
108  def _clear_ch03(self):
109    os.unlink( '.simpleCheck_check2_err.txt' )
110    os.unlink( '.simpleCheck_check2.txt' )
111
112  def _clear_ch04(self):
113    os.unlink( '.simpleCheck_check2_err.txt' )
114    os.unlink( '.simpleCheck_check2.txt' )
115
116  def _ch04_checkCmd(self):
117    import os
118    if self.entryPoint == 'drq':
119       cmd = 'drq'
120    else:
121       cmd = 'python dreqCmdl.py'
122
123    os.popen( '%s -v  2> .simpleCheck_check2_err.txt 1>.simpleCheck_check2.txt' % cmd ).readlines()
124
125    ii = open( '.simpleCheck_check2_err.txt' ).readlines()
126    if len(ii) > 0:
127      print ( 'WARNING[003]: failed to get version with command line call' )
128      self.ok = False
129      self._clear_ch04()
130      return
131
132    ii = open( '.simpleCheck_check2.txt' ).readlines()
133    if len(ii) < 1:
134      print ( 'WARNING[004]: failed to get version with command line call' )
135      self.ok = False
136      self._clear_ch04()
137      return
138
139    self.ok = True
140    return
141
142  def _ch03_checkXML(self):
143    import os
144    os.popen( 'which xmllint 2> .simpleCheck_check2_err.txt 1>.simpleCheck_check2.txt' ).readlines()
145    ii = open( '.simpleCheck_check2_err.txt' ).readlines()
146    if len(ii) > 0:
147      print ( 'WARNING[001]: failed to detect xmllint command line program' )
148      print ( 'optional checks omitted' )
149      self.ok = False
150      self._clear_ch03()
151      return
152    ii = open( '.simpleCheck_check2.txt' ).readlines()
153    if len(ii) < 1:
154      print ( 'WARNING[002]: failed to detect xmllint command line program' )
155      print ( 'Optional checks omitted' )
156      self.ok = False
157      self._clear_ch03()
158      return
159
160    cmd = 'xmllint --noout --schema %s %s  2> .simpleCheck_check2_err.txt 1>.simpleCheck_check2.txt' % (self.schema,self.sampleXml) 
161    os.popen( cmd ).readlines()
162    ii = open( '.simpleCheck_check2_err.txt' ).readlines()
163    if len(ii) == 0:
164      print ( 'WARNING[003]: Failed to capture xmllint response' )
165      print ( cmd )
166      self.ok = False
167      self._clear_ch03()
168      return
169    if ii[0].find('validates') != -1:
170      print ( 'Sample XML validated' )
171      self.ok = True
172      self._clear_ch03()
173    else:
174      print ( 'Sample XML failed to validate' )
175      print ( cmd )
176      self.ok = False
177    return
178   
179all &= check1('Suite 1 (dreq module)').ok
180all &= check2('Suite 2 (xmllint & command line)').ok
181
182if all:
183  print ( 'ALL CHECK PASSED' )
Note: See TracBrowser for help on using the repository browser.