"""Session namespace: ``b.session.*``.""" from __future__ import annotations from browser_cli.sdk.base import Namespace class SessionNS(Namespace): """Save, restore, list, and diff browser sessions.""" def save(self, name: str) -> dict: """Save all current tabs as session *name*. Returns the save result (incl. tab count).""" return self._c._cmd("session.save", {"name": name}) or {} @staticmethod def _load_args(name, gentle_mode, discard_background_tabs, lazy, eager_tabs) -> dict: return { "name": name, "gentleMode": gentle_mode, "discardBackgroundTabs": discard_background_tabs, "lazy": lazy, "eagerTabs": eager_tabs, } def load( self, name: str, *, gentle_mode: str = "auto", discard_background_tabs: bool = False, lazy: bool = False, eager_tabs: int = 10, ) -> dict: """Restore session *name*. Returns the load result (incl. tabs opened).""" args = self._load_args(name, gentle_mode, discard_background_tabs, lazy, eager_tabs) return self._c._cmd("session.load", args) or {} def load_background( self, name: str, *, gentle_mode: str = "auto", discard_background_tabs: bool = False, lazy: bool = False, eager_tabs: int = 10, ) -> dict: """Restore session *name* as a background job. Returns the job descriptor.""" args = self._load_args(name, gentle_mode, discard_background_tabs, lazy, eager_tabs) return self._c._cmd("session.load", {**args, "__background": True}) or {} def diff(self, name_a: str, name_b: str) -> dict: return self._c._cmd("session.diff", {"nameA": name_a, "nameB": name_b}) or {} def list(self) -> list[dict]: """Return saved sessions. In implicit multi-browser mode each session dict includes a ``browser`` key. """ return self._c._multi_list("session.list", {}, self._c._tag_browser) def remove(self, name: str) -> None: self._c._cmd("session.remove", {"name": name}) def auto_save(self, enabled: bool) -> None: self._c._cmd("session.auto_save", {"enabled": enabled})