Source code for ewokscore.tests.serialization.example_data.compare_json

from typing import Any
from typing import Dict

import numpy

from .types import CustomType


[docs] def assert_deserialized_data( deserialized_data: Dict[str, Any], original_data: Dict[str, Any] ): actual = _data_for_comparison(deserialized_data) expected = _data_for_comparison(original_data) assert actual == expected
[docs] def assert_serialized_data( serialized_data: Dict[str, Any], original_data: Dict[str, Any] ): actual = _actual_data_for_serialized_comparison(serialized_data) expected = _expected_data_for_serialized_comparison(original_data) assert actual == expected
def _data_for_comparison(value: Any) -> Any: if isinstance(value, numpy.ndarray): return { "__test_compare__": True, "__type__": value.dtype, "__values__": value.tolist(), } if isinstance(value, dict): return {k: _data_for_comparison(v) for k, v in value.items()} if isinstance(value, (list, tuple, set)): return type(value)(_data_for_comparison(v) for v in value) return value def _actual_data_for_serialized_comparison(serialized_data: Any) -> Any: """ :param serialized_data: data read directly from JSON without deserialization """ if isinstance(serialized_data, dict): if "__ewoks__" in serialized_data: return {"__test_compare__": serialized_data["__ewoks__"]} return { k: _actual_data_for_serialized_comparison(v) for k, v in serialized_data.items() } if isinstance(serialized_data, list): return list(_actual_data_for_serialized_comparison(v) for v in serialized_data) return serialized_data def _expected_data_for_serialized_comparison(original_data: Any) -> Any: """ :param original_data: original python data before serialization """ if isinstance(original_data, (bytes, tuple, set)): return {"__test_compare__": type(original_data).__name__} if isinstance(original_data, (numpy.ndarray, CustomType)): return {"__test_compare__": "pickle"} if isinstance(original_data, dict): return { k: _expected_data_for_serialized_comparison(v) for k, v in original_data.items() } if isinstance(original_data, list): return list(_expected_data_for_serialized_comparison(v) for v in original_data) return original_data