mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-30 17:53:31 -04:00 
			
		
		
		
	Merge pull request #3283 from michael-genson/fix/recipe-favorite-slug-handling
fix: Allow UserOut to accept list of slugs for recipe favorites
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| from datetime import datetime, timedelta | from datetime import datetime, timedelta | ||||||
| from pathlib import Path | from pathlib import Path | ||||||
| from typing import Annotated | from typing import Annotated, Any | ||||||
| from uuid import UUID | from uuid import UUID | ||||||
|  |  | ||||||
| from pydantic import UUID4, ConfigDict, Field, StringConstraints, field_validator | from pydantic import UUID4, ConfigDict, Field, StringConstraints, field_validator | ||||||
| @@ -107,7 +107,7 @@ class UserOut(UserBase): | |||||||
|     group_slug: str |     group_slug: str | ||||||
|     tokens: list[LongLiveTokenOut] | None = None |     tokens: list[LongLiveTokenOut] | None = None | ||||||
|     cache_key: str |     cache_key: str | ||||||
|     favorite_recipes: Annotated[list[str] | None, Field(validate_default=True)] = [] |     favorite_recipes: Annotated[list[str], Field(validate_default=True)] = [] | ||||||
|     model_config = ConfigDict(from_attributes=True) |     model_config = ConfigDict(from_attributes=True) | ||||||
|  |  | ||||||
|     @property |     @property | ||||||
| @@ -119,8 +119,24 @@ class UserOut(UserBase): | |||||||
|         return [joinedload(User.group), joinedload(User.favorite_recipes), joinedload(User.tokens)] |         return [joinedload(User.group), joinedload(User.favorite_recipes), joinedload(User.tokens)] | ||||||
|  |  | ||||||
|     @field_validator("favorite_recipes", mode="before") |     @field_validator("favorite_recipes", mode="before") | ||||||
|     def convert_favorite_recipes_to_slugs(cls, v): |     def convert_favorite_recipes_to_slugs(cls, v: Any): | ||||||
|         return [recipe.slug for recipe in v] if v else v |         if not v: | ||||||
|  |             return [] | ||||||
|  |         if not isinstance(v, list): | ||||||
|  |             return v | ||||||
|  |  | ||||||
|  |         slugs: list[str] = [] | ||||||
|  |         for recipe in v: | ||||||
|  |             if isinstance(recipe, str): | ||||||
|  |                 slugs.append(recipe) | ||||||
|  |             else: | ||||||
|  |                 try: | ||||||
|  |                     slugs.append(recipe.slug) | ||||||
|  |                 except AttributeError: | ||||||
|  |                     # this isn't a list of recipes, so we quit early and let Pydantic's typical validation handle it | ||||||
|  |                     return v | ||||||
|  |  | ||||||
|  |         return slugs | ||||||
|  |  | ||||||
|  |  | ||||||
| class UserPagination(PaginationBase): | class UserPagination(PaginationBase): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user