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

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

01.beta.10

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