fix: honour explicit YouTools api_key, expose ydc alias, tighten missing-key test

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
MervinPraisonandClaude Opus 5.5 committed 2026-10-31 18:21:52 +00:00
1 parent 072585870e
commit 0fac8a0aa5
2 files changed
+34 -31

No files matched your search

+7 -24
View File
@@ -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"]
+27 -7
View File
@@ -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