|
|
|
|
|
""" |
|
|
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 |