diff --git a/mealie/schema/recipe/recipe.py b/mealie/schema/recipe/recipe.py index 8120ba53fbe3..e9240b82a814 100644 --- a/mealie/schema/recipe/recipe.py +++ b/mealie/schema/recipe/recipe.py @@ -243,6 +243,10 @@ class Recipe(RecipeSummary): return {x.key_name: x.value for x in v} if v else {} + @field_validator("nutrition", mode="before") + def validate_nutrition(cls, v): + return v or None + @classmethod def loader_options(cls) -> list[LoaderOption]: return [ diff --git a/mealie/schema/recipe/recipe_nutrition.py b/mealie/schema/recipe/recipe_nutrition.py index 12908ffb94f8..167b30285e42 100644 --- a/mealie/schema/recipe/recipe_nutrition.py +++ b/mealie/schema/recipe/recipe_nutrition.py @@ -11,4 +11,4 @@ class Nutrition(MealieModel): fiber_content: str | None = None sodium_content: str | None = None sugar_content: str | None = None - model_config = ConfigDict(from_attributes=True) + model_config = ConfigDict(from_attributes=True, coerce_numbers_to_str=True) diff --git a/mealie/services/migrations/nextcloud.py b/mealie/services/migrations/nextcloud.py index b45c4247f0dc..692dff761a5a 100644 --- a/mealie/services/migrations/nextcloud.py +++ b/mealie/services/migrations/nextcloud.py @@ -9,6 +9,8 @@ import isodate from isodate.isoerror import ISO8601Error from slugify import slugify +from mealie.schema.reports.reports import ReportEntryCreate + from ._migration_base import BaseMigrator from .utils.migration_alias import MigrationAlias from .utils.migration_helpers import MigrationReaders, glob_walker, import_image, split_by_comma @@ -66,8 +68,19 @@ class NextcloudMigrator(BaseMigrator): all_recipes = [] for _, nc_dir in nextcloud_dirs.items(): - recipe = self.clean_recipe_dictionary(nc_dir.recipe) - all_recipes.append(recipe) + try: + recipe = self.clean_recipe_dictionary(nc_dir.recipe) + all_recipes.append(recipe) + except Exception as e: + self.logger.exception(e) + self.report_entries.append( + ReportEntryCreate( + report_id=self.report_id, + success=False, + message=f"Failed to import {nc_dir.name}", + exception=f"{e.__class__.__name__}: {e}", + ) + ) all_statuses = self.import_recipes_to_database(all_recipes)