def chowdown_migrate(session: Session, zip_file: Path): temp_dir = unpack_zip(zip_file) with temp_dir as dir: chow_dir = next(Path(dir).iterdir()) image_dir = app_dirs.TEMP_DIR.joinpath(chow_dir, "images") recipe_dir = app_dirs.TEMP_DIR.joinpath(chow_dir, "_recipes") failed_recipes = [] successful_recipes = [] for recipe in recipe_dir.glob("*.md"): try: new_recipe = read_chowdown_file(recipe) db.recipes.create(session, new_recipe.dict()) successful_recipes.append(new_recipe.name) except Exception as inst: session.rollback() logger.error(inst) failed_recipes.append(recipe.stem) failed_images = [] for image in image_dir.iterdir(): try: if image.stem not in failed_recipes: shutil.copy(image, app_dirs.IMG_DIR.joinpath(image.name)) except Exception as inst: logger.error(inst) failed_images.append(image.name) report = {"successful": successful_recipes, "failed": failed_recipes} migrate_images() return report
def migrate(session, selection: str): prep() app_dirs.MIGRATION_DIR.mkdir(exist_ok=True) selection = app_dirs.MIGRATION_DIR.joinpath(selection) nextcloud_dir = process_selection(selection) successful_imports = [] failed_imports = [] for dir in nextcloud_dir.iterdir(): if dir.is_dir(): try: recipe = import_recipes(dir) db.recipes.create(session, recipe.dict()) successful_imports.append(recipe.name) except Exception: session.rollback() logging.error(f"Failed Nextcloud Import: {dir.name}") logging.exception("") failed_imports.append(dir.name) cleanup() minify.migrate_images() return {"successful": successful_imports, "failed": failed_imports}
def _import_images(self, successful_imports: List[str]): image_dir = self.import_dir.joinpath("images") for image in image_dir.iterdir(): if image.stem in successful_imports: if image.is_dir(): dest = app_dirs.IMG_DIR.joinpath(image.stem) shutil.copytree(image, dest, dirs_exist_ok=True) if image.is_file(): shutil.copy(image, app_dirs.IMG_DIR) minify.migrate_images()
def write_image(recipe_slug: str, file_data: bytes, extension: str) -> Path.name: try: delete_image(recipe_slug) except: pass image_dir = Path(app_dirs.IMG_DIR.joinpath(f"{recipe_slug}")) image_dir.mkdir() extension = extension.replace(".", "") image_path = image_dir.joinpath(f"original.{extension}") if isinstance(file_data, bytes): with open(image_path, "ab") as f: f.write(file_data) else: with open(image_path, "ab") as f: shutil.copyfileobj(file_data, f) minify.migrate_images() return image_path
def _import_images(self, successful_imports: list[Recipe]): image_dir = self.import_dir.joinpath("images") if image_dir.exists(): # Migrate from before v0.5.0 for image in image_dir.iterdir(): item: Recipe = successful_imports.get(image.stem) if item: dest_dir = item.image_dir if image.is_dir(): shutil.copytree(image, dest_dir, dirs_exist_ok=True) 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()