From 5a153b178d07519b3be8938c72a21a14fe37348a Mon Sep 17 00:00:00 2001 From: Michael Genson <71845777+michael-genson@users.noreply.github.com> Date: Mon, 11 Dec 2023 03:22:06 -0600 Subject: [PATCH] fix: Better Scraper Image Processing (#2821) * add additional case for scraped image parsing * made scraper more fault tolerant for missing images * re-ordered case to favor better implementations --------- Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com> --- mealie/services/scraper/cleaner.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/mealie/services/scraper/cleaner.py b/mealie/services/scraper/cleaner.py index f4bfc0ad7083..728fe83642df 100644 --- a/mealie/services/scraper/cleaner.py +++ b/mealie/services/scraper/cleaner.py @@ -89,10 +89,10 @@ def clean_image(image: str | list | dict | None = None, default: str = "no image image attempts to parse the image field from a recipe and return a string. Currenty Supported Structures: - - `https://exmaple.com` - A string - - `{ "url": "https://exmaple.com" }` - A dictionary with a `url` key - - `["https://exmaple.com"]` - A list of strings - - `[{ "url": "https://exmaple.com" }]` - A list of dictionaries with a `url` key + - `https://example.com` - A string + - `{ "url": "https://example.com" }` - A dictionary with a `url` key + - `["https://example.com"]` - A list of strings + - `[{ "url": "https://example.com" }]` - A list of dictionaries with a `url` key Raises: TypeError: If the image field is not a supported type a TypeError is raised. @@ -112,8 +112,11 @@ def clean_image(image: str | list | dict | None = None, default: str = "no image return [x["url"] for x in image] case {"url": str(image)}: return [image] + case [{"@id": str(_)}, *_]: + return [x["@id"] for x in image] case _: - raise TypeError(f"Unexpected type for image: {type(image)}, {image}") + logger.exception(f"Unexpected type for image: {type(image)}, {image}") + return [default] def clean_instructions(steps_object: list | dict | str, default: list | None = None) -> list[dict]: