|
|
""" |
|
|
test_news_tools.py |
|
|
Test for news and official source tools (no social media sessions required) |
|
|
""" |
|
|
import sys |
|
|
import os |
|
|
import io |
|
|
import json |
|
|
|
|
|
|
|
|
if sys.platform == 'win32': |
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace') |
|
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) |
|
|
|
|
|
print("="*60) |
|
|
print("[TEST] NEWS & OFFICIAL SOURCE TOOLS") |
|
|
print("="*60) |
|
|
|
|
|
try: |
|
|
from src.utils.tool_factory import create_tool_set |
|
|
print("[OK] Tool factory imported") |
|
|
tools = create_tool_set(include_profile_scrapers=False) |
|
|
print("[OK] ToolSet created") |
|
|
except Exception as e: |
|
|
print(f"[FAIL] Could not create ToolSet: {e}") |
|
|
sys.exit(1) |
|
|
|
|
|
|
|
|
print("\n[1] Testing scrape_local_news...") |
|
|
try: |
|
|
local_news = tools.get("scrape_local_news") |
|
|
if local_news: |
|
|
result = local_news.invoke({"keywords": ["sri lanka"], "max_articles": 3}) |
|
|
parsed = json.loads(result) if isinstance(result, str) else result |
|
|
if "error" in parsed: |
|
|
print(f"[WARN] Local News returned error: {parsed['error']}") |
|
|
else: |
|
|
count = len(parsed.get('results', [])) |
|
|
print(f"[OK] Local News: {count} articles fetched") |
|
|
if count > 0: |
|
|
print(f" Sample: {str(parsed['results'][0])[:150]}...") |
|
|
else: |
|
|
print("[WARN] scrape_local_news not found in ToolSet") |
|
|
except Exception as e: |
|
|
print(f"[FAIL] Local News: {e}") |
|
|
|
|
|
|
|
|
print("\n[2] Testing scrape_cse_stock_data...") |
|
|
try: |
|
|
cse_tool = tools.get("scrape_cse_stock_data") |
|
|
if cse_tool: |
|
|
result = cse_tool.invoke({"symbol": "ASPI", "period": "1d"}) |
|
|
parsed = json.loads(result) if isinstance(result, str) else result |
|
|
if "error" in parsed: |
|
|
print(f"[WARN] CSE Stock returned error: {parsed['error']}") |
|
|
else: |
|
|
print(f"[OK] CSE Stock: {str(parsed)[:200]}...") |
|
|
else: |
|
|
print("[WARN] scrape_cse_stock_data not found in ToolSet") |
|
|
except Exception as e: |
|
|
print(f"[FAIL] CSE Stock: {e}") |
|
|
|
|
|
|
|
|
print("\n[3] Testing scrape_government_gazette...") |
|
|
try: |
|
|
gazette_tool = tools.get("scrape_government_gazette") |
|
|
if gazette_tool: |
|
|
result = gazette_tool.invoke({"keywords": None, "max_items": 3}) |
|
|
parsed = json.loads(result) if isinstance(result, str) else result |
|
|
if "error" in parsed: |
|
|
print(f"[WARN] Gazette returned error: {parsed['error']}") |
|
|
else: |
|
|
count = len(parsed.get('results', [])) |
|
|
print(f"[OK] Gazette: {count} items fetched") |
|
|
else: |
|
|
print("[WARN] scrape_government_gazette not found in ToolSet") |
|
|
except Exception as e: |
|
|
print(f"[FAIL] Gazette: {e}") |
|
|
|
|
|
|
|
|
print("\n[4] Testing scrape_parliament_minutes...") |
|
|
try: |
|
|
parliament_tool = tools.get("scrape_parliament_minutes") |
|
|
if parliament_tool: |
|
|
result = parliament_tool.invoke({"keywords": None, "max_items": 3}) |
|
|
parsed = json.loads(result) if isinstance(result, str) else result |
|
|
if "error" in parsed: |
|
|
print(f"[WARN] Parliament returned error: {parsed['error']}") |
|
|
else: |
|
|
count = len(parsed.get('results', [])) |
|
|
print(f"[OK] Parliament: {count} items fetched") |
|
|
else: |
|
|
print("[WARN] scrape_parliament_minutes not found in ToolSet") |
|
|
except Exception as e: |
|
|
print(f"[FAIL] Parliament: {e}") |
|
|
|
|
|
|
|
|
print("\n[5] Testing scrape_reddit...") |
|
|
try: |
|
|
reddit_tool = tools.get("scrape_reddit") |
|
|
if reddit_tool: |
|
|
result = reddit_tool.invoke({"keywords": ["sri lanka"], "limit": 3}) |
|
|
parsed = json.loads(result) if isinstance(result, str) else result |
|
|
if "error" in parsed: |
|
|
print(f"[WARN] Reddit returned error: {parsed['error']}") |
|
|
else: |
|
|
count = len(parsed.get('results', parsed.get('posts', []))) |
|
|
print(f"[OK] Reddit: {count} posts fetched") |
|
|
else: |
|
|
print("[WARN] scrape_reddit not found in ToolSet") |
|
|
except Exception as e: |
|
|
print(f"[FAIL] Reddit: {e}") |
|
|
|
|
|
print("\n" + "="*60) |
|
|
print("[DONE] News & official source tools test complete") |
|
|
print("="*60) |
|
|
|