import os import mimetypes def detect_file_category(file_path: str) -> str: if not file_path or not os.path.exists(file_path): return "none" mime = None try: import filetype # optional; if not installed, fallback to mimetypes kind = filetype.guess(file_path) mime = kind.mime if kind else None except Exception: mime = None if not mime: mime, _ = mimetypes.guess_type(file_path) ext = os.path.splitext(file_path)[1].lower() if mime: if mime.startswith("image/"): return "image" if mime.startswith("audio/"): return "audio" if mime.startswith("video/"): return "video" if mime in ( "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "text/csv", ): return "spreadsheet" if mime == "application/pdf": return "document" if mime.startswith("text/"): if ext in (".py", ".md", ".txt", ".csv"): return "text" # extension fallback if ext in (".png", ".jpg", ".jpeg", ".gif", ".bmp", ".webp", ".tiff"): return "image" if ext in (".mp3", ".wav", ".m4a", ".flac", ".ogg"): return "audio" if ext in (".mp4", ".mov", ".mkv", ".webm"): return "video" if ext in (".xls", ".xlsx", ".csv"): return "spreadsheet" return "unknown"