"""Session namespace: ``b.session.*``.""" from __future__ import annotations from browser_cli.sdk.base import Namespace, sdk_command 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, } class SessionNS(Namespace): """Save, restore, list, and diff browser sessions.""" @sdk_command("session.save", lambda self, name: {"name": name}, default={}) def save(self, name: str) -> dict: """Save all current tabs as session *name*. Returns the save result (incl. tab count).""" 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).""" return self.command("session.load", _load_args(name, gentle_mode, discard_background_tabs, lazy, eager_tabs)) 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 = _load_args(name, gentle_mode, discard_background_tabs, lazy, eager_tabs) return self.command("session.load", {**args, "__background": True}) or {} @sdk_command("session.diff", lambda self, name_a, name_b: {"nameA": name_a, "nameB": name_b}, default={}) def diff(self, name_a: str, name_b: str) -> dict: """Diff two saved sessions.""" @sdk_command("session.export", lambda self, name=None: {"name": name}, default={}) def export(self, name: str | None = None) -> dict: """Export one saved session, or all sessions when *name* is omitted.""" @sdk_command("session.import", lambda self, name, session, overwrite=False: {"name": name, "session": session, "overwrite": overwrite}, default={}) def import_(self, name: str, session: dict, *, overwrite: bool = False) -> dict: """Import a saved session payload under *name*.""" def list(self) -> list[dict]: """Return saved sessions. In implicit multi-browser mode each session dict includes a ``browser`` key. """ return self.multi_list("session.list", {}, self.tag_browser) @sdk_command("session.remove", lambda self, name: {"name": name}, return_result=False) def remove(self, name: str) -> None: """Remove a saved session.""" @sdk_command("session.auto_save", lambda self, enabled: {"enabled": enabled}, return_result=False) def auto_save(self, enabled: bool) -> None: """Enable or disable automatic session saves."""