Source code for oasislmf.preparation.dir_inputs

__all__ = [
    'create_target_directory',
    'prepare_input_files_directory'
]

import filecmp
import os
import shutil

from pathlib import Path

from ..utils.exceptions import OasisException
from ..utils.path import as_path
from ..utils.defaults import store_exposure_fp


[docs] def create_target_directory(target_dir, label): target_dir = as_path(target_dir, label, is_dir=True, preexists=False) if not os.path.exists(target_dir): Path(target_dir).mkdir(parents=True, exist_ok=True) return target_dir
[docs] def prepare_input_files_directory( target_dir, exposure_data, exposure_profile_fp=None, keys_fp=None, keys_errors_fp=None, lookup_config_fp=None, model_version_fp=None, complex_lookup_config_fp=None, accounts_profile_fp=None, fm_aggregation_profile_fp=None, ): try: # Prepare the target directory and copy the source files, profiles and # model version file into it target_dir = create_target_directory( target_dir, 'target Oasis files directory' ) # Copy preserving original filenames paths = [ (p, os.path.join(target_dir, os.path.basename(p))) for p in ( exposure_profile_fp, accounts_profile_fp, fm_aggregation_profile_fp, lookup_config_fp, model_version_fp, keys_fp, keys_errors_fp ) if p ] # Copy and rename to default set in # oasislmf.utils.defaults.SOURCE_FILENAMES paths_rename = [ (complex_lookup_config_fp, "complex_lookup") ] for fp, key in paths_rename: if fp: # check if exposure pre-analysis has run: if not os.path.exists(os.path.join(target_dir, f'epa_{store_exposure_fp(fp, key)}')): paths.append((fp, os.path.join(target_dir, store_exposure_fp(fp, key)))) for src, dst in paths: if src and os.path.exists(src): shutil.copy2(src, dst) if not (os.path.exists(dst) and filecmp.cmp(src, dst, shallow=False)) else None except (FileNotFoundError, IOError, OSError, shutil.Error, TypeError, ValueError) as e: raise OasisException("Exception raised in 'prepare_input_files_directory'", e) # if exposure pre-analysis has run then the data are already copied in the input directory and cur_version_name is '' if exposure_data.location.cur_version_name != '': exposure_data.save(target_dir, version_name='', save_config=True) return target_dir