From f32444b91dcb920e3a1960d99fd9204f1395f107 Mon Sep 17 00:00:00 2001 From: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com> Date: Sun, 3 Dec 2023 06:15:44 +0100 Subject: [PATCH] fix: handle Recipe Times as dicts and lists (#2764) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * handle dicts * 🧹 * handle arrays * change default case & add warning logger * lint * typo * update dict case * update list case * add timedelta to cases * remove timedelta so mypy is happy --- mealie/services/scraper/cleaner.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/mealie/services/scraper/cleaner.py b/mealie/services/scraper/cleaner.py index e5cdf6d94..f4bfc0ad7 100644 --- a/mealie/services/scraper/cleaner.py +++ b/mealie/services/scraper/cleaner.py @@ -9,6 +9,11 @@ from datetime import datetime, timedelta from slugify import slugify +from mealie.core.root_logger import get_logger + +logger = get_logger("recipe-scraper") + + MATCH_DIGITS = re.compile(r"\d+([.,]\d+)?") """ Allow for commas as decimals (common in Europe) """ @@ -335,6 +340,7 @@ def clean_time(time_entry: str | timedelta | None) -> None | str: - `"PT1H"` - returns "1 hour" - `"PT1H30M"` - returns "1 hour 30 minutes" - `timedelta(hours=1, minutes=30)` - returns "1 hour 30 minutes" + - `{"minValue": "PT1H30M"}` - returns "1 hour 30 minutes" Raises: TypeError: if the type is not supported a TypeError is raised @@ -357,11 +363,16 @@ def clean_time(time_entry: str | timedelta | None) -> None | str: return str(time_entry) case timedelta(): return pretty_print_timedelta(time_entry) + case {"minValue": str(value)}: + return clean_time(value) + case [str(), *_]: + return clean_time(time_entry[0]) case datetime(): # TODO: Not sure what to do here return str(time_entry) case _: - raise TypeError(f"Unexpected type for time: {type(time_entry)}, {time_entry}") + logger.warning("[SCRAPER] Unexpected type or structure for time_entrys") + return None def parse_duration(iso_duration: str) -> timedelta: