1 """Define an object to manage fetching Mealie data."""
3 from __future__
import annotations
5 from abc
import abstractmethod
6 from dataclasses
import dataclass
7 from datetime
import timedelta
9 from aiomealie
import (
10 MealieAuthenticationError,
12 MealieConnectionError,
26 from .const
import LOGGER
33 """Mealie data type."""
36 mealplan_coordinator: MealieMealplanCoordinator
37 shoppinglist_coordinator: MealieShoppingListCoordinator
38 statistics_coordinator: MealieStatisticsCoordinator
41 type MealieConfigEntry = ConfigEntry[MealieData]
45 """Base coordinator."""
47 config_entry: MealieConfigEntry
49 _update_interval: timedelta
51 def __init__(self, hass: HomeAssistant, client: MealieClient) ->
None:
52 """Initialize the Mealie data coordinator."""
62 """Fetch data from Mealie."""
65 except MealieAuthenticationError
as error:
66 raise ConfigEntryAuthFailed
from error
67 except MealieConnectionError
as error:
72 """Fetch data from Mealie."""
75 class MealieMealplanCoordinator(
76 MealieDataUpdateCoordinator[dict[MealplanEntryType, list[Mealplan]]]
78 """Class to manage fetching Mealie data."""
80 _name =
"MealieMealplan"
84 next_week = dt_util.now() + WEEK
85 current_date = dt_util.now().
date()
86 next_week_date = next_week.date()
87 response = await self.
clientclient.get_mealplans(current_date, next_week_date)
88 res: dict[MealplanEntryType, list[Mealplan]] = {
89 type_: []
for type_
in MealplanEntryType
91 for meal
in response.items:
92 res[meal.entry_type].append(meal)
98 """Data class for shopping list data."""
100 shopping_list: ShoppingList
101 items: list[ShoppingItem]
105 MealieDataUpdateCoordinator[dict[str, ShoppingListData]]
107 """Class to manage fetching Mealie Shopping list data."""
109 _name =
"MealieShoppingList"
114 ) -> dict[str, ShoppingListData]:
115 shopping_list_items = {}
116 shopping_lists = (await self.
clientclient.get_shopping_lists()).items
117 for shopping_list
in shopping_lists:
118 shopping_list_id = shopping_list.list_id
121 await self.
clientclient.get_shopping_items(shopping_list_id)
125 shopping_list=shopping_list, items=shopping_items
127 return shopping_list_items
131 """Class to manage fetching Mealie Statistics data."""
133 _name =
"MealieStatistics"
None __init__(self, HomeAssistant hass, MealieClient client)
_DataT _async_update_data(self)
_DataT _async_update_internal(self)
dict[MealplanEntryType, list[Mealplan]] _async_update_internal(self)
Statistics _async_update_internal(self)
list[dict[str, Any]]|None get_statistics(data, IstaConsumptionType consumption_type, IstaValueType|None value_type=None)