PamGram/modules/wiki/material.py

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

47 lines
1.5 KiB
Python
Raw Permalink Normal View History

2023-04-26 08:48:05 +00:00
from typing import List, Dict, Optional
2023-04-26 08:48:05 +00:00
from modules.wiki.base import WikiModel
2023-08-29 06:03:21 +00:00
from modules.wiki.models.material import YattaMaterial
2022-09-17 16:28:51 +00:00
class Material(WikiModel):
2023-04-26 08:48:05 +00:00
material_url = WikiModel.BASE_URL + "materials.json"
material_path = WikiModel.BASE_PATH / "materials.json"
def __init__(self):
super().__init__()
2023-08-29 06:03:21 +00:00
self.all_materials: List[YattaMaterial] = []
self.all_materials_map: Dict[int, YattaMaterial] = {}
self.all_materials_name: Dict[str, YattaMaterial] = {}
2023-04-26 08:48:05 +00:00
def clear_class_data(self) -> None:
self.all_materials.clear()
self.all_materials_map.clear()
self.all_materials_name.clear()
async def refresh(self):
datas = await self.remote_get(self.material_url)
await self.dump(datas.json(), self.material_path)
await self.read()
async def read(self):
if not self.material_path.exists():
await self.refresh()
return
datas = await WikiModel.read(self.material_path)
self.clear_class_data()
for data in datas:
2023-08-29 06:03:21 +00:00
m = YattaMaterial(**data)
2023-04-26 08:48:05 +00:00
self.all_materials.append(m)
self.all_materials_map[m.id] = m
self.all_materials_name[m.name] = m
2023-08-29 06:03:21 +00:00
def get_by_id(self, cid: int) -> Optional[YattaMaterial]:
2023-05-11 15:09:39 +00:00
return self.all_materials_map.get(cid)
2023-04-26 08:48:05 +00:00
2023-08-29 06:03:21 +00:00
def get_by_name(self, name: str) -> Optional[YattaMaterial]:
2023-05-11 15:09:39 +00:00
return self.all_materials_name.get(name)
2023-04-26 08:48:05 +00:00
def get_name_list(self) -> List[str]:
return list(self.all_materials_name.keys())