Source code for snowprofile.io.internal_json

# -*- coding: utf-8 -*-

import json
import logging


[docs] def to_dict(snowprofile): """ Dump of a SnowProfile object into a JSON-serializable object (combination of dict, list and str). :param snowprofile: The SnowProfile object to dump :type snowprofile: `:py:class:snowprofile.SnowProfile` object :returns: JSON-serializable object (dict) """ return snowprofile.model_dump()
[docs] def to_json(snowprofile, **kwargs) -> str: """ Dump of a SnowProfile object into a JSON-encoded string :param snowprofile: The SnowProfile object to dump :type snowprofile: `:py:class:snowprofile.SnowProfile` :param kwargs: Arguments to be passed to the json.dumps function (standard library) :returns: JSON-serialized string :rtype: str """ return json.dumps(to_dict(snowprofile), **kwargs)
[docs] def from_json(json): """ Create a SnowProfile object from a JSON-encoded string. :param json: The JSON-encoded string :type json: str :returns: The corresponding SnowProfile object :rtype: `:py:class:snowprofile.SnowProfile` """ from snowprofile import SnowProfile new = SnowProfile.model_validate_json(json) return new
[docs] def write_internal_json(snowprofile, filename, **kwargs): """ Write the SnowProfile object into an internal JSON representation :param snowprofile: The SnowProfile object :type snowprofile: `:py:class:snowprofile.SnowProfile` :param filename: The filename/filepath to write (warning: any existing file with the same name will be overwritten with no confirmation). :type filename: str or path-like object :param kwargs: Arguments to be passed to the json.dump function (standard library) :returns: The written filename :rtype: str """ with open(filename, 'w') as ff: json.dump(to_dict(snowprofile), ff, **kwargs) logging.info(f'Written to {filename}') return filename
[docs] def read_internal_json(filename): """ Read from an internal JSON representation to create a SnowProfile object. :param filename: The filename/filepath to read. :type filename: str or path-like object :param kwargs: Arguments to be passed to the json.load function (standard library) :returns: The corresponding SnowProfile object :rtype: `:py:class:snowprofile.SnowProfile` """ with open(filename, 'r') as ff: j = json.load(ff) return from_json(json.dumps(j))