from celery import Celery from ..core.config import settings from ..models.file import File, FileStatus from sqlalchemy.orm import Session from ..core.database import SessionLocal import sys import os # Add the parent directory to Python path to import the masking system sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))) from src.main import process_document # Import your existing masking function celery = Celery( 'file_service', broker=settings.CELERY_BROKER_URL, backend=settings.CELERY_RESULT_BACKEND ) @celery.task def process_file(file_id: str): db = SessionLocal() try: file = db.query(File).filter(File.id == file_id).first() if not file: return # Update status to processing file.status = FileStatus.PROCESSING db.commit() try: # Process the file using your existing masking system output_path = process_document(file.original_path) # Update file record with processed path file.processed_path = output_path file.status = FileStatus.SUCCESS db.commit() except Exception as e: file.status = FileStatus.FAILED file.error_message = str(e) db.commit() raise finally: db.close()