Entelechy / browser /session_manager.py
qa296
refactor: simplify architecture and rebrand to Entelechy
b8e5043
"""Browser session persistence manager."""
import json
from pathlib import Path
from loguru import logger
class SessionManager:
"""Manages browser session state (cookies, localStorage) persistence."""
def __init__(self, profile_path: Path):
self.profile_path = Path(profile_path)
self.state_file = self.profile_path / "state.json"
self.profile_path.mkdir(parents=True, exist_ok=True)
def has_saved_state(self) -> bool:
"""Check if a saved browser state exists."""
return self.state_file.exists()
def get_state_path(self) -> str:
"""Get the path to the state file for Playwright."""
return str(self.state_file)
async def save_state(self, context) -> None:
"""Save browser context state (cookies, localStorage).
Args:
context: Playwright browser context.
"""
try:
await context.storage_state(path=self.get_state_path())
logger.debug(f"Browser state saved to {self.state_file}")
except Exception as e:
logger.error(f"Failed to save browser state: {e}")
def load_state_for_context(self) -> dict | None:
"""Load saved state for use in context creation.
Returns:
State dict or None if no saved state.
"""
if not self.has_saved_state():
return None
try:
with open(self.state_file, "r") as f:
return json.load(f)
except Exception as e:
logger.warning(f"Failed to load browser state: {e}")
return None