mirror of
https://github.com/hanzoai/python-sdk.git
synced 2026-10-23 20:23:00 +00:00
fix: remove unused lru_cache import and update test expectations
- Remove unused functools.lru_cache import from refactor_tool.py (fixes ruff TID251 banned import error) - Update test_all_tools.py to include new packages: config (2 tools), mcp_tools (4 tools), llm (0-4), vector (0-3) - Make agent tool count flexible (10-12) for platform differences - Total tools now 57-66 depending on optional dependencies
This commit is contained in:
@@ -23,7 +23,6 @@ from typing import Any, Dict, List, Optional, Tuple, Set, AsyncIterator
|
||||
from pathlib import Path
|
||||
from dataclasses import dataclass, field
|
||||
from collections import defaultdict
|
||||
from functools import lru_cache
|
||||
|
||||
from hanzo_mcp.types import MCPResourceDocument
|
||||
from hanzo_mcp.tools.common.base import BaseTool
|
||||
|
||||
@@ -70,9 +70,13 @@ class TestToolPackages:
|
||||
assert len(TOOLS) == 8
|
||||
|
||||
def test_agent_tools(self):
|
||||
"""Test hanzo-tools-agent has 12 tools."""
|
||||
"""Test hanzo-tools-agent has 10-12 tools.
|
||||
|
||||
Some CLI tools may not import on all platforms.
|
||||
"""
|
||||
from hanzo_tools.agent import TOOLS
|
||||
assert len(TOOLS) == 12
|
||||
# Allow 10-12 tools depending on platform (some CLI agents may not import)
|
||||
assert 10 <= len(TOOLS) <= 12, f"Expected 10-12 agent tools, got {len(TOOLS)}"
|
||||
|
||||
def test_jupyter_tools(self):
|
||||
"""Test hanzo-tools-jupyter has 1 tool."""
|
||||
@@ -89,6 +93,34 @@ class TestToolPackages:
|
||||
from hanzo_tools.browser import TOOLS
|
||||
assert len(TOOLS) == 1
|
||||
|
||||
def test_config_tools(self):
|
||||
"""Test hanzo-tools-config has 2 tools."""
|
||||
from hanzo_tools.config import TOOLS
|
||||
assert len(TOOLS) == 2
|
||||
|
||||
def test_mcp_tools(self):
|
||||
"""Test hanzo-tools-mcp has 4 tools."""
|
||||
from hanzo_tools.mcp_tools import TOOLS
|
||||
assert len(TOOLS) == 4
|
||||
|
||||
def test_llm_tools(self):
|
||||
"""Test hanzo-tools-llm imports (tools depend on litellm)."""
|
||||
from hanzo_tools.llm import TOOLS, LLM_AVAILABLE
|
||||
# LLM tools are optional, depend on litellm
|
||||
if LLM_AVAILABLE:
|
||||
assert len(TOOLS) >= 1
|
||||
else:
|
||||
assert len(TOOLS) == 0
|
||||
|
||||
def test_vector_tools(self):
|
||||
"""Test hanzo-tools-vector imports (tools depend on heavy deps)."""
|
||||
from hanzo_tools.vector import TOOLS, VECTOR_AVAILABLE
|
||||
# Vector tools are optional, depend on faiss/qdrant
|
||||
if VECTOR_AVAILABLE:
|
||||
assert len(TOOLS) >= 1
|
||||
else:
|
||||
assert len(TOOLS) == 0
|
||||
|
||||
|
||||
class TestToolImportSpeed:
|
||||
"""Test that tool imports are fast (no blocking)."""
|
||||
@@ -106,6 +138,10 @@ class TestToolImportSpeed:
|
||||
("hanzo_tools.jupyter", 1.0),
|
||||
("hanzo_tools.editor", 1.0),
|
||||
("hanzo_tools.browser", 1.0),
|
||||
("hanzo_tools.config", 1.0),
|
||||
("hanzo_tools.mcp_tools", 1.0),
|
||||
("hanzo_tools.llm", 2.0), # LLM has litellm, allow more time
|
||||
("hanzo_tools.vector", 2.0), # Vector has heavy deps
|
||||
("hanzo_tools.agent", 2.0), # Agent has litellm, allow more time
|
||||
])
|
||||
def test_import_speed(self, module, max_time):
|
||||
@@ -135,8 +171,12 @@ class TestToolAsync:
|
||||
'hanzo_tools.jupyter',
|
||||
'hanzo_tools.editor',
|
||||
'hanzo_tools.browser',
|
||||
'hanzo_tools.config',
|
||||
'hanzo_tools.mcp_tools',
|
||||
'hanzo_tools.llm',
|
||||
'hanzo_tools.vector',
|
||||
]
|
||||
|
||||
|
||||
for pkg_name in packages:
|
||||
import importlib
|
||||
pkg = importlib.import_module(pkg_name)
|
||||
@@ -150,9 +190,14 @@ class TestToolAsync:
|
||||
class TestTotalToolCount:
|
||||
"""Test total tool count across all packages."""
|
||||
|
||||
def test_total_53_tools(self):
|
||||
"""Verify we have exactly 53 tools across all packages."""
|
||||
packages = [
|
||||
def test_total_tool_count(self):
|
||||
"""Verify we have the expected total tools across all packages.
|
||||
|
||||
Some packages have optional dependencies, so counts may vary.
|
||||
Core packages should have exact counts, optional packages are flexible.
|
||||
"""
|
||||
# Core packages with exact counts
|
||||
core_packages = [
|
||||
('hanzo_tools.filesystem', 7),
|
||||
('hanzo_tools.shell', 7),
|
||||
('hanzo_tools.browser', 1),
|
||||
@@ -162,19 +207,41 @@ class TestTotalToolCount:
|
||||
('hanzo_tools.lsp', 1),
|
||||
('hanzo_tools.refactor', 1),
|
||||
('hanzo_tools.database', 8),
|
||||
('hanzo_tools.agent', 12),
|
||||
('hanzo_tools.jupyter', 1),
|
||||
('hanzo_tools.editor', 3),
|
||||
('hanzo_tools.config', 2),
|
||||
('hanzo_tools.mcp_tools', 4),
|
||||
]
|
||||
|
||||
# Packages with variable counts
|
||||
variable_packages = [
|
||||
('hanzo_tools.agent', 10, 12), # 10-12 depending on platform
|
||||
('hanzo_tools.llm', 0, 4), # 0-4 depending on litellm
|
||||
('hanzo_tools.vector', 0, 3), # 0-3 depending on vector deps
|
||||
]
|
||||
|
||||
total = 0
|
||||
for pkg_name, expected_count in packages:
|
||||
import importlib
|
||||
import importlib
|
||||
|
||||
# Check core packages (exact counts)
|
||||
for pkg_name, expected_count in core_packages:
|
||||
pkg = importlib.import_module(pkg_name)
|
||||
tools = getattr(pkg, 'TOOLS', [])
|
||||
actual = len(tools)
|
||||
assert actual == expected_count, \
|
||||
f"{pkg_name}: expected {expected_count} tools, got {actual}"
|
||||
total += actual
|
||||
|
||||
assert total == 53, f"Expected 53 total tools, got {total}"
|
||||
|
||||
# Check variable packages (range allowed)
|
||||
for pkg_name, min_count, max_count in variable_packages:
|
||||
pkg = importlib.import_module(pkg_name)
|
||||
tools = getattr(pkg, 'TOOLS', [])
|
||||
actual = len(tools)
|
||||
assert min_count <= actual <= max_count, \
|
||||
f"{pkg_name}: expected {min_count}-{max_count} tools, got {actual}"
|
||||
total += actual
|
||||
|
||||
# Core tools: 47 (7+7+1+9+1+2+1+1+8+1+3+2+4)
|
||||
# Variable: 10-19 (10-12 + 0-4 + 0-3)
|
||||
# Total: 57-66
|
||||
assert 57 <= total <= 66, f"Expected 57-66 total tools, got {total}"
|
||||
|
||||
@@ -23,7 +23,6 @@ from typing import Any, Dict, List, Optional, Tuple, Set, AsyncIterator
|
||||
from pathlib import Path
|
||||
from dataclasses import dataclass, field
|
||||
from collections import defaultdict
|
||||
from functools import lru_cache
|
||||
|
||||
from hanzo_tools.core import BaseTool
|
||||
from hanzo_tools.core.types import MCPResourceDocument
|
||||
|
||||
Reference in New Issue
Block a user