Source code for prepshot.set_up

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""This module contains functions for setting parameters and configuring
logging. 
"""

import logging
import argparse
from os import path, makedirs
from typing import Dict, List, Any

from prepshot.load_data import load_json, extract_config_data, process_data
from prepshot.logs import setup_logging, log_parameter_info


[docs]def parse_cli_arguments(params_list : List[str]) -> argparse.Namespace: """Parse command-line arguments from a list of names of parameters. Parameters ---------- params_list : List[str] List of parameters. Returns ------- argparse.Namespace Parsed command-line arguments. """ parser = argparse.ArgumentParser( description='Command-line arguments parser' ) for param in params_list: parser.add_argument( f'--{param}', type=str, default=None, help=f'Suffix of input paramemeters: {param}' ) return parser.parse_args()
[docs]def initialize_environment(config_files : Dict[str, str]) -> Dict[str, Any]: """Load configuration data, set up logging, and process input parameters. Parameters ---------- config_files : Dict[str, str] Dictionary containing paths to parameters and configuration files. Returns ------- Dict[str, Any] Dictionary containing the global parameters. """ params_filename = config_files['params_filename'] config_filename = config_files['config_filename'] filepath = config_files['filepath'] config_data = load_json(config_filename) required_config_data = extract_config_data(config_data) setup_logging() log_parameter_info(config_data) params = load_json(params_filename) # Underscore-prefixed keys (e.g. _schema_version) are metadata stamps, # not input-file descriptors; skip them when iterating params. file_param_keys = [k for k in params if not k.startswith("_")] # CLI arguments are registered by param-key name (the dict key in # params.json), not by file_name -- the two can diverge after a file # rename (e.g. key='existing_fleet', file_name='fleet_existing'). The # CLI value is appended as a suffix to the file_name, so users still # opt into a scenario via --<param_key> <suffix>. args = parse_cli_arguments(file_param_keys) # Determine the input folder path. input_filename = str(config_data['general_parameters']['input_folder']) input_filepath = path.join(filepath, input_filename) # Update params with command-line arguments if provided. for param in file_param_keys: if getattr(args, param) is not None: params[param]["file_name"] = params[param]["file_name"] \ + f"_{getattr(args, param)}" # Load and process params data params = process_data(params, input_filepath) params['command_line_args'] = args # Combine the configuration data with processed parameter data. params.update(required_config_data) # Determine the output folder path. output_folder = './' \ + str(config_data['general_parameters']['output_folder']) if not path.exists(output_folder): makedirs(output_folder) logging.warning( "Folder %s created", output_folder ) # Determine the output filename. output_filename = output_folder + '/' \ + str(config_data['general_parameters']['output_filename']) params['output_filename'] = output_filename return params