diff --git a/source/bring_handler.py b/source/bring_handler.py index aa0e89b..7af031a 100644 --- a/source/bring_handler.py +++ b/source/bring_handler.py @@ -15,7 +15,6 @@ def __init__(self, loop: asyncio.AbstractEventLoop): self.bring = loop.run_until_complete(self.initialize()) self.list_uuid = loop.run_until_complete(self.determine_list_uuid()) - self.ignored_ingredients = self.parse_ignored_ingredients() async def initialize(self) -> Bring: username = EnvironmentVariableGetter.get("BRING_USERNAME") @@ -42,22 +41,6 @@ async def determine_list_uuid(self) -> str: self.log.critical(f'Can not find a list with the name "{list_name}"') sys.exit(1) - def parse_ignored_ingredients(self) -> list[Ingredient]: - try: - ignored_ingredients_input = EnvironmentVariableGetter.get("IGNORED_INGREDIENTS") - except KeyError: - self.log.info( - 'The variable IGNORED_INGREDIENTS is not set. All ingredients will be added. Consider adding something like "Salt,Pepper"' - ) - return [] - - ignored_ingredients = [ - Ingredient(name) for name in ignored_ingredients_input.lower().replace(", ", ",").split(",") - ] - self.log.info(f"Ignoring ingredients {Ingredient.to_string_list(ignored_ingredients)}") - - return ignored_ingredients - async def add_items(self, ingredients: list[Ingredient]) -> None: items = [ingredient.to_dict() for ingredient in ingredients] await self.bring.batch_update_list(self.list_uuid, items, BringItemOperation.ADD) diff --git a/source/ingredient.py b/source/ingredient.py index a63a985..3476fd7 100644 --- a/source/ingredient.py +++ b/source/ingredient.py @@ -57,8 +57,8 @@ def _get_note(raw_data: dict) -> str: return f" ({raw_data['note']})" @staticmethod - def is_ignored(raw_data: dict, ignored_ingredients: list[str]) -> bool: - return raw_data["food"]["name"] in ignored_ingredients + def is_ignored(raw_data: dict, ignored_ingredients: list[Ingredient]) -> bool: + return raw_data["food"]["name"] in Ingredient.to_string_list(ignored_ingredients) @staticmethod def to_string_list(ingredients: list[Ingredient]) -> list[str]: diff --git a/source/main.py b/source/main.py index 7b7390d..8c7f215 100644 --- a/source/main.py +++ b/source/main.py @@ -8,6 +8,8 @@ from ingredient import Ingredient from logger_mixin import LoggerMixin +from source.environment_variable_getter import EnvironmentVariableGetter + load_dotenv() app = Flask(__name__) @@ -30,13 +32,13 @@ def webhook_handler() -> str: ingredients_to_add = [] ingredients_raw_data = data["content"]["recipe_ingredient"] for ingredient_raw_data in ingredients_raw_data: - if Ingredient.is_ignored(ingredient_raw_data, bring_handler.ignored_ingredients): + if Ingredient.is_ignored(ingredient_raw_data, ignored_ingredients): logger.log.debug(f"Ignoring ingredient {ingredient_raw_data}") try: ingredients_to_add.append(Ingredient.from_raw_data(ingredient_raw_data)) - except ValueError as e: - logger.log.warning(e) + except ValueError: + logger.log.warning(exc_info=True) continue logger.log.info(f"Adding ingredients to Bring: {ingredients_to_add}") @@ -52,6 +54,23 @@ def status_handler() -> str: return "OK" +def parse_ignored_ingredients() -> list[Ingredient]: + try: + ignored_ingredients_input = EnvironmentVariableGetter.get("IGNORED_INGREDIENTS") + except KeyError: + logger.log.info( + 'The variable IGNORED_INGREDIENTS is not set. All ingredients will be added. Consider adding something like "Salt,Pepper"' + ) + return [] + + ignored_ingredients = [ + Ingredient(name) for name in ignored_ingredients_input.lower().replace(", ", ",").split(",") + ] + logger.log.info(f"Ignoring ingredients {Ingredient.to_string_list(ignored_ingredients)}") + + return ignored_ingredients + + if __name__ == "__main__": logger = LoggerMixin() logger.log = logging.getLogger("Main") @@ -59,6 +78,7 @@ def status_handler() -> str: asyncio.set_event_loop(loop) bring_handler = BringHandler(loop) + ignored_ingredients = parse_ignored_ingredients() host = os.getenv("HTTP_HOST", "0.0.0.0") port = int(os.getenv("HTTP_PORT", 8742))