diff --git a/core/services/wiki/cache.py b/core/services/wiki/cache.py index 213227f..e6fb302 100644 --- a/core/services/wiki/cache.py +++ b/core/services/wiki/cache.py @@ -1,9 +1,13 @@ -import ujson as json - from core.base_service import BaseService from core.dependence.redisdb import RedisDB from modules.wiki.base import Model +try: + import ujson as jsonlib +except ImportError: + import json as jsonlib + + __all__ = ["WikiCache"] @@ -17,7 +21,7 @@ class WikiCache(BaseService.Component): if isinstance(value, Model): value = value.json() elif isinstance(value, (dict, list)): - value = json.dumps(value) + value = jsonlib.dumps(value) await self.client.set(qname, value) async def delete(self, key: str): @@ -28,10 +32,10 @@ class WikiCache(BaseService.Component): qname = f"{self.qname}:{key}" # noinspection PyBroadException try: - result = json.loads(await self.client.get(qname)) + result = jsonlib.loads(await self.client.get(qname)) except Exception: # pylint: disable=W0703 result = [] if isinstance(result, list) and len(result) > 0: for num, item in enumerate(result): - result[num] = json.loads(item) + result[num] = jsonlib.loads(item) return result diff --git a/gram_core b/gram_core index 30cc0cf..9dd1aca 160000 --- a/gram_core +++ b/gram_core @@ -1 +1 @@ -Subproject commit 30cc0cf8f700f50ad3063b2f3bca4f325f121bd3 +Subproject commit 9dd1acab7842fb2c7cfd5ca507de93778318dc82 diff --git a/metadata/genshin.py b/metadata/genshin.py index 5e54efc..d6c7a82 100644 --- a/metadata/genshin.py +++ b/metadata/genshin.py @@ -5,12 +5,15 @@ from __future__ import annotations import functools from typing import Any, Generic, ItemsView, Iterator, KeysView, Optional, TypeVar, ValuesView -import ujson as json - from utils.const import PROJECT_ROOT from utils.log import logger from utils.typedefs import StrOrInt +try: + import ujson as jsonlib +except ImportError: + import json as jsonlib + __all__ = ( "HONEY_DATA", "AVATAR_DATA", @@ -52,7 +55,7 @@ class Data(dict, Generic[K, V]): ) self._dict = {} with open(path, encoding="utf-8") as file: - self._dict = json.load(file) + self._dict = jsonlib.load(file) _cache.update({self._file_name: self._dict}) return self._dict diff --git a/metadata/scripts/honey.py b/metadata/scripts/honey.py index 01b28a9..881278e 100644 --- a/metadata/scripts/honey.py +++ b/metadata/scripts/honey.py @@ -4,7 +4,6 @@ import asyncio import re from typing import Dict, List, Optional -import ujson as json from aiofiles import open as async_open from httpx import AsyncClient, HTTPError, Response @@ -13,6 +12,11 @@ from utils.const import PROJECT_ROOT from utils.log import logger from utils.typedefs import StrOrInt +try: + import ujson as jsonlib +except ImportError: + import json as jsonlib + __all__ = [ "get_avatar_data", "get_artifact_data", @@ -46,7 +50,7 @@ async def get_avatar_data() -> DATA_TYPE: url = "https://genshin.honeyhunterworld.com/fam_chars/?lang=CHS" response = await request(url) chaos_data = re.findall(r"sortable_data\.push\((.*?)\);\s*sortable_cur_page", response.text)[0] - json_data = json.loads(chaos_data) # 转为 json + json_data = jsonlib.loads(chaos_data) # 转为 json for data in json_data: cid = int("10000" + re.findall(r"\d+", data[1])[0]) honey_id = re.findall(r"/(.*?)/", data[1])[0] @@ -64,7 +68,7 @@ async def get_weapon_data() -> DATA_TYPE: for url in urls: response = await request(url) chaos_data = re.findall(r"sortable_data\.push\((.*?)\);\s*sortable_cur_page", response.text)[0] - json_data = json.loads(chaos_data) # 转为 json + json_data = jsonlib.loads(chaos_data) # 转为 json for data in json_data: name = re.findall(r">(.*)<", data[1])[0] if name in ["「一心传」名刀", "石英大剑", "琥珀玥", "黑檀弓"]: # 跳过特殊的武器 @@ -85,12 +89,12 @@ async def get_material_data() -> DATA_TYPE: urls = weapon + talent + namecard response = await request("https://api.ambr.top/v2/chs/material") - ambr_data = json.loads(response.text)["data"]["items"] + ambr_data = jsonlib.loads(response.text)["data"]["items"] for url in urls: response = await request(url) chaos_data = re.findall(r"sortable_data\.push\((.*?)\);\s*sortable_cur_page", response.text)[0] - json_data = json.loads(chaos_data) # 转为 json + json_data = jsonlib.loads(chaos_data) # 转为 json for data in json_data: honey_id = re.findall(r"/(.*?)/", data[1])[0] name = re.findall(r">(.*)<", data[1])[0] @@ -108,18 +112,18 @@ async def get_artifact_data() -> DATA_TYPE: async def get_first_id(_link) -> str: _response = await request(_link) _chaos_data = re.findall(r"sortable_data\.push\((.*?)\);\s*sortable_cur_page", _response.text)[0] - _json_data = json.loads(_chaos_data) + _json_data = jsonlib.loads(_chaos_data) return re.findall(r"/(.*?)/", _json_data[-1][1])[0] result = {} url = "https://genshin.honeyhunterworld.com/fam_art_set/?lang=CHS" response = await request("https://api.ambr.top/v2/chs/reliquary") - ambr_data = json.loads(response.text)["data"]["items"] + ambr_data = jsonlib.loads(response.text)["data"]["items"] response = await request(url) chaos_data = re.findall(r"sortable_data\.push\((.*?)\);\s*sortable_cur_page", response.text)[0] - json_data = json.loads(chaos_data) # 转为 json + json_data = jsonlib.loads(chaos_data) # 转为 json for data in json_data: honey_id = re.findall(r"/(.*?)/", data[1])[0] name = re.findall(r"alt=\"(.*?)\"", data[0])[0] @@ -151,7 +155,7 @@ async def get_namecard_data() -> DATA_TYPE: response = await request(url) chaos_data = re.findall(r"sortable_data\.push\((.*?)\);\s*sortable_cur_page", response.text)[0] - json_data = json.loads(chaos_data) + json_data = jsonlib.loads(chaos_data) for data in json_data: honey_id = re.findall(r"/(.*?)/", data[1])[0] name = re.findall(r"alt=\"(.*?)\"", data[0])[0] @@ -189,5 +193,5 @@ async def update_honey_metadata(overwrite: bool = True) -> FULL_DATA_TYPE | None } path.parent.mkdir(parents=True, exist_ok=True) async with async_open(path, mode="w", encoding="utf-8") as file: - await file.write(json.dumps(result, ensure_ascii=False, indent=4)) + await file.write(jsonlib.dumps(result, ensure_ascii=False, indent=4)) return result diff --git a/metadata/scripts/metadatas.py b/metadata/scripts/metadatas.py index 249f3e2..4af223e 100644 --- a/metadata/scripts/metadatas.py +++ b/metadata/scripts/metadatas.py @@ -1,13 +1,17 @@ from contextlib import contextmanager from typing import Iterator, Dict -import ujson as json from aiofiles import open as async_open from httpx import URL, AsyncClient, RemoteProtocolError, Response from utils.const import AMBR_HOST, PROJECT_ROOT from utils.log import logger +try: + import ujson as jsonlib +except ImportError: + import json as jsonlib + __all__ = [ "update_metadata_from_ambr", "update_metadata_from_github", @@ -32,7 +36,7 @@ async def fix_metadata_from_ambr(json_data: Dict[str, Dict], data_type: str): for wid in need_append_ids: url = AMBR_HOST.join(f"v2/chs/{data_type}/{wid}") response = await client.get(url) - json_data_ = json.loads(response.text)["data"] + json_data_ = jsonlib.loads(response.text)["data"] json_data[str(json_data_["id"])] = {k: json_data_[k] for k in need_attr} @@ -46,10 +50,10 @@ async def update_metadata_from_ambr(overwrite: bool = True): url = AMBR_HOST.join(f"v2/chs/{target}") path.parent.mkdir(parents=True, exist_ok=True) response = await client.get(url) - json_data = json.loads(response.text)["data"]["items"] + json_data = jsonlib.loads(response.text)["data"]["items"] await fix_metadata_from_ambr(json_data, target) async with async_open(path, mode="w", encoding="utf-8") as file: - data = json.dumps(json_data, ensure_ascii=False, indent=4) + data = jsonlib.dumps(json_data, ensure_ascii=False, indent=4) await file.write(data) result.append(json_data) return result @@ -88,7 +92,7 @@ async def update_metadata_from_github(overwrite: bool = True): if line in [" },", " }"]: started = False if any("MATERIAL_NAMECARD" in x for x in cell): - material_json_data.append(json.loads("{" + "".join(cell) + "}")) + material_json_data.append(jsonlib.loads("{" + "".join(cell) + "}")) cell = [] continue if started: @@ -136,7 +140,7 @@ async def update_metadata_from_github(overwrite: bool = True): } ) async with async_open(path, mode="w", encoding="utf-8") as file: - data = json.dumps(data, ensure_ascii=False, indent=4) + data = jsonlib.dumps(data, ensure_ascii=False, indent=4) await file.write(data) return data except RemoteProtocolError as exc: diff --git a/utils/log/_handler.py b/utils/log/_handler.py index 39e8432..4ac39c8 100644 --- a/utils/log/_handler.py +++ b/utils/log/_handler.py @@ -24,10 +24,10 @@ from utils.log._style import DEFAULT_STYLE from utils.log._traceback import Traceback try: - import ujson as json + import ujson as jsonlib from ujson import JSONDecodeError except ImportError: - import json + import json as jsonlib from json import JSONDecodeError if TYPE_CHECKING: @@ -250,7 +250,7 @@ class Handler(DefaultRichHandler): if message is not None: try: if self.auto_load_json: - message_renderable = self.render_message(record, json.loads(message)) + message_renderable = self.render_message(record, jsonlib.loads(message)) except JSONDecodeError: pass finally: