Source code for repobee_plug._serialize

"""JSON serialization/deserialization functions.

.. module:: serialize
    :synopsis: JSON serialization/deserialization functions.

.. moduleauthor:: Simon Larsén
"""
import json
from typing import Mapping, List

from repobee_plug import _containers


[docs]def result_mapping_to_json( result_mapping: Mapping[str, List[_containers.Result]] ) -> str: """Serialize a result mapping ``repo_name: str -> hook_results: List[Result]`` to JSON. """ hook_results_as_dicts = { repo_name: { h.name: {"status": h.status.value, "msg": h.msg, "data": h.data} for h in hook_results } for repo_name, hook_results in result_mapping.items() } return json.dumps(hook_results_as_dicts, indent=4, ensure_ascii=False)
[docs]def json_to_result_mapping( json_string: str, ) -> Mapping[str, List[_containers.Result]]: """Deserialize a JSON string to a mapping ``repo_name: str -> hook_results: List[Result]`` """ json_dict = json.loads(json_string) return { repo_name: [ _containers.Result( name=hook, status=_containers.Status(val["status"]), msg=val["msg"], data=val["data"], ) for hook, val in hook_dicts.items() ] for repo_name, hook_dicts in json_dict.items() }