mirror of
https://github.com/mealie-recipes/mealie.git
synced 2025-12-11 04:45:22 -05:00
fix: error when trying to change recipe image (#5771)
Co-authored-by: Michael Genson <71845777+michael-genson@users.noreply.github.com> Co-authored-by: Kuchenpirat <24235032+Kuchenpirat@users.noreply.github.com>
This commit is contained in:
@@ -85,7 +85,6 @@ class RepositoryGeneric[Schema: MealieModel, Model: SqlAlchemyBase]:
|
||||
|
||||
def _filter_builder(self, **kwargs) -> dict[str, Any]:
|
||||
dct = {}
|
||||
|
||||
if self.group_id:
|
||||
dct["group_id"] = self.group_id
|
||||
if self.household_id:
|
||||
@@ -146,7 +145,11 @@ class RepositoryGeneric[Schema: MealieModel, Model: SqlAlchemyBase]:
|
||||
return self.session.execute(self._query().filter_by(**fltr)).unique().scalars().one()
|
||||
|
||||
def get_one(
|
||||
self, value: str | int | UUID4, key: str | None = None, any_case=False, override_schema=None
|
||||
self,
|
||||
value: str | int | UUID4,
|
||||
key: str | None = None,
|
||||
any_case=False,
|
||||
override_schema=None,
|
||||
) -> Schema | None:
|
||||
key = key or self.primary_key
|
||||
eff_schema = override_schema or self.schema
|
||||
|
||||
@@ -523,12 +523,12 @@ class RecipeController(BaseRecipeController):
|
||||
|
||||
@router.put("/{slug}/image", response_model=UpdateImageResponse, tags=["Recipe: Images and Assets"])
|
||||
def update_recipe_image(self, slug: str, image: bytes = File(...), extension: str = Form(...)):
|
||||
recipe = self.mixins.get_one(slug)
|
||||
data_service = RecipeDataService(recipe.id)
|
||||
data_service.write_image(image, extension)
|
||||
|
||||
new_version = self.recipes.update_image(slug, extension)
|
||||
return UpdateImageResponse(image=new_version)
|
||||
try:
|
||||
new_version = self.service.update_recipe_image(slug, image, extension)
|
||||
return UpdateImageResponse(image=new_version)
|
||||
except Exception as e:
|
||||
self.handle_exceptions(e)
|
||||
return None
|
||||
|
||||
@router.post("/{slug}/assets", response_model=RecipeAsset, tags=["Recipe: Images and Assets"])
|
||||
def upload_recipe_asset(
|
||||
@@ -550,7 +550,7 @@ class RecipeController(BaseRecipeController):
|
||||
file_name = f"{file_slug}.{extension}"
|
||||
asset_in = RecipeAsset(name=name, icon=icon, file_name=file_name)
|
||||
|
||||
recipe = self.mixins.get_one(slug)
|
||||
recipe = self.service.get_one(slug)
|
||||
|
||||
dest = recipe.asset_dir / file_name
|
||||
|
||||
@@ -567,9 +567,9 @@ class RecipeController(BaseRecipeController):
|
||||
if not dest.is_file():
|
||||
raise HTTPException(status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||
|
||||
recipe = self.mixins.get_one(slug)
|
||||
recipe.assets.append(asset_in)
|
||||
if recipe.assets is not None:
|
||||
recipe.assets.append(asset_in)
|
||||
|
||||
self.mixins.update_one(recipe, slug)
|
||||
self.service.update_one(slug, recipe)
|
||||
|
||||
return asset_in
|
||||
|
||||
@@ -408,6 +408,16 @@ class RecipeService(RecipeServiceBase):
|
||||
self.check_assets(new_data, recipe.slug)
|
||||
return new_data
|
||||
|
||||
def update_recipe_image(self, slug: str, image: bytes, extension: str):
|
||||
recipe = self.get_one(slug)
|
||||
if not self.can_update(recipe):
|
||||
raise exceptions.PermissionDenied("You do not have permission to edit this recipe.")
|
||||
|
||||
data_service = RecipeDataService(recipe.id)
|
||||
data_service.write_image(image, extension)
|
||||
|
||||
return self.group_recipes.update_image(slug, extension)
|
||||
|
||||
def patch_one(self, slug_or_id: str | UUID, patch_data: Recipe) -> Recipe:
|
||||
recipe: Recipe = self._pre_update_check(slug_or_id, patch_data)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user