mirror of
https://github.com/PaiGramTeam/MibooGram.git
synced 2024-11-25 09:37:38 +00:00
🐛 修复 metadata 的加载方式
This commit is contained in:
parent
a1e1bb500b
commit
51dc36e913
@ -2,41 +2,83 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import Generic, Iterator, KeysView, TypeVar
|
||||||
|
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
|
||||||
from utils.const import PROJECT_ROOT
|
from utils.const import PROJECT_ROOT
|
||||||
from utils.log import logger
|
from utils.log import logger
|
||||||
from utils.typedefs import JSONType, StrOrInt
|
from utils.typedefs import StrOrInt
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'HONEY_DATA',
|
'HONEY_DATA',
|
||||||
'AVATAR_DATA', 'WEAPON_DATA', 'MATERIAL_DATA', 'ARTIFACT_DATA', 'NAMECARD_DATA',
|
'AVATAR_DATA', 'WEAPON_DATA', 'MATERIAL_DATA', 'ARTIFACT_DATA', 'NAMECARD_DATA',
|
||||||
'honey_id_to_game_id'
|
'honey_id_to_game_id',
|
||||||
|
'Data'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
K = TypeVar('K')
|
||||||
|
V = TypeVar('V')
|
||||||
|
|
||||||
data_dir = PROJECT_ROOT.joinpath('metadata/data/')
|
data_dir = PROJECT_ROOT.joinpath('metadata/data/')
|
||||||
data_dir.mkdir(parents=True, exist_ok=True)
|
data_dir.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
|
_cache = {}
|
||||||
|
|
||||||
def _get_content(file_name: str) -> JSONType:
|
|
||||||
path = data_dir.joinpath(file_name).with_suffix('.json')
|
class Data(dict, Generic[K, V]):
|
||||||
|
_dict: dict[K, V]
|
||||||
|
_file_name: str
|
||||||
|
|
||||||
|
@property
|
||||||
|
def data(self) -> dict[K, V]:
|
||||||
|
if not (result := _cache.get(self._file_name, None)):
|
||||||
|
self._dict = result
|
||||||
|
super(Data, self).__init__(result)
|
||||||
|
path = data_dir.joinpath(self._file_name).with_suffix('.json')
|
||||||
if not path.exists():
|
if not path.exists():
|
||||||
logger.error(
|
logger.error(
|
||||||
f"暂未找到名为 \"{file_name}.json\" 的 metadata , 请先使用 [yellow bold]/refresh_metadata[/] 命令下载",
|
f"暂未找到名为 \"{self._file_name}.json\" 的 metadata , "
|
||||||
|
"请先使用 [yellow bold]/refresh_metadata[/] 命令下载",
|
||||||
extra={'markup': True}
|
extra={'markup': True}
|
||||||
)
|
)
|
||||||
return {}
|
self._dict = {}
|
||||||
with open(path, encoding='utf-8') as file:
|
with open(path, encoding='utf-8') as file:
|
||||||
return json.load(file)
|
self._dict = json.load(file)
|
||||||
|
_cache.update({self._file_name: self._dict})
|
||||||
|
return self._dict
|
||||||
|
|
||||||
|
def __init__(self, file_name: str):
|
||||||
|
self._file_name = file_name
|
||||||
|
self._dict = {}
|
||||||
|
super(Data, self).__init__()
|
||||||
|
|
||||||
|
def get(self, key: K) -> V | None:
|
||||||
|
return self.data.get(key)
|
||||||
|
|
||||||
|
def __getitem__(self, key: K) -> V:
|
||||||
|
return self.data.__getitem__(key)
|
||||||
|
|
||||||
|
def __setitem__(self, key: K, value: V) -> None:
|
||||||
|
return self.data.__setitem__(key, value)
|
||||||
|
|
||||||
|
def __delitem__(self, value: V) -> None:
|
||||||
|
self.data.__delitem__(value)
|
||||||
|
|
||||||
|
def __iter__(self) -> Iterator[K]:
|
||||||
|
return self.data.__iter__()
|
||||||
|
|
||||||
|
def keys(self) -> KeysView[K, V]:
|
||||||
|
return self.data.keys()
|
||||||
|
|
||||||
|
|
||||||
HONEY_DATA: dict[str, dict[StrOrInt, list[str | int]]] = _get_content('honey')
|
HONEY_DATA: dict[str, dict[StrOrInt, list[str | int]]] = Data('honey')
|
||||||
|
|
||||||
AVATAR_DATA: dict[str, dict[str, int | str | list[int]]] = _get_content('avatar')
|
AVATAR_DATA: dict[str, dict[str, int | str | list[int]]] = Data('avatar')
|
||||||
WEAPON_DATA: dict[str, dict[str, int | str]] = _get_content('weapon')
|
WEAPON_DATA: dict[str, dict[str, int | str]] = Data('weapon')
|
||||||
MATERIAL_DATA: dict[str, dict[str, int | str]] = _get_content('material')
|
MATERIAL_DATA: dict[str, dict[str, int | str]] = Data('material')
|
||||||
ARTIFACT_DATA: dict[str, dict[str, int | str | list[int] | dict[str, str]]] = _get_content('reliquary')
|
ARTIFACT_DATA: dict[str, dict[str, int | str | list[int] | dict[str, str]]] = Data('reliquary')
|
||||||
NAMECARD_DATA: dict[str, dict[str, int | str]] = _get_content('namecard')
|
NAMECARD_DATA: dict[str, dict[str, int | str]] = Data('namecard')
|
||||||
|
|
||||||
|
|
||||||
def honey_id_to_game_id(honey_id: str, item_type: str) -> str | None:
|
def honey_id_to_game_id(honey_id: str, item_type: str) -> str | None:
|
||||||
|
@ -136,11 +136,11 @@ async def get_namecard_data() -> DATA_TYPE:
|
|||||||
|
|
||||||
if not NAMECARD_DATA:
|
if not NAMECARD_DATA:
|
||||||
# noinspection PyProtectedMember
|
# noinspection PyProtectedMember
|
||||||
from metadata.genshin import _get_content
|
from metadata.genshin import Data
|
||||||
from metadata.scripts.metadatas import update_metadata_from_github
|
from metadata.scripts.metadatas import update_metadata_from_github
|
||||||
await update_metadata_from_github()
|
await update_metadata_from_github()
|
||||||
# noinspection PyPep8Naming
|
# noinspection PyPep8Naming
|
||||||
NAMECARD_DATA = _get_content('namecard')
|
NAMECARD_DATA = Data('namecard')
|
||||||
url = HONEY_HOST.join("fam_nameplate/?lang=CHS")
|
url = HONEY_HOST.join("fam_nameplate/?lang=CHS")
|
||||||
result = {}
|
result = {}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user