Files
graphify/tests/test_backend_extras.py
Safi 250834a0c4 add anthropic extra and fix backend-missing hints for uv tool installs
uv tool install graphifyy runs graphify in an isolated venv, so when a backend
needs anthropic/openai/boto3 the old 'Run: pip install anthropic' advice never
reached it. Worse, claude was the only backend with no [extra] at all, so a user
with ANTHROPIC_API_KEY set could not satisfy it without --with anthropic.

Add an anthropic optional extra (and include it in [all]), and replace the
package-missing ImportError messages with a shared _backend_pkg_hint that points
at 'uv tool install graphifyy[<extra>] --force' first, then the pip/venv path.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 00:08:03 +01:00

42 lines
1.4 KiB
Python

"""The claude backend must be installable via an extra, and the missing-package
message must point uv-tool users at the right command.
Friction this guards: `uv tool install graphifyy` puts graphify in an isolated
venv. A user with ANTHROPIC_API_KEY set then hit "anthropic package required"
with no extra to satisfy it (claude was the only backend with no `[extra]`), and
the message said `pip install anthropic`, which does not reach a uv tool venv.
"""
from pathlib import Path
from graphify.llm import _backend_pkg_hint
try:
import tomllib
except ModuleNotFoundError: # Python 3.10
import tomli as tomllib # type: ignore[no-redef]
PYPROJECT = Path(__file__).resolve().parent.parent / "pyproject.toml"
def _extras():
data = tomllib.loads(PYPROJECT.read_text(encoding="utf-8"))
return data["project"]["optional-dependencies"]
def test_anthropic_extra_exists():
extras = _extras()
assert "anthropic" in extras, "claude backend needs a [anthropic] extra"
assert any("anthropic" in dep for dep in extras["anthropic"])
def test_anthropic_in_all_extra():
extras = _extras()
assert any("anthropic" in dep for dep in extras["all"]), "[all] must include anthropic"
def test_backend_pkg_hint_points_at_uv_tool_and_extra():
msg = _backend_pkg_hint("anthropic", "anthropic")
assert "uv tool install" in msg
assert 'graphifyy[anthropic]' in msg
assert "pip install anthropic" in msg # pip/venv fallback still mentioned