Source code for icat_esrf_definitions.tests.compare
from typing import Any
from typing import Dict
import numpy
import pint
from ..models._base.model import IcatNexusBaseModel
[docs]
def assert_equal_pydantic_model(
actual: IcatNexusBaseModel, expected: IcatNexusBaseModel
):
assert_equal_serialize_models(actual.model_dump(), expected.model_dump())
[docs]
def assert_equal_serialize_models(
actual: Dict[str, Any], expected: Dict[str, Any]
) -> None:
actual = _make_comparable(actual)
expected = _make_comparable(expected)
assert actual == expected
def _make_comparable(obj: Any) -> Any:
if isinstance(obj, numpy.ndarray):
return "__ndarray__", obj.tolist()
elif isinstance(obj, pint.Quantity):
return "__Quantity__", _make_comparable(obj.magnitude), obj.units
elif isinstance(obj, dict):
return {k: _make_comparable(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [_make_comparable(v) for v in obj]
else:
return obj