Source code for absfuyu.util.zipped

"""
Absfuyu: Zipped
---------------
Zipping stuff (deprecated soon, most features already in absfuyu.util.path.Directory)

Version: 5.1.0
Date updated: 10/03/2025 (dd/mm/yyyy)
"""

# Module level
# ---------------------------------------------------------------------------
__all__ = ["Zipper"]


# Library
# ---------------------------------------------------------------------------
import shutil
import zipfile
from pathlib import Path

from absfuyu.core import BaseClass, deprecated, versionadded
from absfuyu.logger import logger


# Class
# ---------------------------------------------------------------------------
[docs] @deprecated("5.1.0", reason="Use ``absfuyu.util.path.Directory`` instead") class Zipper(BaseClass): """Zip file or folder""" def __init__(self, path_to_zip: str | Path, name: str | None = None) -> None: """ path_to_zip: source location name: zipped file name """ self.source_path = Path(path_to_zip) if name is None: self.name = self.source_path.name + ".zip" else: self.name = name self.destination = self.source_path.parent.joinpath(self.name) def __str__(self) -> str: return f"{self.__class__.__name__}({self.name})"
[docs] def zip_stuff(self, delete_after_zip: bool = False) -> None: """ Zip file/folder :param delete_after_zip: Delete source after zip (Default: ``False``) :type delete_after_zip: bool """ # Zip logger.debug("Zipping...") if self.source_path.is_dir(): # zip entire folder try: with zipfile.ZipFile(self.destination, "w", zipfile.ZIP_DEFLATED) as f: for file in self.source_path.rglob("*"): f.write(file, file.relative_to(self.source_path)) except Exception: logger.error("Zip failed!") # shutil.make_archive(zip_file, format="zip", root_dir=zip_path) # Method 2 else: # zip a file # Implement later pass # Delete folder if delete_after_zip: try: logger.debug("Deleting unused folder...") shutil.rmtree(self.source_path) logger.debug("Files deleted") except OSError as e: logger.error(f"Error: {e.filename} - {e.strerror}.")
[docs] @versionadded("4.0.0") def unzip(self): """ Unzip every archive files in directory """ _valid = [".zip", ".cbz"] for x in self.source_path.glob("*"): if x.suffix.lower() in _valid: logger.debug(f"Unzipping {x.name}...") if x.suffix.lower() == ".cbz": temp = x.rename(x.with_suffix(".zip")) shutil.unpack_archive(temp, temp.parent.joinpath(temp.stem)) else: shutil.unpack_archive(x, x.parent.joinpath(x.stem))