Spaces:
Sleeping
Sleeping
| import os | |
| import tempfile | |
| import shutil | |
| from pathlib import Path | |
| from typing import List | |
| from fastapi import UploadFile | |
| async def save_upload_file(upload_file: UploadFile) -> str: | |
| """ | |
| Save an uploaded file to a temporary location | |
| Args: | |
| upload_file: FastAPI UploadFile object | |
| Returns: | |
| Path to the saved temporary file | |
| """ | |
| try: | |
| # Create temporary file with appropriate extension | |
| suffix = Path(upload_file.filename).suffix if upload_file.filename else "" | |
| temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=suffix) | |
| # Write uploaded content to temporary file | |
| content = await upload_file.read() | |
| temp_file.write(content) | |
| temp_file.close() | |
| return temp_file.name | |
| except Exception as e: | |
| print(f"Error saving uploaded file: {e}") | |
| raise | |
| def cleanup_temp_files(file_paths: List[str]) -> None: | |
| """ | |
| Clean up temporary files | |
| Args: | |
| file_paths: List of file paths to delete | |
| """ | |
| for file_path in file_paths: | |
| try: | |
| if os.path.exists(file_path): | |
| os.unlink(file_path) | |
| print(f"Cleaned up temporary file: {file_path}") | |
| except Exception as e: | |
| print(f"Error cleaning up file {file_path}: {e}") | |
| def cleanup_temp_directories(dir_paths: List[str]) -> None: | |
| """ | |
| Clean up temporary directories | |
| Args: | |
| dir_paths: List of directory paths to delete | |
| """ | |
| for dir_path in dir_paths: | |
| try: | |
| if os.path.exists(dir_path): | |
| shutil.rmtree(dir_path) | |
| print(f"Cleaned up temporary directory: {dir_path}") | |
| except Exception as e: | |
| print(f"Error cleaning up directory {dir_path}: {e}") | |
| def get_file_extension(filename: str) -> str: | |
| """ | |
| Get file extension from filename | |
| Args: | |
| filename: Name of the file | |
| Returns: | |
| File extension (including the dot) | |
| """ | |
| return Path(filename).suffix.lower() | |
| def is_valid_image_file(filename: str) -> bool: | |
| """ | |
| Check if filename represents a valid image file | |
| Args: | |
| filename: Name of the file | |
| Returns: | |
| True if valid image file | |
| """ | |
| valid_extensions = {'.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp'} | |
| return get_file_extension(filename) in valid_extensions | |
| def is_valid_video_file(filename: str) -> bool: | |
| """ | |
| Check if filename represents a valid video file | |
| Args: | |
| filename: Name of the file | |
| Returns: | |
| True if valid video file | |
| """ | |
| valid_extensions = {'.mp4', '.avi', '.mov', '.wmv', '.flv', '.webm', '.mkv', '.m4v'} | |
| return get_file_extension(filename) in valid_extensions | |
| def create_temp_directory() -> str: | |
| """ | |
| Create a temporary directory | |
| Returns: | |
| Path to the created temporary directory | |
| """ | |
| return tempfile.mkdtemp() | |
| def get_file_size(file_path: str) -> int: | |
| """ | |
| Get file size in bytes | |
| Args: | |
| file_path: Path to the file | |
| Returns: | |
| File size in bytes | |
| """ | |
| try: | |
| return os.path.getsize(file_path) | |
| except OSError: | |
| return 0 | |
| def format_file_size(size_bytes: int) -> str: | |
| """ | |
| Format file size in human-readable format | |
| Args: | |
| size_bytes: File size in bytes | |
| Returns: | |
| Formatted file size string | |
| """ | |
| if size_bytes == 0: | |
| return "0B" | |
| size_names = ["B", "KB", "MB", "GB", "TB"] | |
| i = 0 | |
| while size_bytes >= 1024 and i < len(size_names) - 1: | |
| size_bytes /= 1024.0 | |
| i += 1 | |
| return f"{size_bytes:.1f}{size_names[i]}" | |