From 87f86d5d7f92d5508eadef95c7aeb2ec13d08138 Mon Sep 17 00:00:00 2001 From: hay-kot Date: Sun, 2 May 2021 14:46:19 -0800 Subject: [PATCH] fix delete and import errors --- mealie/routes/recipe/recipe_crud_routes.py | 12 ++++++------ mealie/services/backups/imports.py | 6 +++++- mealie/services/recipe/{asset.py => media.py} | 11 +++++++++-- 3 files changed, 20 insertions(+), 9 deletions(-) rename mealie/services/recipe/{asset.py => media.py} (64%) diff --git a/mealie/routes/recipe/recipe_crud_routes.py b/mealie/routes/recipe/recipe_crud_routes.py index 01a05005c..98bb58667 100644 --- a/mealie/routes/recipe/recipe_crud_routes.py +++ b/mealie/routes/recipe/recipe_crud_routes.py @@ -5,7 +5,7 @@ from mealie.db.db_setup import generate_session from mealie.routes.deps import get_current_user from mealie.schema.recipe import Recipe, RecipeURLIn from mealie.services.image.image import scrape_image, write_image -from mealie.services.recipe.asset import check_asset +from mealie.services.recipe.media import check_assets, delete_assets from mealie.services.scraper.scraper import create_from_url from sqlalchemy.orm.session import Session @@ -59,7 +59,7 @@ def update_recipe( print(recipe.assets) if recipe_slug != recipe.slug: - check_asset(original_slug=recipe_slug, recipe=recipe) + check_assets(original_slug=recipe_slug, recipe=recipe) return recipe @@ -77,7 +77,7 @@ def patch_recipe( session, recipe_slug, new_data=data.dict(exclude_unset=True, exclude_defaults=True) ) if recipe_slug != recipe.slug: - check_asset(original_slug=recipe_slug, recipe=recipe) + check_assets(original_slug=recipe_slug, recipe=recipe) return recipe @@ -91,9 +91,9 @@ def delete_recipe( """ Deletes a recipe by slug """ try: - delete_data = db.recipes.delete(session, recipe_slug) - - return delete_data + recipes = db.recipes.delete(session, recipe_slug) + delete_assets(recipe_slug=recipe_slug) + return recipes except Exception: raise HTTPException(status.HTTP_400_BAD_REQUEST) diff --git a/mealie/services/backups/imports.py b/mealie/services/backups/imports.py index 4b637b741..864a21fb4 100644 --- a/mealie/services/backups/imports.py +++ b/mealie/services/backups/imports.py @@ -108,7 +108,7 @@ class ImportDatabase: def _import_images(self, successful_imports: list[Recipe]): image_dir = self.import_dir.joinpath("images") - if image_dir.exists(): + if image_dir.exists(): # Migrate from before v0.5.0 for image in image_dir.iterdir(): item: Recipe = successful_imports.get(image.stem) @@ -121,6 +121,10 @@ class ImportDatabase: if image.is_file(): shutil.copy(image, dest_dir) + else: + recipe_dir = self.import_dir.joinpath("recipes") + shutil.copytree(recipe_dir, app_dirs.RECIPE_DATA_DIR, dirs_exist_ok=True) + minify.migrate_images() def import_themes(self): diff --git a/mealie/services/recipe/asset.py b/mealie/services/recipe/media.py similarity index 64% rename from mealie/services/recipe/asset.py rename to mealie/services/recipe/media.py index 7d5b80fdb..2cd5b38b8 100644 --- a/mealie/services/recipe/asset.py +++ b/mealie/services/recipe/media.py @@ -1,4 +1,5 @@ from pathlib import Path +from shutil import copytree, rmtree from mealie.core.config import app_dirs from mealie.core.root_logger import get_logger @@ -7,16 +8,22 @@ from mealie.schema.recipe import Recipe logger = get_logger() -def check_asset(original_slug, recipe: Recipe) -> Path: +def check_assets(original_slug, recipe: Recipe) -> Path: if original_slug == recipe.slug: return recipe.assets current_dir = app_dirs.RECIPE_DATA_DIR.joinpath(original_slug) try: - current_dir.rename(recipe.directory) + copytree(current_dir, recipe.directory, dirs_exist_ok=True) + except FileNotFoundError: logger.error(f"Recipe Directory not Found: {original_slug}") logger.info(f"Renaming Recipe Directory: {original_slug} -> {recipe.slug}") return current_dir.absolute() + + +def delete_assets(recipe_slug): + recipe_dir = Recipe(slug=recipe_slug).directory + rmtree(recipe_dir, ignore_errors=True)