Source code for confs.json_interface

"""
Module
------

    json_interface.py

Description
-----------

    This module contains classes and functions to read and write
    JSON-formatted files.

Functions
---------

    read_json(json_file)

        This function ingests a JavaScript Object Notation (e.g.,
        JSON) formatted file and returns a Python dictionary
        containing all attributes of the file.

    write_json(json_file, in_dict, indent=4)

        This function writes a JavaScript Object Notation (e.g., JSON)
        formatted file using the specified Python dictionary.

Author(s)
---------

    Henry R. Winterbottom; 27 December 2022

History
-------

    2022-12-27: Henry Winterbottom -- Initial implementation.

"""

# ----

# pylint: disable=broad-except
# pylint: disable=raise-missing-from

# ----

import json
from typing import Dict

from utils.exceptions_interface import JSONInterfaceError
from utils.logger_interface import Logger

# ----

# Define all available module properties.
__all__ = ["read_json", "write_json"]

# ----

logger = Logger(caller_name=__name__)

# ----


[docs]def read_json(json_file: str) -> Dict: """ Description ----------- This function ingests a JavaScript Object Notation (e.g., JSON) formatted file and returns a Python dictionary containing all attributes of the file. Parameters ---------- json_file: ``str`` A Python string containing the full-path to the JSON file to be parsed. Returns ------- json_dict: ``Dict`` A Python dictionary containing all attributes contained within the ingested JSON file. Raises ------ JSONInterfaceError: - raised is an exception is encountered while reading from the JSON-formatted file specified upon entry. """ # Open and read the contents of the specified JSON-formatted file # path; proceed accordingly. msg = f"Reading from JSON-formatted file {json_file}." logger.info(msg=msg) try: with open(json_file, "r", encoding="utf-8") as stream: json_dict = json.load(stream) except Exception as errmsg: msg = f"Reading JSON-formatted file {json_file} failed with error {errmsg}. Aborting!!!" raise JSONInterfaceError(msg=msg) return json_dict
# ----
[docs]def write_json(json_file: str, in_dict: Dict, indent: int = 4) -> None: """ Description ----------- This function writes a JavaScript Object Notation (e.g., JSON) formatted file using the specified Python dictionary. Parameters ---------- json_file: ``str`` A Python string containing the full-path to the JSON file to be written. in_dict: ``Dict`` A Python dictionary containing the attributes to be written to the JSON file. Keywords -------- indent: ``int``, optional A Python integer defining the indentation level for the attributes within the JSON-formatted file. Raises ------ JSONInterfaceError: - raised is an exception is encountered while writing to the JSON-formatted file specified upon entry. """ # Open and write the Python dictionary contents to the specified # JSON-formatted file path; proceed accordingly. msg = f"Writing to JSON-formatted file {json_file}." logger.info(msg=msg) try: with open(json_file, "w", encoding="utf-8") as file: json.dump(in_dict, file, indent=indent) except Exception as errmsg: msg = f"Writing JSON-formatted file {json_file} failed with error {errmsg}. Aborting!!!" raise JSONInterfaceError(msg=msg)