diff --git a/praisonai_tools/tools/youdotcom_tool.py b/praisonai_tools/tools/youdotcom_tool.py index 8c9a76c..22944f1 100644 --- a/praisonai_tools/tools/youdotcom_tool.py +++ b/praisonai_tools/tools/youdotcom_tool.py @@ -29,24 +29,6 @@ import os from importlib import util -def _check_youdotcom_available() -> tuple[bool, Optional[str]]: - """Check if You.com SDK is available and API key is set. - - Returns: - Tuple of (is_available, error_message) - """ - # Check if youdotcom package is installed - if util.find_spec("youdotcom") is None: - return False, "youdotcom package is not installed. Please install it using: pip install youdotcom" - - # Check if API key is set - api_key = os.environ.get("YDC_API_KEY") - if not api_key: - return False, "YDC_API_KEY environment variable is not set. Please set it to use You.com tools." - - return True, None - - class YouTools: """Comprehensive tools for web search and content using You.com API. @@ -82,14 +64,13 @@ class YouTools: def _get_client(self): """Get or create You.com client.""" if self._client is None: - is_available, error = _check_youdotcom_available() - if not is_available: - return None, error - - from youdotcom import You + if util.find_spec("youdotcom") is None: + return None, "youdotcom package is not installed. Please install it using: pip install youdotcom" api_key = self._get_api_key() if not api_key: - return None, "YDC_API_KEY not set" + return None, "YDC_API_KEY environment variable is not set. Please set it to use You.com tools." + + from youdotcom import You self._client = You(api_key_auth=api_key) return self._client, None @@ -499,3 +480,5 @@ def ydc_images( # Alias for simple usage ydc = ydc_search + +__all__ = ["YouTools", "ydc_search", "ydc_contents", "ydc_news", "ydc_images", "ydc"] diff --git a/tests/unit/tools/test_youdotcom_tool.py b/tests/unit/tools/test_youdotcom_tool.py index 5791fa2..f47e798 100644 --- a/tests/unit/tools/test_youdotcom_tool.py +++ b/tests/unit/tools/test_youdotcom_tool.py @@ -12,16 +12,35 @@ from praisonai_tools.tools.youdotcom_tool import ( ) +_FIND_SPEC = "praisonai_tools.tools.youdotcom_tool.util.find_spec" + + def test_missing_api_key_returns_error(monkeypatch): monkeypatch.delenv("YDC_API_KEY", raising=False) - for fn, arg in ( - (ydc_search, "q"), - (ydc_contents, "https://example.com"), - (ydc_news, "q"), - (ydc_images, "q"), + with patch(_FIND_SPEC, return_value=object()): + for fn, arg in ( + (ydc_search, "q"), + (ydc_contents, "https://example.com"), + (ydc_news, "q"), + (ydc_images, "q"), + ): + result = fn(arg) + assert result == { + "error": "YDC_API_KEY environment variable is not set. Please set it to use You.com tools." + } + + +def test_explicit_api_key_used_without_env(monkeypatch): + monkeypatch.delenv("YDC_API_KEY", raising=False) + fake_module = MagicMock() + with patch(_FIND_SPEC, return_value=object()), patch.dict( + "sys.modules", {"youdotcom": fake_module} ): - result = fn(arg) - assert "error" in result + client, error = YouTools(api_key="k")._get_client() + + assert error is None + assert client is fake_module.You.return_value + fake_module.You.assert_called_once_with(api_key_auth="k") def test_ydc_alias(): @@ -59,3 +78,4 @@ def test_discovered_via_package(): assert tools_pkg.YouTools is YouTools assert tools_pkg.ydc_search is ydc_search + assert tools_pkg.ydc is ydc_search