Spaces:
Sleeping
Sleeping
""" | |
API client for communicating with the DGaze backend. | |
Similar to the client.ts in the React frontend. | |
""" | |
import requests | |
from typing import Dict, Any, Optional | |
from config.settings import settings | |
class DGazeAPIClient: | |
"""Client for interacting with the DGaze verification API.""" | |
def __init__(self): | |
self.base_url = settings.API_BASE_URL | |
self.verify_endpoint = settings.API_ENDPOINT | |
self.health_endpoint = settings.HEALTH_ENDPOINT | |
def verify_news(self, input_text: str, access_token: Optional[str] = None) -> Dict[str, Any]: | |
""" | |
Send news text to backend for verification. | |
Args: | |
input_text: The news text or URL to verify | |
access_token: Optional JWT token for authenticated requests | |
Returns: | |
Dict containing the verification results | |
Raises: | |
requests.exceptions.RequestException: For API errors | |
""" | |
if not input_text.strip(): | |
raise ValueError("Input text cannot be empty") | |
# Prepare the request payload | |
payload = { | |
"input": input_text, | |
"input_type": "text" | |
} | |
# Prepare headers | |
headers = {"Content-Type": "application/json"} | |
if access_token: | |
headers["Authorization"] = f"Bearer {access_token}" | |
# Make API request to backend | |
response = requests.post( | |
self.verify_endpoint, | |
json=payload, | |
timeout=60, | |
headers=headers | |
) | |
if response.status_code == 401: | |
raise ValueError("Authentication required. Please log in to continue.") | |
elif response.status_code == 403: | |
raise ValueError("Access denied. You don't have permission to perform this action.") | |
elif response.status_code != 200: | |
raise requests.exceptions.HTTPError( | |
f"API Error: Server returned status {response.status_code}" | |
) | |
data = response.json() | |
if data.get("status") != "success": | |
raise ValueError(f"Verification Failed: {data.get('message', 'Unknown error')}") | |
return data | |
def check_health(self) -> bool: | |
""" | |
Check if the backend service is healthy. | |
Returns: | |
True if backend is accessible, False otherwise | |
""" | |
try: | |
response = requests.get(self.health_endpoint, timeout=5) | |
return response.status_code == 200 | |
except requests.exceptions.RequestException: | |
return False | |
# Create a default client instance | |
api_client = DGazeAPIClient() |