""" File handling utilities for SkillSync """ import os import shutil from datetime import datetime class FileHandler: """Handles file operations for submissions""" def __init__(self, upload_dir="data/user_data/submissions", max_size_mb=100): self.upload_dir = upload_dir self.max_size = max_size_mb * 1024 * 1024 self.allowed_extensions = [".zip", ".pdf", ".ipynb", ".py", ".txt", ".md"] def ensure_upload_dir(self): """Ensure upload directory exists""" os.makedirs(self.upload_dir, exist_ok=True) def validate_file(self, file): """Validate uploaded file""" if file is None: return False, "No file provided" file_name = getattr(file, 'name', 'unknown') file_ext = os.path.splitext(file_name)[1].lower() if file_ext not in self.allowed_extensions: return False, f"File type {file_ext} not allowed" return True, "File validated successfully" def save_file(self, file, user_id, assignment_type): """Save uploaded file""" try: self.ensure_upload_dir() original_name = getattr(file, 'name', 'uploaded_file') original_name = os.path.basename(original_name) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") new_name = f"{user_id}_{assignment_type}_{timestamp}_{original_name}" destination = os.path.join(self.upload_dir, new_name) if hasattr(file, 'name'): shutil.copy2(file.name, destination) return True, destination except Exception as e: return False, str(e) def get_file_info(self, filepath): """Get information about a file""" if not os.path.exists(filepath): return None stat = os.stat(filepath) return { "path": filepath, "size": stat.st_size, "created": datetime.fromtimestamp(stat.st_ctime).strftime("%Y-%m-%d %H:%M:%S"), "modified": datetime.fromtimestamp(stat.st_mtime).strftime("%Y-%m-%d %H:%M:%S") }