| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| |
| from pkg_resources import VersionConflict, DistributionNotFound, \ |
| require |
| from ocw.tests.test_local import create_netcdf_object |
| from ocw.data_source import local |
| from ocw import dataset_processor as dsp |
| import os |
| import six |
| |
| if six.PY3: |
| DEPENDENCIES_FILE = 'deps_py3.txt' |
| else: |
| DEPENDENCIES_FILE = 'deps_py2.txt' |
| |
| SUCCESS_MARK = '\033[92m' + u'\u2713' + '\033[0m' |
| FAILURE_MARK = '\033[91m' + u'\u274C' + '\033[0m' |
| |
| |
| def fail(prefix): |
| print(prefix + " " + FAILURE_MARK) |
| |
| |
| def success(prefix): |
| print(prefix + " " + SUCCESS_MARK) |
| |
| |
| def check_dependencies(file): |
| ''' Verify all necessary dependencies are installed ''' |
| for dep in file: |
| dep = dep.replace('\n', '') |
| # skip all comments and blank lines in dependency file |
| if '#' in dep or not dep: |
| continue |
| try: |
| require(dep) |
| success(dep) |
| except DistributionNotFound as df: |
| fail(dep) |
| dep = str(df).split(' ')[1][1:-1] |
| print('\n' + dep + ' dependency missing.') |
| print('Please install it using "pip/conda install ' + dep + '"') |
| fail("\nDependencies") |
| end() |
| except VersionConflict as vc: |
| fail(dep) |
| print("\nRequired version and installed version differ for the " |
| "following package:\n" |
| "Required version: " + dep) |
| dep_name = str(vc).split(' ')[0][1:] # First element is '(' |
| dep_version = str(vc).split(' ')[1] |
| print("Installed version: " + dep_name + "==" + dep_version) |
| fail("\nDependencies") |
| end() |
| |
| |
| def check_dataset_loading(): |
| ''' Try loading test dataset ''' |
| dataset = None |
| try: |
| file_path = create_netcdf_object() |
| dataset = local.load_file(file_path, variable_name='value') |
| except Exception as e: |
| fail("\nDataset loading") |
| print("The following error occured") |
| print(e) |
| end(dataset) |
| success("\nDataset loading") |
| return dataset |
| |
| |
| def check_some_dataset_functions(dataset): |
| ''' Run a subset of dataset functions and check for any exception ''' |
| try: |
| dataset.spatial_boundaries() |
| dataset.temporal_boundaries() |
| dataset.spatial_resolution() |
| except Exception as e: |
| fail("\nDataset functions") |
| print("Following error occured:") |
| print(str(e)) |
| end(dataset) |
| success("\nDataset functions") |
| |
| |
| def check_some_dsp_functions(dataset): |
| ''' |
| Run a subset of dataset processor functions and check for |
| any kind of exception. |
| ''' |
| try: |
| dsp.temporal_rebin(dataset, 'annual') |
| dsp.ensemble([dataset]) |
| except Exception as e: |
| fail("\nDataset processor functions") |
| print("Following error occured:") |
| print(str(e)) |
| end() |
| finally: |
| os.remove(dataset.origin['path']) |
| success("\nDataset processor functions") |
| |
| |
| def end(dataset=None): |
| ''' Exit program with status 1 ''' |
| if dataset: |
| os.remove(dataset.origin['path']) |
| 'End program execution with return code 1' |
| print('\033[91m' + "Some checks were unsuccessful") |
| print("Please Fix them and run the test again." + '\033[0m') |
| exit(1) |
| |
| |
| def main(): |
| dep_file = open(DEPENDENCIES_FILE, 'r') |
| print("Checking installed dependencies\n") |
| check_dependencies(dep_file) |
| success("\nDependencies") |
| dataset = check_dataset_loading() |
| check_some_dataset_functions(dataset) |
| check_some_dsp_functions(dataset) |
| success("\nAll checks successfully completed") |
| return 0 |
| |
| if __name__ == '__main__': |
| main() |