Spaces:
Running
Running
File size: 1,350 Bytes
d6c9678 edfdca7 d6c9678 edfdca7 d6c9678 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | from __future__ import annotations
import os
import shutil
import tempfile
import uuid
from pathlib import Path
from fastapi import HTTPException
from app.models.session import SessionState
class SessionStore:
def __init__(self) -> None:
self._sessions: dict[str, SessionState] = {}
def create(self) -> SessionState:
session_id = uuid.uuid4().hex
runtime_root = str(os.getenv("MESA_RUNTIME_DIR") or "").strip()
temp_root = None
if runtime_root:
temp_root = Path(runtime_root).expanduser().resolve() / "sessions"
temp_root.mkdir(parents=True, exist_ok=True)
workdir = Path(tempfile.mkdtemp(prefix=f"mesa_{session_id[:8]}_", dir=str(temp_root) if temp_root else None))
state = SessionState(session_id=session_id, workdir=workdir)
self._sessions[session_id] = state
return state
def get(self, session_id: str) -> SessionState:
state = self._sessions.get(session_id)
if state is None:
raise HTTPException(status_code=404, detail="Sessao nao encontrada")
return state
def delete(self, session_id: str) -> None:
state = self._sessions.pop(session_id, None)
if state is None:
return
shutil.rmtree(state.workdir, ignore_errors=True)
session_store = SessionStore()
|