Module edupage_api.lunches
Classes
class Lunches (edupage: EdupageModule)
-
Expand source code
class Lunches(Module): def parse_meal(self, meal_index: str, meal: dict, boarder_id: str, date: date) -> Optional[Meal]: if meal is None: return None if meal.get("isCooking") == False: return None ordered_meal = None meal_record = meal.get("evidencia") if meal_record is not None: ordered_meal = meal_record.get("stav") if ordered_meal == "V": ordered_meal = meal_record.get("obj") served_from_str = meal.get("vydaj_od") served_to_str = meal.get("vydaj_do") if served_from_str: served_from = datetime.strptime(served_from_str, "%H:%M") else: served_from = None if served_to_str: served_to = datetime.strptime(served_to_str, "%H:%M") else: served_to = None title = meal.get("nazov") amount_of_foods = meal.get("druhov_jedal") chooseable_menus = list(meal.get("choosableMenus").keys()) can_be_changed_until = meal.get("zmen_do") menus = [] for food in meal.get("rows"): if not food: continue name = food.get("nazov") allergens = food.get("alergenyStr") weight = food.get("hmotnostiStr") number = food.get("menusStr") rating = None if number is not None: number = number.replace(": ", "") rating = meal.get("hodnotenia") if rating is not None and rating: rating = rating.get(number) [quality, quantity] = rating quality_average = quality.get("priemer") quality_ratings = quality.get("pocet") quantity_average = quantity.get("priemer") quantity_ratings = quantity.get("pocet") rating = Rating( date.strftime("%Y-%m-%d"), boarder_id, quality_average, quantity_average, quality_ratings, quantity_ratings, ) else: rating = None menus.append(Menu(name, allergens, weight, number, rating)) return Meal( served_from, served_to, amount_of_foods, chooseable_menus, can_be_changed_until, title, menus, date, ordered_meal, MealType(int(meal_index)), boarder_id, meal_index ) @ModuleHelper.logged_in def get_meals(self, date: date) -> Optional[Meals]: date_strftime = date.strftime("%Y%m%d") request_url = f"https://{self.edupage.subdomain}.edupage.org/menu/?date={date_strftime}" response = self.edupage.session.get(request_url).content.decode() lunch_data = json.loads( response.split("edupageData: ")[1].split(",\r\n")[0] ) lunches_data = lunch_data.get(self.edupage.subdomain) try: boarder_id = ( lunches_data.get("novyListok").get("addInfo").get("stravnikid") ) except AttributeError as e: raise InvalidMealsData(f"Missing boarder id: {e}") meals = lunches_data.get("novyListok").get(date.strftime("%Y-%m-%d")) if meals is None: return None snack = self.parse_meal("1", meals.get("1"), boarder_id, date) lunch = self.parse_meal("2", meals.get("2"), boarder_id, date) afternoon_snack = self.parse_meal("3", meals.get("3"), boarder_id, date) return Meals(snack, lunch, afternoon_snack)
Ancestors
Methods
def get_meals(self, date: datetime.date) ‑> Meals | None
-
Expand source code
@ModuleHelper.logged_in def get_meals(self, date: date) -> Optional[Meals]: date_strftime = date.strftime("%Y%m%d") request_url = f"https://{self.edupage.subdomain}.edupage.org/menu/?date={date_strftime}" response = self.edupage.session.get(request_url).content.decode() lunch_data = json.loads( response.split("edupageData: ")[1].split(",\r\n")[0] ) lunches_data = lunch_data.get(self.edupage.subdomain) try: boarder_id = ( lunches_data.get("novyListok").get("addInfo").get("stravnikid") ) except AttributeError as e: raise InvalidMealsData(f"Missing boarder id: {e}") meals = lunches_data.get("novyListok").get(date.strftime("%Y-%m-%d")) if meals is None: return None snack = self.parse_meal("1", meals.get("1"), boarder_id, date) lunch = self.parse_meal("2", meals.get("2"), boarder_id, date) afternoon_snack = self.parse_meal("3", meals.get("3"), boarder_id, date) return Meals(snack, lunch, afternoon_snack)
def parse_meal(self, meal_index: str, meal: dict, boarder_id: str, date: datetime.date) ‑> Meal | None
-
Expand source code
def parse_meal(self, meal_index: str, meal: dict, boarder_id: str, date: date) -> Optional[Meal]: if meal is None: return None if meal.get("isCooking") == False: return None ordered_meal = None meal_record = meal.get("evidencia") if meal_record is not None: ordered_meal = meal_record.get("stav") if ordered_meal == "V": ordered_meal = meal_record.get("obj") served_from_str = meal.get("vydaj_od") served_to_str = meal.get("vydaj_do") if served_from_str: served_from = datetime.strptime(served_from_str, "%H:%M") else: served_from = None if served_to_str: served_to = datetime.strptime(served_to_str, "%H:%M") else: served_to = None title = meal.get("nazov") amount_of_foods = meal.get("druhov_jedal") chooseable_menus = list(meal.get("choosableMenus").keys()) can_be_changed_until = meal.get("zmen_do") menus = [] for food in meal.get("rows"): if not food: continue name = food.get("nazov") allergens = food.get("alergenyStr") weight = food.get("hmotnostiStr") number = food.get("menusStr") rating = None if number is not None: number = number.replace(": ", "") rating = meal.get("hodnotenia") if rating is not None and rating: rating = rating.get(number) [quality, quantity] = rating quality_average = quality.get("priemer") quality_ratings = quality.get("pocet") quantity_average = quantity.get("priemer") quantity_ratings = quantity.get("pocet") rating = Rating( date.strftime("%Y-%m-%d"), boarder_id, quality_average, quantity_average, quality_ratings, quantity_ratings, ) else: rating = None menus.append(Menu(name, allergens, weight, number, rating)) return Meal( served_from, served_to, amount_of_foods, chooseable_menus, can_be_changed_until, title, menus, date, ordered_meal, MealType(int(meal_index)), boarder_id, meal_index )
class Meal (served_from: datetime.datetime | None,
served_to: datetime.datetime | None,
amount_of_foods: int,
chooseable_menus: list[str],
can_be_changed_until: datetime.datetime,
title: str,
menus: List[Menu],
date: datetime.datetime,
ordered_meal: str | None,
meal_type: MealType,
_Meal__boarder_id: str,
_Meal__meal_index: str)-
Expand source code
@dataclass class Meal: served_from: Optional[datetime] served_to: Optional[datetime] amount_of_foods: int chooseable_menus: list[str] can_be_changed_until: datetime title: str menus: List[Menu] date: datetime ordered_meal: Optional[str] meal_type: MealType __boarder_id: str __meal_index: str def __iter__(self): return iter(self.menus) def __make_choice(self, edupage: EdupageModule, choice_str: str): request_url = f"https://{edupage.subdomain}.edupage.org/menu/" boarder_menu = { "stravnikid": self.__boarder_id, "mysqlDate": self.date.strftime("%Y-%m-%d"), "jids": {self.__meal_index: choice_str}, "view": "pc_listok", "pravo": "Student", } data = { "akcia": "ulozJedlaStravnika", "jedlaStravnika": json.dumps(boarder_menu), } response = edupage.session.post( request_url, data=data ).content.decode() if json.loads(response).get("error") != "": raise FailedToChangeMealError() def choose(self, edupage: EdupageModule, number: int): letters = "ABCDEFGH" letter = letters[number - 1] self.__make_choice(edupage, letter) self.ordered_meal = letter def sign_off(self, edupage: EdupageModule): self.__make_choice(edupage, "AX") self.ordered_meal = None
Meal(served_from: Optional[datetime.datetime], served_to: Optional[datetime.datetime], amount_of_foods: int, chooseable_menus: list[str], can_be_changed_until: datetime.datetime, title: str, menus: List[edupage_api.lunches.Menu], date: datetime.datetime, ordered_meal: Optional[str], meal_type: edupage_api.lunches.MealType, _Meal__boarder_id: str, _Meal__meal_index: str)
Class variables
var amount_of_foods : int
var can_be_changed_until : datetime.datetime
var date : datetime.datetime
var meal_type : MealType
var ordered_meal : str | None
var served_from : datetime.datetime | None
var served_to : datetime.datetime | None
var title : str
Methods
def choose(self,
edupage: EdupageModule,
number: int)-
Expand source code
def choose(self, edupage: EdupageModule, number: int): letters = "ABCDEFGH" letter = letters[number - 1] self.__make_choice(edupage, letter) self.ordered_meal = letter
def sign_off(self,
edupage: EdupageModule)-
Expand source code
def sign_off(self, edupage: EdupageModule): self.__make_choice(edupage, "AX") self.ordered_meal = None
class MealType (value, names=None, *, module=None, qualname=None, type=None, start=1)
-
Expand source code
class MealType(Enum): SNACK = 1 LUNCH = 2 AFTERNOON_SNACK = 3
An enumeration.
Ancestors
- enum.Enum
Class variables
var AFTERNOON_SNACK
var LUNCH
var SNACK
class Meals (snack: Meal | None,
lunch: Meal | None,
afternoon_snack: Meal | None)-
Expand source code
@dataclass class Meals: snack: Optional[Meal] lunch: Optional[Meal] afternoon_snack: Optional[Meal]
Meals(snack: Optional[edupage_api.lunches.Meal], lunch: Optional[edupage_api.lunches.Meal], afternoon_snack: Optional[edupage_api.lunches.Meal])
Class variables
var afternoon_snack : Meal | None
var lunch : Meal | None
var snack : Meal | None
class Menu (name: str,
allergens: str,
weight: str,
number: str,
rating: Rating | None)-
Expand source code
@dataclass class Menu: name: str allergens: str weight: str number: str rating: Optional[Rating]
Menu(name: str, allergens: str, weight: str, number: str, rating: Optional[edupage_api.lunches.Rating])
Class variables
var allergens : str
var name : str
var number : str
var rating : Rating | None
var weight : str
class Rating (_Rating__date: str,
_Rating__boarder_id: str,
quality_average: float,
quality_ratings: float,
quantity_average: float,
quantity_ratings: float)-
Expand source code
@dataclass class Rating: __date: str __boarder_id: str quality_average: float quality_ratings: float quantity_average: float quantity_ratings: float def rate(self, edupage: EdupageModule, quantity: int, quality: int): if not edupage.is_logged_in: raise NotLoggedInException() request_url = f"https://{edupage.subdomain}.edupage.org/menu/" data = { "akcia": "ulozHodnotenia", "stravnikid": self.__boarder_id, "mysqlDate": self.__date, "jedlo_dna": "2", "kvalita": str(quality), "mnozstvo": str(quantity), } response = edupage.session.post(request_url, data=data) parsed_response = json.loads(response.content.decode()) error = parsed_response.get("error") if error is None or error != "": raise FailedToRateException()
Rating(_Rating__date: str, _Rating__boarder_id: str, quality_average: float, quality_ratings: float, quantity_average: float, quantity_ratings: float)
Class variables
var quality_average : float
var quality_ratings : float
var quantity_average : float
var quantity_ratings : float
Methods
def rate(self,
edupage: EdupageModule,
quantity: int,
quality: int)-
Expand source code
def rate(self, edupage: EdupageModule, quantity: int, quality: int): if not edupage.is_logged_in: raise NotLoggedInException() request_url = f"https://{edupage.subdomain}.edupage.org/menu/" data = { "akcia": "ulozHodnotenia", "stravnikid": self.__boarder_id, "mysqlDate": self.__date, "jedlo_dna": "2", "kvalita": str(quality), "mnozstvo": str(quantity), } response = edupage.session.post(request_url, data=data) parsed_response = json.loads(response.content.decode()) error = parsed_response.get("error") if error is None or error != "": raise FailedToRateException()