import json import click from browser_cli.commands import client_from_ctx, handle_errors, tab_option from rich.console import Console console = Console() @click.group("storage") def storage_group(): """Read and write the page's localStorage / sessionStorage.""" @storage_group.command("get") @click.argument("key", required=False) @click.option("--type", "store_type", type=click.Choice(["local", "session"]), default="local", show_default=True) @tab_option @handle_errors def storage_get(key, store_type, tab_id): """Get a localStorage KEY (or dump all keys if omitted).""" result = client_from_ctx().storage.get(key, type=store_type, tab_id=tab_id) if result is None: console.print("[dim]null[/dim]") elif isinstance(result, dict): console.print(json.dumps(result, indent=2)) else: console.print(str(result)) @storage_group.command("set") @click.argument("key") @click.argument("value") @click.option("--type", "store_type", type=click.Choice(["local", "session"]), default="local", show_default=True) @tab_option @handle_errors def storage_set(key, value, store_type, tab_id): """Set localStorage KEY to VALUE.""" client_from_ctx().storage.set(key, value, type=store_type, tab_id=tab_id) console.print(f"[green]Set[/green] {store_type}[{key!r}] = {value!r}")