diff --git a/enka_to_go/go/converter.py b/enka_to_go/go/converter.py index 568287d..b375fda 100644 --- a/enka_to_go/go/converter.py +++ b/enka_to_go/go/converter.py @@ -1,9 +1,11 @@ +from __future__ import annotations + from typing import TYPE_CHECKING, Any from .maps import GO_EQUIPMENT_TYPE_MAP, GO_STAT_KEY_MAP if TYPE_CHECKING: - from enka.models import Character, Talent + from enka.gi import Character, Talent class EnkaToGOConverter: @@ -12,7 +14,7 @@ def _format_key(cls, key: str) -> str: return key.replace("'", "").replace('"', "").replace("-", " ").title().replace(" ", "") @classmethod - def _get_talent_levels(cls, talents: list["Talent"], talent_order: list[int]) -> list[int]: + def _get_talent_levels(cls, talents: list[Talent], talent_order: list[int]) -> list[int]: talent_levels: list[int] = [1, 1, 1] for i, talent_id in enumerate(talent_order): talent = next((t for t in talents if t.id == talent_id), None) @@ -23,7 +25,7 @@ def _get_talent_levels(cls, talents: list["Talent"], talent_order: list[int]) -> return talent_levels @classmethod - def convert(cls, characters: list["Character"]) -> dict[str, Any]: + def convert(cls, characters: list[Character]) -> dict[str, Any]: base = { "format": "GOOD", "version": 2, diff --git a/enka_to_go/go/maps.py b/enka_to_go/go/maps.py index 17fbdd6..fe1f604 100644 --- a/enka_to_go/go/maps.py +++ b/enka_to_go/go/maps.py @@ -1,4 +1,4 @@ -from enka import EquipmentType, StatType +from enka.gi import EquipmentType, StatType GO_EQUIPMENT_TYPE_MAP: dict[EquipmentType, str] = { EquipmentType.FLOWER: "flower", diff --git a/enka_to_go/web_app/main.py b/enka_to_go/web_app/main.py index 6e142bd..92505fe 100644 --- a/enka_to_go/web_app/main.py +++ b/enka_to_go/web_app/main.py @@ -1,23 +1,17 @@ import json -import logging -from typing import TYPE_CHECKING +import enka import flet as ft +from loguru import logger from ..go.converter import EnkaToGOConverter -if TYPE_CHECKING: - from enka import EnkaAPI - -LOGGER_ = logging.getLogger(__name__) - class EnkaToGOWebApp: - def __init__(self, page: ft.Page, api: "EnkaAPI") -> None: + def __init__(self, page: ft.Page) -> None: self.page = page assert self.page.client_storage self.storage = self.page.client_storage - self.api = api # control refs self.uid_text_field = ft.Ref[ft.TextField]() @@ -59,9 +53,10 @@ async def _on_submit(self, _: ft.ControlEvent) -> None: # fetch and convert data try: - response = await self.api.fetch_showcase(uid) + async with enka.GenshinClient() as client: + response = await client.fetch_showcase(uid) except Exception as e: - LOGGER_.exception("Failed to fetch data.") + logger.exception("Failed to fetch data.") return await self.page.show_snack_bar_async( ft.SnackBar( ft.Text(f"Error: {e}", color=ft.colors.ON_ERROR_CONTAINER), @@ -85,7 +80,7 @@ async def _on_submit(self, _: ft.ControlEvent) -> None: try: converted = EnkaToGOConverter.convert(response.characters) except Exception: - LOGGER_.exception("Failed to convert data.") + logger.exception("Failed to convert data.") return await self.page.show_snack_bar_async( ft.SnackBar( ft.Text( diff --git a/run.py b/run.py index 5537ce2..9e8168f 100644 --- a/run.py +++ b/run.py @@ -1,8 +1,6 @@ -import asyncio import logging import sys -import enka import flet as ft from enka_to_go.web_app.main import EnkaToGOWebApp @@ -16,18 +14,13 @@ ], ) -loop = asyncio.get_event_loop() - -api = enka.EnkaAPI(headers={"User-Agent": "EnkaToGO"}) -loop.run_until_complete(api.start()) - async def main(page: ft.Page) -> None: page.title = "Enka to GO" page.scroll = ft.ScrollMode.ADAPTIVE page.vertical_alignment = ft.MainAxisAlignment.CENTER page.horizontal_alignment = ft.CrossAxisAlignment.CENTER - web_app = EnkaToGOWebApp(page, api) + web_app = EnkaToGOWebApp(page) await web_app.add_controls() @@ -36,6 +29,3 @@ async def main(page: ft.Page) -> None: view=None if sys.platform == "linux" else ft.AppView.WEB_BROWSER, port=7091, ) - -loop.run_until_complete(api.close()) -loop.close() diff --git a/update_data.py b/update_data.py index 656e1de..54b1f74 100644 --- a/update_data.py +++ b/update_data.py @@ -4,7 +4,9 @@ async def update_data() -> None: - async with enka.EnkaAPI() as api: + async with enka.GenshinClient() as api: + await api.update_assets() + async with enka.HSRClient() as api: await api.update_assets()