Source code for fatsecret.resources.diary

"""Food diary resource — food entry CRUD + diary retrieval by day/month."""

from __future__ import annotations

import datetime
from typing import Any, Optional, Union

from ._base import BaseResource


class DiaryResource(BaseResource):
    """Resource methods for the OAS `Food Diary` tag."""

[docs] def entry_create_v1( self, food_id: str, food_entry_name: str, serving_id: str, number_of_units: float, meal: str, date: Optional[Union[datetime.datetime, datetime.date, int, float]] = None, ) -> list: """food_entry.create v1.""" params = { "method": "food_entry.create", "food_id": food_id, "food_entry_name": food_entry_name, "serving_id": serving_id, "number_of_units": number_of_units, "meal": meal, } if date is not None: params["date"] = self._client.unix_time_v2(date) payload = self._client._call(params, method="POST") return self._client._unwrap(payload, "food_entries", list_key="food_entry")
[docs] def entry_edit_v1( self, food_entry_id: str, food_entry_name: Optional[str] = None, serving_id: Optional[str] = None, number_of_units: Optional[float] = None, meal: Optional[str] = None, ) -> Union[bool, Any]: """food_entry.edit v1.""" params = {"method": "food_entry.edit", "food_entry_id": food_entry_id} self._client._set_optional( params, [ ("food_entry_name", food_entry_name), ("serving_id", serving_id), ("number_of_units", number_of_units), ("meal", meal), ], ) payload = self._client._call(params, method="PUT") return self._client._mutator_success(payload)
[docs] def entry_delete_v1(self, food_entry_id: str) -> Union[bool, Any]: """food_entry.delete v1.""" payload = self._client._call( {"method": "food_entry.delete", "food_entry_id": food_entry_id}, method="DELETE", ) return self._client._mutator_success(payload)
[docs] def entries_get_v1( self, food_entry_id: Optional[str] = None, date: Optional[Union[datetime.datetime, datetime.date, int, float]] = None, ) -> list: """food_entries.get v1 (DEPRECATED upstream). Pass either food_entry_id or date.""" if food_entry_id is None and date is None: return [] params: dict = {"method": "food_entries.get"} if food_entry_id is not None: params["food_entry_id"] = food_entry_id else: params["date"] = self._client.unix_time_v2(date) payload = self._client._call(params) return self._client._unwrap(payload, "food_entries", list_key="food_entry")
[docs] def entries_get_v2( self, food_entry_id: Optional[str] = None, date: Optional[Union[datetime.datetime, datetime.date, int, float]] = None, ) -> list: """food_entries.get v2 (current). Pass either food_entry_id or date.""" if food_entry_id is None and date is None: return [] params: dict = {"method": "food_entries.get.v2"} if food_entry_id is not None: params["food_entry_id"] = food_entry_id else: params["date"] = self._client.unix_time_v2(date) payload = self._client._call(params) return self._client._unwrap(payload, "food_entries", list_key="food_entry")
[docs] def entries_get_month_v1( self, date: Optional[Union[datetime.datetime, datetime.date, int, float]] = None, ) -> list: """food_entries.get_month v1 (DEPRECATED upstream).""" params: dict = {"method": "food_entries.get_month"} if date is not None: params["date"] = self._client.unix_time_v2(date) payload = self._client._call(params) return self._client._unwrap(payload, "month", list_key="day")
[docs] def entries_get_month_v2( self, date: Optional[Union[datetime.datetime, datetime.date, int, float]] = None, ) -> list: """food_entries.get_month v2 (current).""" params: dict = {"method": "food_entries.get_month.v2"} if date is not None: params["date"] = self._client.unix_time_v2(date) payload = self._client._call(params) return self._client._unwrap(payload, "month", list_key="day")
[docs] def entries_copy_v1( self, from_date: Union[datetime.datetime, datetime.date, int, float], to_date: Union[datetime.datetime, datetime.date, int, float], meal: Optional[str] = None, ) -> Union[bool, Any]: """food_entries.copy v1.""" params = { "method": "food_entries.copy", "from_date": self._client.unix_time_v2(from_date), "to_date": self._client.unix_time_v2(to_date), } self._client._set_optional(params, [("meal", meal)]) payload = self._client._call(params, method="POST") return self._client._mutator_success(payload)
[docs] def entries_copy_saved_meal_v1( self, saved_meal_id: str, meal: str, date: Optional[Union[datetime.datetime, datetime.date, int, float]] = None, ) -> Union[bool, Any]: """food_entries.copy_saved_meal v1.""" params = { "method": "food_entries.copy_saved_meal", "saved_meal_id": saved_meal_id, "meal": meal, } if date is not None: params["date"] = self._client.unix_time_v2(date) payload = self._client._call(params, method="POST") return self._client._mutator_success(payload)