"""Session management for pyCycle MCP server."""
from __future__ import annotations
import uuid
from dataclasses import dataclass, field
from .types import CycleProblem
[docs]
@dataclass
class SessionRecord:
"""Container for an OpenMDAO Problem and metadata."""
problem: CycleProblem
meta: dict[str, object] = field(default_factory=dict)
[docs]
class SessionManager:
"""Manage pyCycle/OpenMDAO Problem sessions keyed by UUID."""
def __init__(self) -> None:
self._sessions: dict[str, SessionRecord] = {}
[docs]
def create_session(self, problem: CycleProblem, meta: dict[str, object] | None = None) -> str:
"""Register a new session and return its identifier."""
session_id = str(uuid.uuid4())
self._sessions[session_id] = SessionRecord(problem=problem, meta=meta or {})
return session_id
[docs]
def get(self, session_id: str) -> tuple[CycleProblem, dict[str, object]]:
"""Retrieve the problem and metadata for a session."""
record = self._sessions.get(session_id)
if record is None:
raise KeyError(f"Unknown session_id: {session_id}")
return record.problem, record.meta
[docs]
def close(self, session_id: str) -> None:
"""Remove a session."""
if session_id in self._sessions:
del self._sessions[session_id]
session_manager = SessionManager()
"""Module-level session manager for convenience."""