[6991] | 1 | #!/bin/env python |
---|
| 2 | |
---|
| 3 | '''Testlet to check that packages required are importable''' |
---|
| 4 | |
---|
[6996] | 5 | import os |
---|
[6991] | 6 | import sys |
---|
| 7 | import time |
---|
| 8 | import test_utils as util |
---|
| 9 | |
---|
| 10 | |
---|
| 11 | # packages we are testing |
---|
| 12 | Package_Imports = ('from Scientific.IO.NetCDF import NetCDFFile', |
---|
| 13 | 'import numpy', |
---|
| 14 | 'import Numeric', |
---|
| 15 | 'import RandomArray', |
---|
| 16 | 'import pypar', |
---|
[7028] | 17 | 'import scipy', |
---|
[6991] | 18 | 'import matplotlib', |
---|
[7017] | 19 | 'import pylab', |
---|
| 20 | ) |
---|
[6991] | 21 | |
---|
[7017] | 22 | name = 'Test if python packages are importable' |
---|
| 23 | |
---|
[6991] | 24 | def test(logfile): |
---|
| 25 | result = True |
---|
| 26 | |
---|
| 27 | (cluster, domain) = util.get_hostname() |
---|
| 28 | |
---|
[6993] | 29 | # get python to run |
---|
[6996] | 30 | python_env_var = os.getenv('PYTHON') |
---|
[6993] | 31 | |
---|
[6991] | 32 | # get max width of the import tests |
---|
| 33 | width = 0 |
---|
| 34 | for pkg in Package_Imports: |
---|
| 35 | width = max(len(pkg), width) |
---|
| 36 | |
---|
| 37 | # create a 'null' stdout object |
---|
| 38 | null_stdout = open('/dev/null', 'w') |
---|
| 39 | |
---|
| 40 | # test each import |
---|
| 41 | num_errors = 0 |
---|
| 42 | error_packages = [] |
---|
| 43 | |
---|
| 44 | for pkg in Package_Imports: |
---|
| 45 | util.log_print(logfile, "Testing: %s" % pkg.ljust(width+2)) |
---|
| 46 | try: |
---|
| 47 | # turn off stdout while doing this |
---|
| 48 | save_stdout = sys.stdout |
---|
| 49 | sys.stdout = null_stdout |
---|
| 50 | |
---|
| 51 | exec pkg |
---|
| 52 | |
---|
| 53 | sys.stdout = save_stdout |
---|
| 54 | util.log_print_nl(logfile, 'OK') |
---|
| 55 | except ImportError, e: |
---|
| 56 | sys.stdout = save_stdout |
---|
| 57 | util.log_print_nl(logfile, 'ERROR') |
---|
| 58 | error_packages.append(pkg) |
---|
| 59 | num_errors += 1 |
---|
| 60 | result = False |
---|
| 61 | except: |
---|
| 62 | sys.stdout = save_stdout |
---|
| 63 | util.log_print_nl(logfile, 'EXCEPTION') |
---|
| 64 | error_packages.append(pkg) |
---|
| 65 | num_errors += 1 |
---|
| 66 | result = False |
---|
| 67 | |
---|
| 68 | # close the 'null' stdout |
---|
| 69 | null_stdout.close() |
---|
| 70 | |
---|
| 71 | # report errors |
---|
| 72 | util.log_print_nl(logfile) |
---|
| 73 | if num_errors == 0: |
---|
| 74 | util.log_print_nl(logfile, 'All OK.') |
---|
| 75 | else: |
---|
| 76 | if num_errors == 1: |
---|
| 77 | util.log_print_nl(logfile, '\nGot %d error: ' % num_errors) |
---|
| 78 | else: |
---|
| 79 | util.log_print_nl(logfile, '\nGot %d errors: ' % num_errors) |
---|
| 80 | for pkg in error_packages: |
---|
| 81 | util.log_print_nl(logfile, '\t%s' % pkg) |
---|
| 82 | |
---|
| 83 | return result |
---|
| 84 | |
---|
| 85 | |
---|
| 86 | if __name__ == '__main__': |
---|
| 87 | import os |
---|
| 88 | |
---|
| 89 | logfile = 'test.log' |
---|
| 90 | if len(sys.argv) > 1: |
---|
| 91 | logfile = sys.argv[1] |
---|
| 92 | |
---|
| 93 | try: |
---|
| 94 | os.remove(logfile) |
---|
| 95 | except: |
---|
| 96 | pass |
---|
| 97 | |
---|
| 98 | if not test(logfile): |
---|
| 99 | sys.exit(10) |
---|
| 100 | |
---|
| 101 | sys.exit(0) |
---|