Source code for samgis_core.utilities.create_folders_if_not_exists

import json
import logging
import os
from pathlib import Path


[docs] def stats_pathname(pathname: Path | str): current_pathname = Path(pathname) return current_pathname.is_dir()
[docs] def create_folder_if_not_exists(pathname: Path | str): """Create a folder given its path. Args: pathname: folder Path or string Returns: """ current_pathname = Path(pathname) try: print(f"Pathname exists? {current_pathname.exists()}, That's a folder? {current_pathname.is_dir()}...") logging.info(f"Pathname exists? {current_pathname.exists()}, That's a folder? {current_pathname.is_dir()}...") current_pathname.unlink(missing_ok=True) except PermissionError as pe: print(f"permission denied on removing pathname before folder creation:{pe}.") logging.error(f"permission denied on removing pathname before folder creation:{pe}.") except IsADirectoryError as errdir: print(f"that's a directory:{errdir}.") logging.error(f"that's a directory:{errdir}.") print(f"Creating pathname: {current_pathname} ...") logging.info(f"Creating pathname: {current_pathname} ...") current_pathname.mkdir(mode=0o770, parents=True, exist_ok=True) print(f"assertion: pathname exists and is a folder: {current_pathname} ...") logging.info(f"assertion: pathname exists and is a folder: {current_pathname} ...") assert current_pathname.is_dir()
[docs] def folders_creation(folders_map: dict | str = None, ignore_errors: bool = True): """Create all folders listed within the folders_map argument (this argument can be a dict or a json string). If folders_map is None the function will try to load the 'FOLDERS_MAP' env variable, then will load that json into dict. Once loaded and parsed the folders_map variable, the function will loop over the dict to create the folders using the `create_folder_if_not_exists()` function. Args: folders_map: dict or string map of folder string ignore_errors: bool needed to eventually ignore errors on folder creation Returns: """ enforce_validation_with_getenv = folders_map is None if enforce_validation_with_getenv: folders_map = os.getenv("FOLDERS_MAP") try: folders_dict = folders_map if isinstance(folders_map, dict) else json.loads(folders_map) for folder_env_ref, folder_env_path in folders_dict.items(): logging.info(f"folder_env_ref:{folder_env_ref}, folder_env_path:{folder_env_path}.") create_folder_if_not_exists(folder_env_path) print("========") if enforce_validation_with_getenv: assert os.getenv(folder_env_ref) == folder_env_path except (json.JSONDecodeError, TypeError) as jde: logging.error(f"jde:{jde}.") msg = "double check your variables, e.g. for misspelling like 'FOLDER_MAP'" msg += "instead than 'FOLDERS_MAP', or invalid json values." logging.error(msg) for k_env, v_env in dict(os.environ).items(): logging.info(f"{k_env}, v_env:{v_env}.") if not ignore_errors: raise TypeError(jde)
if __name__ == '__main__': folders_creation()