mirror of
https://github.com/HKUDS/nanobot.git
synced 2026-09-01 08:42:20 +03:00
fix(cli): harden process identity portability
This commit is contained in:
@@ -7,11 +7,18 @@ import os
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Final
|
from typing import Final
|
||||||
|
|
||||||
from setproctitle import setproctitle
|
|
||||||
|
|
||||||
_ROLES: Final = {"agent", "gateway", "webui"}
|
_ROLES: Final = {"agent", "gateway", "webui"}
|
||||||
|
|
||||||
|
|
||||||
|
def _set_process_title(title: str) -> None:
|
||||||
|
# Process titles are short; do not trade Linux /proc environment visibility for
|
||||||
|
# extra title storage. setproctitle reads this switch when it is imported.
|
||||||
|
os.environ.setdefault("SPT_NOENV", "1")
|
||||||
|
from setproctitle import setproctitle
|
||||||
|
|
||||||
|
setproctitle(title)
|
||||||
|
|
||||||
|
|
||||||
def set_cli_process_identity(args: list[str]) -> None:
|
def set_cli_process_identity(args: list[str]) -> None:
|
||||||
"""Name this CLI process after the nanobot role it is running."""
|
"""Name this CLI process after the nanobot role it is running."""
|
||||||
if os.name == "nt":
|
if os.name == "nt":
|
||||||
@@ -19,7 +26,7 @@ def set_cli_process_identity(args: list[str]) -> None:
|
|||||||
# which packaging already generates as ``nanobot.exe``.
|
# which packaging already generates as ``nanobot.exe``.
|
||||||
return
|
return
|
||||||
role = args[0] if args and args[0] in _ROLES else None
|
role = args[0] if args and args[0] in _ROLES else None
|
||||||
setproctitle(f"nanobot-{role}" if role else "nanobot")
|
_set_process_title(f"nanobot-{role}" if role else "nanobot")
|
||||||
|
|
||||||
|
|
||||||
def named_executable(executable: str, *, name: str, directory: Path) -> str:
|
def named_executable(executable: str, *, name: str, directory: Path) -> str:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@@ -24,7 +25,7 @@ def test_cli_process_identity_uses_product_and_role(
|
|||||||
) -> None:
|
) -> None:
|
||||||
titles: list[str] = []
|
titles: list[str] = []
|
||||||
monkeypatch.setattr("nanobot.cli.process_identity.os.name", "posix")
|
monkeypatch.setattr("nanobot.cli.process_identity.os.name", "posix")
|
||||||
monkeypatch.setattr("nanobot.cli.process_identity.setproctitle", titles.append)
|
monkeypatch.setattr("nanobot.cli.process_identity._set_process_title", titles.append)
|
||||||
|
|
||||||
set_cli_process_identity(args)
|
set_cli_process_identity(args)
|
||||||
|
|
||||||
@@ -36,7 +37,7 @@ def test_cli_process_identity_keeps_windows_launcher_name(
|
|||||||
) -> None:
|
) -> None:
|
||||||
titles: list[str] = []
|
titles: list[str] = []
|
||||||
monkeypatch.setattr("nanobot.cli.process_identity.os.name", "nt")
|
monkeypatch.setattr("nanobot.cli.process_identity.os.name", "nt")
|
||||||
monkeypatch.setattr("nanobot.cli.process_identity.setproctitle", titles.append)
|
monkeypatch.setattr("nanobot.cli.process_identity._set_process_title", titles.append)
|
||||||
|
|
||||||
set_cli_process_identity(["agent"])
|
set_cli_process_identity(["agent"])
|
||||||
|
|
||||||
@@ -44,12 +45,12 @@ def test_cli_process_identity_keeps_windows_launcher_name(
|
|||||||
|
|
||||||
|
|
||||||
def test_named_executable_creates_stable_role_symlink(
|
def test_named_executable_creates_stable_role_symlink(
|
||||||
monkeypatch: pytest.MonkeyPatch,
|
|
||||||
tmp_path: Path,
|
tmp_path: Path,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
if os.name == "nt":
|
||||||
|
pytest.skip("POSIX symlink naming is not used on Windows")
|
||||||
executable = tmp_path / "bun"
|
executable = tmp_path / "bun"
|
||||||
executable.write_text("runtime", encoding="utf-8")
|
executable.write_text("runtime", encoding="utf-8")
|
||||||
monkeypatch.setattr("nanobot.cli.process_identity.os.name", "posix")
|
|
||||||
|
|
||||||
first = Path(
|
first = Path(
|
||||||
named_executable(executable.as_posix(), name="nanobot-tui", directory=tmp_path / "run")
|
named_executable(executable.as_posix(), name="nanobot-tui", directory=tmp_path / "run")
|
||||||
|
|||||||
Reference in New Issue
Block a user