import base64 import os import shutil import uuid def get_ext(filename: str) -> str: if not filename: return "" pos = filename.rfind(".") return filename[pos + 1:] if pos > -1 else "" def get_short_filename(filename: str) -> str: if not filename: return "" return os.path.basename(filename) def remove_ext(filename: str) -> str: if not filename: return filename pos = filename.rfind(".") return filename[:pos] if pos > -1 else filename def is_image(filename: str) -> bool: return get_ext(filename).lower() in ("jpg", "jpeg", "png", "bmp") def is_video(filename: str) -> bool: return get_ext(filename).lower() in ("mp4", "mov") def generate_unique_filename(original: str) -> str: if not original: return str(uuid.uuid4()) pos = original.rfind(".") if pos >= 0: ext = original[pos:] return str(uuid.uuid4()) + ext return str(uuid.uuid4()) def base64_content(filepath: str) -> str: with open(filepath, "rb") as f: return base64.b64encode(f.read()).decode("utf-8") def base64_to_file(content: str, filepath: str): os.makedirs(os.path.dirname(filepath), exist_ok=True) with open(filepath, "wb") as f: f.write(base64.b64decode(content)) def copy_file(src: str, dst: str): os.makedirs(os.path.dirname(dst), exist_ok=True) shutil.copy2(src, dst) def copy_directory(src: str, dst: str): if os.path.exists(dst): shutil.rmtree(dst) shutil.copytree(src, dst) def delete_directory(path: str): if os.path.isdir(path): shutil.rmtree(path, ignore_errors=True) def move_file(src: str, dst: str): os.makedirs(os.path.dirname(dst), exist_ok=True) shutil.move(src, dst) def force_mkdir(path: str): os.makedirs(path, exist_ok=True) def write_bytes(filepath: str, data: bytes): os.makedirs(os.path.dirname(filepath), exist_ok=True) with open(filepath, "wb") as f: f.write(data)