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

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

updates for python 3

Line 
1from __init__ import DOC_DIR
2
3try:
4  import pkgutil
5  l = pkgutil.iter_modules()
6  ll = map( lambda x: x[1], l )
7  pkgutilFailed=False
8except:
9  pkgutilFailed=True
10  print ( 'Failed to load pkgutil .. more limited tests on available modules will be done' )
11  ll = []
12
13requiredModules = ['xml']
14confirmed = []
15installFailed = []
16missingLib = []
17for x in requiredModules:
18  if x in ll or pkgutilFailed:
19      try:
20        __import__(x)
21        confirmed.append( x )
22      except:
23        installFailed.append( x )
24        print ( 'Failed to install %s' % x )
25  else:
26      missingLib.append( x )
27
28if len( missingLib ) > 0 or len(installFailed) > 0:
29  print ( 'Could not load all required python libraries' )
30  if len(missingLib) > 0:
31    print ( 'MISSING LIBRARIES: %s' % str(missingLib) )
32  if len(installFailed) > 0:
33    print ( 'LIBRARIES PRESENT BUT FAILED TO INSTALL:%s' % str(missingLib) )
34  all = False
35  exit(0)
36else:
37  print ( 'Required libraries present' )
38  all = True
39
40import inspect
41class checkbase(object):
42  def __init__(self,lab):
43    self.lab = lab
44    self.ok = True
45
46#document directory
47    self.docdir = DOC_DIR
48#schema location
49    self.schema = '%s/dreq2Schema.xsd' % self.docdir
50#sample xml location
51    self.sampleXml = '%s/dreq2Sample.xml' % self.docdir
52#definition document xml location
53    self.defnXml = '%s/dreq2Defn.xml' % self.docdir
54
55    ml = inspect.getmembers( self, predicate=inspect.ismethod ) 
56    ok = True
57    for tag,m in ml:
58      if tag[:3] == '_ch':
59        try:
60          self.ok = False
61          m()
62          ok &= self.ok
63        except:
64          print ( 'Failed to complete check %s' % tag )
65    if ok:
66      print ( '%s: All checks passed' % lab )
67    else: 
68      print ( '%s: Errors detected' % lab )
69       
70class check1(checkbase):
71  def _ch01_importDreq(self):
72    import dreq
73    print ( 'Dreq software import checked' )
74    self.ok = True
75
76  def _ch02_importSample(self):
77    import dreq
78    rq = dreq.loadDreq( dreqXML=self.sampleXml,configdoc=self.defnXml )
79    print ( 'Dreq sample load checked' )
80    self.ok = True
81
82class check2(checkbase):
83
84  def _clear_ch03(self):
85    os.unlink( '.simpleCheck_check2_err.txt' )
86    os.unlink( '.simpleCheck_check2.txt' )
87
88  def _ch03_checkXML(self):
89    import os
90    os.popen( 'which xmllint 2> .simpleCheck_check2_err.txt 1>.simpleCheck_check2.txt' ).readlines()
91    ii = open( '.simpleCheck_check2_err.txt' ).readlines()
92    if len(ii) > 0:
93      print ( 'WARNING[001]: failed to detect xmllint command line program' )
94      print ( 'optional checks omitted' )
95      self.ok = False
96      self._clear_ch03()
97      return
98    ii = open( '.simpleCheck_check2.txt' ).readlines()
99    if len(ii) < 1:
100      print ( 'WARNING[002]: failed to detect xmllint command line program' )
101      print ( 'Optional checks omitted' )
102      self.ok = False
103      self._clear_ch03()
104      return
105
106    cmd = 'xmllint --noout --schema %s %s  2> .simpleCheck_check2_err.txt 1>.simpleCheck_check2.txt' % (self.schema,self.sampleXml) 
107    os.popen( cmd ).readlines()
108    ii = open( '.simpleCheck_check2_err.txt' ).readlines()
109    if len(ii) == 0:
110      print ( 'WARNING[003]: Failed to capture xmllint response' )
111      print ( cmd )
112      self.ok = False
113      self._clear_ch03()
114      return
115    if string.find(ii[0],'validates') != -1:
116      print ( 'Sample XML validated' )
117      self.ok = True
118      self._clear_ch03()
119    else:
120      print ( 'Sample XML failed to validate' )
121      print ( cmd )
122      self.ok = False
123    return
124   
125all &= check1('Suite 1 (dreq module)').ok
126all &= check2('Suite 2 (xmllint)').ok
127
128if all:
129  print ( 'ALL CHECK PASSED' )
Note: See TracBrowser for help on using the repository browser.