Spaces:
Sleeping
Sleeping
| import requests | |
| import pandas as pd | |
| from typing import Dict, List, Optional | |
| import json | |
| class DatabaseConnection: | |
| def __init__(self, base_url: str = "https://database-1-xzm0.onrender.com"): | |
| self.base_url = base_url | |
| self.session = requests.Session() | |
| def get_student_feedback_counts(self) -> pd.DataFrame: | |
| """Fetch student feedback data from the database""" | |
| try: | |
| url = f"{self.base_url}/student_feedback_counts" | |
| response = self.session.get(url, timeout=10) # Add timeout | |
| response.raise_for_status() | |
| data = response.json() | |
| if isinstance(data, list): | |
| return pd.DataFrame(data) | |
| elif isinstance(data, dict) and 'feedback_counts' in data: | |
| # Handle nested structure | |
| feedback_data = data['feedback_counts'] | |
| if isinstance(feedback_data, list): | |
| return pd.DataFrame(feedback_data) | |
| else: | |
| return pd.DataFrame([feedback_data]) | |
| else: | |
| return pd.DataFrame([data]) | |
| except requests.exceptions.Timeout: | |
| print("⚠️ Database request timed out") | |
| return pd.DataFrame() | |
| except requests.exceptions.ConnectionError: | |
| print("⚠️ Could not connect to database") | |
| return pd.DataFrame() | |
| except Exception as e: | |
| print(f"Error fetching data: {e}") | |
| return pd.DataFrame() | |
| def add_feedback(self, course: str, stanine: int, gwa: float, strand: str, | |
| rating: str, hobbies: str) -> bool: | |
| """Add new feedback to the database""" | |
| try: | |
| url = f"{self.base_url}/student_feedback_counts" | |
| data = { | |
| 'course': course, | |
| 'stanine': stanine, | |
| 'gwa': gwa, | |
| 'strand': strand, | |
| 'rating': rating, | |
| 'hobbies': hobbies, | |
| 'count': 1 | |
| } | |
| print(f"Attempting to add feedback: {course}, rating: {rating}") | |
| response = self.session.post(url, json=data, timeout=10) | |
| response.raise_for_status() | |
| result = response.json() | |
| print(f"✅ Feedback added successfully: {result}") | |
| return True | |
| except requests.exceptions.Timeout: | |
| print("⚠️ Database request timed out") | |
| return False | |
| except requests.exceptions.ConnectionError: | |
| print("⚠️ Could not connect to database") | |
| return False | |
| except Exception as e: | |
| print(f"❌ Error adding feedback: {e}") | |
| return False | |
| def update_feedback_count(self, feedback_id: int, count: int) -> bool: | |
| """Update the count for existing feedback""" | |
| try: | |
| url = f"{self.base_url}/student_feedback_counts/{feedback_id}" | |
| data = {"count": count} | |
| response = self.session.put(url, json=data, timeout=10) | |
| response.raise_for_status() | |
| return True | |
| except requests.exceptions.Timeout: | |
| print("⚠️ Database request timed out") | |
| return False | |
| except requests.exceptions.ConnectionError: | |
| print("⚠️ Could not connect to database") | |
| return False | |
| except Exception as e: | |
| print(f"Error updating feedback count: {e}") | |
| return False | |
| def get_available_courses(self) -> List[str]: | |
| """Fetch available courses from the database""" | |
| try: | |
| url = f"{self.base_url}/courses" | |
| response = self.session.get(url, timeout=10) | |
| response.raise_for_status() | |
| data = response.json() | |
| if isinstance(data, list): | |
| # Extract course names from the data | |
| courses = [] | |
| for item in data: | |
| if isinstance(item, dict) and 'name' in item: | |
| courses.append(item['name']) | |
| elif isinstance(item, str): | |
| courses.append(item) | |
| return courses | |
| else: | |
| return [] | |
| except requests.exceptions.Timeout: | |
| print("⚠️ Database request timed out") | |
| return [] | |
| except requests.exceptions.ConnectionError: | |
| print("⚠️ Could not connect to database") | |
| return [] | |
| except Exception as e: | |
| print(f"Error fetching courses: {e}") | |
| return [] | |