Spaces:
Sleeping
Sleeping
| import os | |
| import requests | |
| import json | |
| from pathlib import Path | |
| from dotenv import load_dotenv | |
| import random | |
| # Load environment variables | |
| load_dotenv() | |
| # API endpoint for incident classification | |
| API_URL = "http://localhost:8000/api/incidents/classify" | |
| def get_token(): | |
| """Get a JWT token by authenticating with the API""" | |
| try: | |
| login_url = "http://localhost:8000/api/auth/login" | |
| login_data = { | |
| "email": "testuser@example.com", | |
| "password": "Password123!" | |
| } | |
| response = requests.post(login_url, data=json.dumps(login_data), | |
| headers={"Content-Type": "application/json"}) | |
| if response.status_code == 200: | |
| token = response.json().get("access_token") | |
| print(f"Authentication successful. Token: {token[:15]}...") | |
| return token | |
| else: | |
| print(f"Authentication failed with status code {response.status_code}") | |
| print(response.text) | |
| return None | |
| except Exception as e: | |
| print(f"Error getting token: {e}") | |
| return None | |
| def create_test_image(): | |
| """Create a test image file - we'll use a .jpg extension but with text content for testing""" | |
| # Create a directory for test files if it doesn't exist | |
| test_dir = Path("test_files") | |
| test_dir.mkdir(exist_ok=True) | |
| # Use a .jpg extension to make sure Cloudinary tries to process it properly | |
| test_image_path = test_dir / f"test_image_{random.randint(1000, 9999)}.jpg" | |
| # Write some content to the file | |
| with open(test_image_path, "w") as f: | |
| f.write("This is a fake image file for testing Cloudinary uploads") | |
| print(f"Created test file at {test_image_path}") | |
| return test_image_path | |
| def report_incident_with_image(): | |
| """Report an incident with an image via the API""" | |
| # Create a test image | |
| image_path = create_test_image() | |
| # Get a token | |
| token = get_token() | |
| if not token: | |
| print("No token available, cannot proceed with test") | |
| return False | |
| try: | |
| # Prepare the form data | |
| form_data = { | |
| "description": "Testing Cloudinary integration with improved logging", | |
| "name": "Cloudinary Test", | |
| "latitude": "37.7749", | |
| "longitude": "-122.4194" | |
| } | |
| # Prepare the file | |
| with open(image_path, "rb") as image_file: | |
| files = {"image": (image_path.name, image_file, "image/jpeg")} | |
| # Make the API request | |
| print(f"Sending request to {API_URL}") | |
| response = requests.post( | |
| API_URL, | |
| data=form_data, | |
| files=files, | |
| headers={"Authorization": f"Bearer {token}"} | |
| ) | |
| # Process the response | |
| if response.status_code == 200: | |
| print("Incident report successful!") | |
| print(f"Response: {response.json()}") | |
| # Get the incident ID from the response | |
| incident_id = response.json().get("incident_id") | |
| print(f"Created incident with ID: {incident_id}") | |
| # Now check the incident details to see if Cloudinary URL was used | |
| if incident_id: | |
| return check_incident_image(token, incident_id) | |
| return True | |
| else: | |
| print(f"API request failed with status code {response.status_code}") | |
| print(f"Response: {response.text}") | |
| return False | |
| except Exception as e: | |
| print(f"Error testing incident report API: {e}") | |
| return False | |
| finally: | |
| # Clean up test image | |
| try: | |
| if image_path.exists(): | |
| image_path.unlink() | |
| print(f"Removed test file: {image_path}") | |
| except Exception as e: | |
| print(f"Error cleaning up test file: {e}") | |
| def check_incident_image(token, incident_id): | |
| """Check if the incident has a Cloudinary image URL""" | |
| try: | |
| # Get the list of incidents | |
| list_url = "http://localhost:8000/api/incidents/list" | |
| print(f"Fetching incidents to check for Cloudinary URL...") | |
| response = requests.get( | |
| list_url, | |
| headers={"Authorization": f"Bearer {token}"} | |
| ) | |
| if response.status_code == 200: | |
| incidents = response.json().get("incidents", []) | |
| # Find our incident | |
| for incident in incidents: | |
| if incident.get("id") == incident_id: | |
| image_path = incident.get("image_path") | |
| print(f"Found incident. Image path: {image_path}") | |
| if image_path and "cloudinary.com" in image_path: | |
| print("✅ SUCCESS: Image was uploaded to Cloudinary!") | |
| return True | |
| else: | |
| print("❌ FAILED: Image was not uploaded to Cloudinary") | |
| return False | |
| print(f"Couldn't find incident with ID: {incident_id}") | |
| return False | |
| else: | |
| print(f"Failed to fetch incidents list: {response.status_code}") | |
| print(response.text) | |
| return False | |
| except Exception as e: | |
| print(f"Error checking incident: {e}") | |
| return False | |
| if __name__ == "__main__": | |
| print("Testing Marine Guard incident reporting with Cloudinary integration") | |
| success = report_incident_with_image() | |
| print(f"Test {'PASSED' if success else 'FAILED'}") |