chatbot2 / database_connection.py
markobinario's picture
Update database_connection.py
82f1189 verified
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 []