1 """The Epic Games Store integration data coordinator."""
3 from __future__
import annotations
5 from datetime
import timedelta
9 from epicstore_api
import EpicGamesStoreAPI
16 from .const
import DOMAIN, CalendarType
17 from .helper
import format_game_data
21 _LOGGER = logging.getLogger(__name__)
25 DataUpdateCoordinator[dict[str, list[dict[str, Any]]]]
27 """Class to manage fetching data from the Epic Game Store."""
29 def __init__(self, hass: HomeAssistant, entry: ConfigEntry) ->
None:
31 self.
_api_api = EpicGamesStoreAPI(
32 entry.data[CONF_LANGUAGE],
33 entry.data[CONF_COUNTRY],
35 self.
languagelanguage = entry.data[CONF_LANGUAGE]
41 update_interval=SCAN_INTERVAL,
45 """Update data via library."""
46 raw_data = await self.
hasshass.async_add_executor_job(self.
_api_api.get_free_games)
47 _LOGGER.debug(raw_data)
48 data = raw_data[
"data"][
"Catalog"][
"searchStore"][
"elements"]
50 discount_games = filter(
51 lambda game: game.get(
"promotions")
54 game[
"promotions"][
"promotionalOffers"]
57 game[
"promotions"][
"upcomingPromotionalOffers"]
62 return_data: dict[str, list[dict[str, Any]]] = {
63 CalendarType.DISCOUNT: [],
64 CalendarType.FREE: [],
66 for discount_game
in discount_games:
69 if game[
"discount_type"]:
70 return_data[game[
"discount_type"]].append(game)
72 return_data[CalendarType.DISCOUNT] = sorted(
73 return_data[CalendarType.DISCOUNT],
74 key=
lambda game: game[
"discount_start_at"],
76 return_data[CalendarType.FREE] = sorted(
77 return_data[CalendarType.FREE], key=
lambda game: game[
"discount_start_at"]
80 _LOGGER.debug(return_data)
dict[str, list[dict[str, Any]]] _async_update_data(self)
None __init__(self, HomeAssistant hass, ConfigEntry entry)
dict[str, Any] format_game_data(dict[str, Any] raw_game_data, str language)