"""Patch JSON related functions.""" from __future__ import annotations import functools from typing import Any from unittest import mock import orjson from homeassistant.helpers import json as json_helper real_json_encoder_default = json_helper.json_encoder_default mock_objects = [] def json_encoder_default(obj: Any) -> Any: """Convert Home Assistant objects. Hand other objects to the original method. """ if isinstance(obj, mock.Base): mock_objects.append(obj) raise TypeError(f"Attempting to serialize mock object {obj}") return real_json_encoder_default(obj) json_helper.json_encoder_default = json_encoder_default json_helper.json_bytes = functools.partial( orjson.dumps, option=orjson.OPT_NON_STR_KEYS, default=json_encoder_default ) json_helper.json_bytes_sorted = functools.partial( orjson.dumps, option=orjson.OPT_NON_STR_KEYS | orjson.OPT_SORT_KEYS, default=json_encoder_default, )