target first remote browser when not giving it with a alias and update version to 0.8.4
This commit is contained in:
+12
-1
@@ -127,10 +127,21 @@ def remote_target_for_alias(alias: str | None) -> BrowserTarget | None:
|
|||||||
"""Resolve a user-facing remote alias such as 'host:profile' to a target."""
|
"""Resolve a user-facing remote alias such as 'host:profile' to a target."""
|
||||||
if not alias:
|
if not alias:
|
||||||
return None
|
return None
|
||||||
for target in _remote_browser_targets():
|
targets = _remote_browser_targets()
|
||||||
|
for target in targets:
|
||||||
endpoint_profile = f"{target.remote}:{target.profile}" if target.remote else None
|
endpoint_profile = f"{target.remote}:{target.profile}" if target.remote else None
|
||||||
if alias in {target.display_name, endpoint_profile}:
|
if alias in {target.display_name, endpoint_profile}:
|
||||||
return target
|
return target
|
||||||
|
|
||||||
|
endpoint_matches = []
|
||||||
|
for target in targets:
|
||||||
|
if not target.remote:
|
||||||
|
continue
|
||||||
|
remote_host, sep, _remote_port = target.remote.rpartition(":")
|
||||||
|
if alias == target.remote or (sep and alias == remote_host):
|
||||||
|
endpoint_matches.append(target)
|
||||||
|
if len(endpoint_matches) == 1:
|
||||||
|
return endpoint_matches[0]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"manifest_version": 3,
|
"manifest_version": 3,
|
||||||
"name": "browser-cli",
|
"name": "browser-cli",
|
||||||
"version": "0.8.3",
|
"version": "0.8.4",
|
||||||
"description": "Control your browser from the terminal via browser-cli",
|
"description": "Control your browser from the terminal via browser-cli",
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"tabs",
|
"tabs",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "browser-cli"
|
name = "browser-cli"
|
||||||
version = "0.8.3"
|
version = "0.8.4"
|
||||||
description = "Control your real running browser from the terminal via a browser extension"
|
description = "Control your real running browser from the terminal via a browser extension"
|
||||||
requires-python = ">=3.10"
|
requires-python = ">=3.10"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
|||||||
@@ -170,6 +170,61 @@ def test_remote_target_for_alias_accepts_full_endpoint_profile(monkeypatch):
|
|||||||
assert target.remote == "host:8765"
|
assert target.remote == "host:8765"
|
||||||
|
|
||||||
|
|
||||||
|
def test_remote_target_for_alias_accepts_host_when_only_one_remote_target(monkeypatch):
|
||||||
|
remote_host = "browser-host.example"
|
||||||
|
remote_endpoint = f"{remote_host}:8765"
|
||||||
|
monkeypatch.setattr(
|
||||||
|
"browser_cli.client._remote_browser_targets",
|
||||||
|
lambda: [BrowserTarget("work", f"{remote_host}:work", "", remote=remote_endpoint, token="secret")],
|
||||||
|
)
|
||||||
|
|
||||||
|
target = remote_target_for_alias(remote_host)
|
||||||
|
|
||||||
|
assert target is not None
|
||||||
|
assert target.profile == "work"
|
||||||
|
assert target.remote == remote_endpoint
|
||||||
|
|
||||||
|
|
||||||
|
def test_send_command_resolves_host_alias_to_single_remote_target(monkeypatch):
|
||||||
|
remote_host = "browser-host.example"
|
||||||
|
remote_endpoint = f"{remote_host}:8765"
|
||||||
|
monkeypatch.delenv("BROWSER_CLI_REMOTE", raising=False)
|
||||||
|
monkeypatch.delenv("BROWSER_CLI_TOKEN", raising=False)
|
||||||
|
monkeypatch.setenv("BROWSER_CLI_PROFILE", remote_host)
|
||||||
|
sent = {}
|
||||||
|
|
||||||
|
monkeypatch.setattr(
|
||||||
|
"browser_cli.client._remote_browser_targets",
|
||||||
|
lambda: [BrowserTarget("work", f"{remote_host}:work", "", remote=remote_endpoint, token="secret")],
|
||||||
|
)
|
||||||
|
|
||||||
|
def fake_send_remote(endpoint, framed):
|
||||||
|
payload_len = int.from_bytes(framed[:4], "little")
|
||||||
|
msg = json.loads(framed[4:4 + payload_len])
|
||||||
|
sent["endpoint"] = endpoint
|
||||||
|
sent.update(msg)
|
||||||
|
return json.dumps({"success": True, "data": []}).encode("utf-8")
|
||||||
|
|
||||||
|
monkeypatch.setattr("browser_cli.client._send_remote", fake_send_remote)
|
||||||
|
|
||||||
|
assert send_command("tabs.list") == []
|
||||||
|
assert sent["endpoint"] == remote_endpoint
|
||||||
|
assert sent["_route"] == "work"
|
||||||
|
assert sent["token"] == "secret"
|
||||||
|
|
||||||
|
|
||||||
|
def test_remote_target_for_alias_keeps_host_alias_ambiguous_for_multiple_targets(monkeypatch):
|
||||||
|
monkeypatch.setattr(
|
||||||
|
"browser_cli.client._remote_browser_targets",
|
||||||
|
lambda: [
|
||||||
|
BrowserTarget("main", "host:main", "", remote="host:8765", token="secret"),
|
||||||
|
BrowserTarget("work", "host:work", "", remote="host:8765", token="secret"),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
assert remote_target_for_alias("host") is None
|
||||||
|
|
||||||
|
|
||||||
def test_send_command_requires_browser_for_multiple_remote_targets(monkeypatch):
|
def test_send_command_requires_browser_for_multiple_remote_targets(monkeypatch):
|
||||||
monkeypatch.delenv("BROWSER_CLI_PROFILE", raising=False)
|
monkeypatch.delenv("BROWSER_CLI_PROFILE", raising=False)
|
||||||
monkeypatch.setattr(
|
monkeypatch.setattr(
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ requires-python = ">=3.10"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "browser-cli"
|
name = "browser-cli"
|
||||||
version = "0.8.3"
|
version = "0.8.4"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "click" },
|
{ name = "click" },
|
||||||
|
|||||||
Reference in New Issue
Block a user