Exemplo n.º 1
0
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
Exemplo n.º 2
0
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}
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
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
Exemplo n.º 5
0
    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()