Download tests/test_api.py from HydraBolt/SanadLLM: direct link, hf CLI and curl.
- Browser
- Download file 3.87 kB
-
https://huggingface.co/spaces/HydraBolt/SanadLLM/resolve/main/tests/test_api.py
- Command line
-
hf download hf://spaces/HydraBolt/SanadLLM/tests/test_api.py
-
curl -L -o test_api.py https://huggingface.co/spaces/HydraBolt/SanadLLM/resolve/main/tests/test_api.py
3.87 kB
| #!/usr/bin/env python3 | |
| """ | |
| Test script for SanadCheck API endpoints. | |
| """ | |
| import asyncio | |
| import json | |
| from typing import Dict, Any | |
| import httpx | |
| class SanadCheckTester: | |
| """Test client for SanadCheck API.""" | |
| def __init__(self, base_url: str = "http://localhost:8000"): | |
| self.base_url = base_url | |
| async def test_health_check(self) -> Dict[str, Any]: | |
| """Test the health check endpoint.""" | |
| async with httpx.AsyncClient() as client: | |
| response = await client.get(f"{self.base_url}/api/v1/health") | |
| return { | |
| "status_code": response.status_code, | |
| "response": response.json() | |
| } | |
| async def test_extract_narrators(self) -> Dict[str, Any]: | |
| """Test the narrator extraction endpoint.""" | |
| sample_hadith = """ | |
| حدثنا محمد بن إسماعيل قال حدثنا عبد الله بن موسى قال أخبرنا إسرائيل عن أبي إسحاق عن البراء قال: | |
| قال رسول الله صلى الله عليه وسلم: إذا أتيت مضجعك فتوضأ وضوءك للصلاة ثم اضطجع على شقك الأيمن | |
| """ | |
| payload = {"hadith_text": sample_hadith.strip()} | |
| async with httpx.AsyncClient() as client: | |
| response = await client.post( | |
| f"{self.base_url}/api/v1/extract-narrators", | |
| json=payload, | |
| timeout=30.0 | |
| ) | |
| return { | |
| "status_code": response.status_code, | |
| "response": response.json() if response.status_code == 200 else response.text | |
| } | |
| async def test_analyze_narrator(self) -> Dict[str, Any]: | |
| """Test the narrator analysis endpoint.""" | |
| payload = { | |
| "narrator_name": "عُبَيْدِ اللَّهِ بْنِ أَبِي رَافِعٍ" | |
| } | |
| async with httpx.AsyncClient() as client: | |
| response = await client.post( | |
| f"{self.base_url}/api/v1/analyze-narrator", | |
| json=payload, | |
| timeout=30.0 | |
| ) | |
| return { | |
| "status_code": response.status_code, | |
| "response": response.json() if response.status_code == 200 else response.text | |
| } | |
| async def run_tests(): | |
| """Run all tests.""" | |
| tester = SanadCheckTester() | |
| print("🔍 Testing SanadCheck API") | |
| print("=" * 50) | |
| # Test health check | |
| print("\n1. Testing Health Check...") | |
| health_result = await tester.test_health_check() | |
| print(f"Status: {health_result['status_code']}") | |
| print(f"Response: {json.dumps(health_result['response'], indent=2, ensure_ascii=False)}") | |
| # Test narrator extraction | |
| print("\n2. Testing Narrator Extraction...") | |
| extract_result = await tester.test_extract_narrators() | |
| print(f"Status: {extract_result['status_code']}") | |
| if extract_result['status_code'] == 200: | |
| print(f"Response: {json.dumps(extract_result['response'], indent=2, ensure_ascii=False)}") | |
| else: | |
| print(f"Error: {extract_result['response']}") | |
| # Test narrator analysis | |
| print("\n3. Testing Narrator Analysis...") | |
| analysis_result = await tester.test_analyze_narrator() | |
| print(f"Status: {analysis_result['status_code']}") | |
| if analysis_result['status_code'] == 200: | |
| print(f"Response: {json.dumps(analysis_result['response'], indent=2, ensure_ascii=False)}") | |
| else: | |
| print(f"Error: {analysis_result['response']}") | |
| print("\n" + "=" * 50) | |
| print("✅ Tests completed!") | |
| if __name__ == "__main__": | |
| try: | |
| asyncio.run(run_tests()) | |
| except KeyboardInterrupt: | |
| print("\n❌ Tests interrupted by user") | |
| except Exception as e: | |
| print(f"\n❌ Test failed with error: {e}") | |