Source code for oasislmf.validation.model_data
__all__ = [
'csv_validity_test',
]
import os
import logging
import subprocess
from ..utils.exceptions import OasisException
# Model files to test
INPUT_FILES = {
'damage_bin_dict': {
'name': 'damage_bin_dict',
'validation_tool': 'validatedamagebin',
'flag': '-d'
},
'footprint': {
'name': 'footprint',
'validation_tool': 'validatefootprint',
'flag': '-f'
},
'vulnerability': {
'name': 'vulnerability',
'validation_tool': 'validatevulnerability',
'flag': '-s'
}
}
[docs]
def csv_validity_test(model_data_fp):
"""
Assess validity of model data.
:param model_data_fp: directory containing csv files
:type model_data_fp: str
:raises OasisException: if one of the tests fail
"""
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
model_data_dir = os.path.abspath(model_data_fp)
# Check individual files
for input_file in INPUT_FILES.values():
validation_tool = input_file['validation_tool']
input_file_path = os.path.join(
model_data_dir,
'{}.csv'.format(input_file['name'])
)
logger.info("Testing {}.csv".format(input_file['name']))
cmd_str = "{} < {}".format(validation_tool, input_file_path)
try:
subprocess.check_call(cmd_str, stderr=subprocess.STDOUT, shell=True)
except subprocess.CalledProcessError as e:
raise OasisException("Exception raised in 'csv_validity_test'", e)
# Execute cross checks
logger.info("Executing cross checks")
cmd_str = "crossvalidation"
for input_file in INPUT_FILES.values():
flag = input_file['flag']
input_file_path = os.path.join(
model_data_dir,
'{}.csv'.format(input_file['name'])
)
cmd_str += " {} {}".format(flag, input_file_path)
try:
subprocess.check_call(cmd_str, stderr=subprocess.STDOUT, shell=True)
except subprocess.CalledProcessError as e:
raise OasisException("Exception raised in 'csv_validity_test'", e)