# flake8: noqa raise DeprecationWarning( "Benchmarking depends on deprecated functionality and it has not been updated to primaite v3 yet." ) # © Crown-owned copyright 2023, Defence Science and Technology Laboratory UK import json from pathlib import Path from typing import Any, Dict, Union import yaml from primaite import getLogger _LOGGER = getLogger(__name__) def parse_session_metadata(session_path: Union[Path, str], dict_only: bool = False) -> Dict[str, Any]: """ Loads a session metadata from the given directory path. :param session_path: Directory where the session metadata file is in :param dict_only: If dict_only is true, the function will only return the dict contents of session metadata :return: Dictionary which has all the session metadata contents :rtype: Dict :return: Path where the YAML copy of the training config is dumped into :rtype: str :return: Path where the YAML copy of the laydown config is dumped into :rtype: str """ if not isinstance(session_path, Path): session_path = Path(session_path) if not session_path.exists(): # Session path does not exist msg = f"Failed to load PrimAITE Session, path does not exist: {session_path}" _LOGGER.error(msg) raise FileNotFoundError(msg) # Unpack the session_metadata.json file md_file = session_path / "session_metadata.json" with open(md_file, "r") as file: md_dict = json.load(file) # if dict only, return dict without doing anything else if dict_only: return md_dict # Create a temp directory and dump the training and lay down # configs into it temp_dir = session_path / ".temp" temp_dir.mkdir(exist_ok=True) temp_tc = temp_dir / "tc.yaml" with open(temp_tc, "w") as file: yaml.dump(md_dict["env"]["training_config"], file) temp_ldc = temp_dir / "ldc.yaml" with open(temp_ldc, "w") as file: yaml.dump(md_dict["env"]["lay_down_config"], file) return [md_dict, temp_tc, temp_ldc]