from music_assistant.constants import DB_TABLE_CACHE, DB_TABLE_SETTINGS, MASS_LOGGER_NAME
from music_assistant.helpers.api import parse_value
from music_assistant.helpers.database import DatabaseConnection
-from music_assistant.helpers.json import json_dumps, json_loads
+from music_assistant.helpers.json import async_json_loads, json_dumps
from music_assistant.models.core_controller import CoreController
if TYPE_CHECKING:
)
) and (not checksum or (db_row["checksum"] == checksum and db_row["expires"] >= cur_time)):
try:
- data = await asyncio.to_thread(json_loads, db_row["data"])
+ data = await async_json_loads(db_row["data"])
except Exception as exc:
LOGGER.error(
"Error parsing cache data for %s: %s",
ENCRYPT_SUFFIX,
)
from music_assistant.helpers.api import api_command
-from music_assistant.helpers.json import JSON_DECODE_EXCEPTIONS, json_dumps, json_loads
+from music_assistant.helpers.json import JSON_DECODE_EXCEPTIONS, async_json_dumps, async_json_loads
from music_assistant.helpers.util import load_provider_module
if TYPE_CHECKING:
for filename in (self.filename, f"{self.filename}.backup"):
try:
async with aiofiles.open(filename, encoding="utf-8") as _file:
- self._data = json_loads(await _file.read())
+ self._data = await async_json_loads(await _file.read())
LOGGER.debug("Loaded persistent settings from %s", filename)
await self._migrate()
return
await rename(self.filename, filename_backup)
async with aiofiles.open(self.filename, "w", encoding="utf-8") as _file:
- await _file.write(json_dumps(self._data, indent=True))
+ await _file.write(await async_json_dumps(self._data, indent=True))
LOGGER.debug("Saved data to persistent storage")
@api_command("config/providers/reload")
).decode("utf-8")
+async def async_json_dumps(data: Any, indent: bool = False) -> str:
+ """Dump json string async."""
+ return await asyncio.to_thread(json_dumps, data, indent)
+
+
json_loads = orjson.loads
+
+async def async_json_loads(data: str) -> Any:
+ """Load json string async."""
+ return await asyncio.to_thread(json_loads, data)
+
+
TargetT = TypeVar("TargetT", bound=DataClassORJSONMixin)