mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-30 06:41:51 +00:00
Remove unused imports (F401) and duplicate/shadowed import redefinitions (F811) across the codebase using ruff's safe autofixes. No behavioral changes -- imports only. - ~1400 safe autofixes applied across 644 files (net -1072 lines) - __init__.py re-exports preserved (excluded from F401 removal so public re-export surfaces stay intact) - Re-exports that are imported or monkeypatched by tests but look unused in their defining module are kept with explicit # noqa: F401 (gateway/run.py load_dotenv; run_agent re-exports from agent.message_sanitization, agent.context_compressor, agent.retry_utils, agent.prompt_builder, agent.process_bootstrap, agent.codex_responses_adapter) - Unsafe F841 (unused-variable) fixes deliberately skipped -- those can change behavior when the RHS has side effects - ruff lints remain disabled in pyproject.toml (only PLW1514 is selected); this is a one-time cleanup, not a config change Verification: - python -m compileall: clean - pytest --collect-only: all 27161 tests collect (zero import errors) - core entry points import clean (run_agent, model_tools, cli, toolsets, hermes_state, batch_runner, gateway) - static scan: every name any test imports directly from an edited module still resolves
105 lines
3.7 KiB
Python
105 lines
3.7 KiB
Python
import importlib
|
|
import os
|
|
import sys
|
|
|
|
from hermes_cli.env_loader import load_hermes_dotenv
|
|
|
|
|
|
def test_user_env_overrides_stale_shell_values(tmp_path, monkeypatch):
|
|
home = tmp_path / "hermes"
|
|
home.mkdir()
|
|
env_file = home / ".env"
|
|
env_file.write_text("OPENAI_BASE_URL=https://new.example/v1\n", encoding="utf-8")
|
|
|
|
monkeypatch.setenv("OPENAI_BASE_URL", "https://old.example/v1")
|
|
|
|
loaded = load_hermes_dotenv(hermes_home=home)
|
|
|
|
assert loaded == [env_file]
|
|
assert os.getenv("OPENAI_BASE_URL") == "https://new.example/v1"
|
|
|
|
|
|
def test_project_env_overrides_stale_shell_values_when_user_env_missing(tmp_path, monkeypatch):
|
|
home = tmp_path / "hermes"
|
|
project_env = tmp_path / ".env"
|
|
project_env.write_text("OPENAI_BASE_URL=https://project.example/v1\n", encoding="utf-8")
|
|
|
|
monkeypatch.setenv("OPENAI_BASE_URL", "https://old.example/v1")
|
|
|
|
loaded = load_hermes_dotenv(hermes_home=home, project_env=project_env)
|
|
|
|
assert loaded == [project_env]
|
|
assert os.getenv("OPENAI_BASE_URL") == "https://project.example/v1"
|
|
|
|
|
|
def test_project_env_is_sanitized_before_loading(tmp_path, monkeypatch):
|
|
home = tmp_path / "hermes"
|
|
project_env = tmp_path / ".env"
|
|
project_env.write_text(
|
|
"TELEGRAM_BOT_TOKEN=0123456789:test"
|
|
"ANTHROPIC_API_KEY=sk-ant-test123\n",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
monkeypatch.delenv("TELEGRAM_BOT_TOKEN", raising=False)
|
|
monkeypatch.delenv("ANTHROPIC_API_KEY", raising=False)
|
|
|
|
loaded = load_hermes_dotenv(hermes_home=home, project_env=project_env)
|
|
|
|
assert loaded == [project_env]
|
|
assert os.getenv("TELEGRAM_BOT_TOKEN") == "0123456789:test"
|
|
assert os.getenv("ANTHROPIC_API_KEY") == "sk-ant-test123"
|
|
|
|
|
|
def test_user_env_takes_precedence_over_project_env(tmp_path, monkeypatch):
|
|
home = tmp_path / "hermes"
|
|
home.mkdir()
|
|
user_env = home / ".env"
|
|
project_env = tmp_path / ".env"
|
|
user_env.write_text("OPENAI_BASE_URL=https://user.example/v1\n", encoding="utf-8")
|
|
project_env.write_text("OPENAI_BASE_URL=https://project.example/v1\nOPENAI_API_KEY=project-key\n", encoding="utf-8")
|
|
|
|
monkeypatch.setenv("OPENAI_BASE_URL", "https://old.example/v1")
|
|
monkeypatch.delenv("OPENAI_API_KEY", raising=False)
|
|
|
|
loaded = load_hermes_dotenv(hermes_home=home, project_env=project_env)
|
|
|
|
assert loaded == [user_env, project_env]
|
|
assert os.getenv("OPENAI_BASE_URL") == "https://user.example/v1"
|
|
assert os.getenv("OPENAI_API_KEY") == "project-key"
|
|
|
|
|
|
def test_null_bytes_in_user_env_are_stripped(tmp_path, monkeypatch):
|
|
home = tmp_path / "hermes"
|
|
home.mkdir()
|
|
env_file = home / ".env"
|
|
# Null bytes can be introduced when copy-pasting API keys.
|
|
env_file.write_text("GLM_API_KEY=abc\x00\x00\nOPENAI_API_KEY=sk-123\n", encoding="utf-8")
|
|
|
|
monkeypatch.delenv("GLM_API_KEY", raising=False)
|
|
monkeypatch.delenv("OPENAI_API_KEY", raising=False)
|
|
|
|
loaded = load_hermes_dotenv(hermes_home=home)
|
|
|
|
assert loaded == [env_file]
|
|
assert os.getenv("GLM_API_KEY") == "abc"
|
|
assert os.getenv("OPENAI_API_KEY") == "sk-123"
|
|
|
|
|
|
def test_main_import_applies_user_env_over_shell_values(tmp_path, monkeypatch):
|
|
home = tmp_path / "hermes"
|
|
home.mkdir()
|
|
(home / ".env").write_text(
|
|
"OPENAI_BASE_URL=https://new.example/v1\nHERMES_INFERENCE_PROVIDER=custom\n",
|
|
encoding="utf-8",
|
|
)
|
|
|
|
monkeypatch.setenv("HERMES_HOME", str(home))
|
|
monkeypatch.setenv("OPENAI_BASE_URL", "https://old.example/v1")
|
|
monkeypatch.setenv("HERMES_INFERENCE_PROVIDER", "openrouter")
|
|
|
|
sys.modules.pop("hermes_cli.main", None)
|
|
importlib.import_module("hermes_cli.main")
|
|
|
|
assert os.getenv("OPENAI_BASE_URL") == "https://new.example/v1"
|
|
assert os.getenv("HERMES_INFERENCE_PROVIDER") == "custom"
|