pdf-4 / src /utils /file_handler.py
fokan's picture
first
61b4298
#!/usr/bin/env python3
"""
File handling utilities for the DOCX to PDF converter
"""
import os
import tempfile
import shutil
import logging
from pathlib import Path
from typing import Optional
logger = logging.getLogger(__name__)
class FileHandler:
"""Handle file operations for the converter"""
def __init__(self, base_temp_dir: str = "/tmp/conversions"):
self.base_temp_dir = base_temp_dir
os.makedirs(self.base_temp_dir, exist_ok=True)
def create_temp_directory(self) -> str:
"""Create a temporary directory for file processing"""
try:
temp_dir = tempfile.mkdtemp(dir=self.base_temp_dir)
logger.info(f"Created temporary directory: {temp_dir}")
return temp_dir
except Exception as e:
logger.error(f"Failed to create temporary directory: {e}")
raise
def save_uploaded_file(self, temp_dir: str, filename: str, content: bytes) -> str:
"""Save uploaded file to temporary directory"""
try:
file_path = os.path.join(temp_dir, filename)
with open(file_path, "wb") as f:
f.write(content)
logger.info(f"Saved file: {file_path}")
return file_path
except Exception as e:
logger.error(f"Failed to save file {filename}: {e}")
raise
def cleanup_temp_directory(self, temp_dir: str):
"""Clean up temporary directory"""
try:
if os.path.exists(temp_dir):
shutil.rmtree(temp_dir)
logger.info(f"Cleaned up temporary directory: {temp_dir}")
except Exception as e:
logger.error(f"Failed to cleanup directory {temp_dir}: {e}")
def get_file_size(self, file_path: str) -> int:
"""Get file size in bytes"""
try:
return os.path.getsize(file_path)
except Exception as e:
logger.error(f"Failed to get file size for {file_path}: {e}")
return 0
def validate_file_extension(self, filename: str, allowed_extensions: list) -> bool:
"""Validate file extension"""
try:
ext = Path(filename).suffix.lower()
return ext in allowed_extensions
except Exception as e:
logger.error(f"Failed to validate file extension for {filename}: {e}")
return False