Spaces:
Sleeping
Sleeping
| import logging | |
| from fastapi import APIRouter,BackgroundTasks | |
| from fastapi import Request | |
| import uuid | |
| from fastapi.responses import JSONResponse | |
| from api.constants import DEFAULT_COOKIE_MAX_AGE_SECONDS,PUBLIC_FOLDER_FILE_PATH | |
| import os | |
| import shutil | |
| from src.graphs.builder import deleteThread as GraphThreadDeletor | |
| from src.constants import ARTIFACT_DIR | |
| router = APIRouter() | |
| import asyncio | |
| async def delete_thread(thread_id: str, delay_seconds: int): | |
| """Utility function to delete a thread after a specific delay.""" | |
| if delay_seconds > 0: | |
| logging.info(f"Waiting {delay_seconds} seconds before deleting thread: {thread_id}") | |
| await asyncio.sleep(delay_seconds) | |
| logging.info(f"Starting deletion of thread data for thread_id: {thread_id}") | |
| try: | |
| path1 = os.path.join(ARTIFACT_DIR, thread_id) | |
| path2 = os.path.join(PUBLIC_FOLDER_FILE_PATH, thread_id) | |
| if os.path.exists(path1): | |
| shutil.rmtree(path1) | |
| logging.info(f"Deleted artifact data for path: {path1}") | |
| if os.path.exists(path2): | |
| shutil.rmtree(path2) | |
| logging.info(f"Deleted public folder data for path: {path2}") | |
| try: | |
| GraphThreadDeletor(thread_id) | |
| except Exception as e: | |
| logging.error(f"Error during graph thread deletion for thread_id {thread_id}: {e}") | |
| logging.info(f"Completed deletion of thread data for thread_id: {thread_id}") | |
| except Exception as e: | |
| logging.error(f"Error deleting thread data for thread_id {thread_id}: {e}") | |
| async def login(request: Request, seconds: int, background_tasks: BackgroundTasks): | |
| """Endpoint to handle user login. Sets a cookie and schedules data deletion.""" | |
| thread_id = str(uuid.uuid4()) | |
| response = JSONResponse(content={"message": "Login successful.","thread_id": thread_id}, status_code=200) | |
| response.set_cookie( | |
| key="thread_id", | |
| value=thread_id, | |
| httponly=True, | |
| max_age=DEFAULT_COOKIE_MAX_AGE_SECONDS | |
| ) | |
| background_tasks.add_task(delete_thread, thread_id=thread_id, delay_seconds=seconds) | |
| return response | |