import asyncio
from simaple.fetch.element import (
MapleGearsetElement,
character_promise,
maple_gearset_promise,
pet_list_promise,
standard_gear_promise,
)
from simaple.fetch.response.character import CharacterResponse
from simaple.fetch.token import TokenRepository
from simaple.fetch.translator.gear import GearTranslator
from simaple.fetch.translator.kms.gear import kms_gear_stat_translator
from simaple.fetch.translator.kms.potential import kms_potential_translator
from simaple.gear.gear_repository import GearRepository
class Application:
...
[docs]class KMSFetchApplication(Application):
def __init__(self, reboot: bool = False) -> None:
self._translator = GearTranslator(
gear_stat_translator=kms_gear_stat_translator(),
potential_translator=kms_potential_translator(),
gear_repository=GearRepository(),
)
self._reboot = reboot
[docs] def run(self, name: str) -> CharacterResponse:
raw = asyncio.run(self.async_run(name))
return CharacterResponse(raw, self._translator)
[docs] async def async_run(self, name: str):
token_repository = TokenRepository(reboot=self._reboot)
token = token_repository.get(name)
item = maple_gearset_promise().then(
{
idx: standard_gear_promise()
for idx in set(
MapleGearsetElement.expected_normal_names()
+ MapleGearsetElement.expected_arcane_names()
+ MapleGearsetElement.expected_cash_names()
)
}
)
character = character_promise()
pet = pet_list_promise().then(
{str(idx): standard_gear_promise() for idx in range(3)}
)
futures = [
asyncio.ensure_future(item.resolve("", token)),
asyncio.ensure_future(character.resolve("", token)),
asyncio.ensure_future(pet.resolve("", token)),
]
item_info, character_info, pet_info = await asyncio.gather(*futures)
return {"character": character_info, "item": item_info, "pet": pet_info}