# Test client for the FastAPI backend import requests import json import time class CodeScannerClient: def __init__(self, base_url="http://localhost:8000"): self.base_url = base_url def health_check(self): # Check if API is running try: response = requests.get(f"{self.base_url}/health") return response.json() except requests.exceptions.ConnectionError: return {"status": "error", "message": "API not reachable"} def analyze_code(self, code: str, mode="combined", detailed=False): # Analyze a single code snippet payload = { "code": code, "analysis_mode": mode, "detailed": detailed } start_time = time.time() response = requests.post( f"{self.base_url}/analyze", json=payload ) response_time = time.time() - start_time if response.status_code == 200: result = response.json() result["response_time"] = response_time return result else: return { "error": f"API error: {response.status_code}", "details": response.text } def analyze_file(self, filepath: str): # Analyze code from a file with open(filepath, 'r') as f: code = f.read() return self.analyze_code(code) def batch_analyze(self, code_list: list, mode="combined"): # Analyze multiple code snippets payload = { "files": code_list, "analysis_mode": mode } response = requests.post( f"{self.base_url}/analyze/batch", json=payload ) if response.status_code == 200: return response.json() else: return {"error": f"API error: {response.status_code}"} def upload_file(self, filepath: str): # Upload and analyze a file with open(filepath, 'rb') as f: files = {'file': (filepath, f, 'text/python')} response = requests.post( f"{self.base_url}/analyze/file", files=files ) if response.status_code == 200: return response.json() else: return {"error": f"Upload error: {response.status_code}"} # Example usage if __name__ == "__main__": client = CodeScannerClient() print("šŸ” Testing API Client") print("="*50) # 1. Health check print("1. Health check:") health = client.health_check() print(f" Status: {health.get('status')}") # 2. Analyze vulnerable code print("\n2. Analyzing vulnerable code:") vulnerable_code = """def get_user(user_id):\n query = f"SELECT * FROM users WHERE id = {user_id}"\n return query""" result = client.analyze_code(vulnerable_code, detailed=True) print(f" Security Score: {result.get('security_score')}") print(f" Issues Found: {result.get('issues_count')}") print(f" Response Time: {result.get('response_time', 0):.3f}s") # 3. Analyze safe code print("\n3. Analyzing safe code:") safe_code = """def get_user(user_id):\n query = "SELECT * FROM users WHERE id = %s"\n return execute_query(query, (user_id,))""" result = client.analyze_code(safe_code) print(f" Security Score: {result.get('security_score')}") print(f" Issues Found: {result.get('issues_count')}") # 4. Batch analysis print("\n4. Testing batch analysis:") batch_codes = [vulnerable_code, safe_code] batch_result = client.batch_analyze(batch_codes) if "results" in batch_result: print(f" Processed {len(batch_result['results'])} files") print(f" Average Score: {batch_result['summary'].get('average_security_score', 0):.1f}") print("\nāœ… API Client Test Complete!") print(f"\nšŸ“š API Documentation available at: http://localhost:8000/docs")