ocr-omr-backend / supabase_handler.py
AswinMathew's picture
Deploy OCR/OMR backend to HF Spaces
b8548e4 verified
import os
import uuid
from datetime import datetime
from supabase import create_client, Client
from dotenv import load_dotenv
load_dotenv()
class SupabaseHandler:
def __init__(self):
url: str = os.getenv("SUPABASE_URL")
key: str = os.getenv("SUPABASE_ANON_KEY")
if not url or not key:
raise ValueError("SUPABASE_URL and SUPABASE_ANON_KEY must be set in environment variables")
self.supabase: Client = create_client(url, key)
def store_evaluation_result(self, teacher_email, evaluation_data):
"""
Store evaluation result in Supabase with a unique key
Returns the unique key for retrieval
"""
try:
# Generate unique key
unique_key = str(uuid.uuid4())
# Prepare data for storage
storage_data = {
"unique_key": unique_key,
"teacher_email": teacher_email,
"evaluation_data": evaluation_data,
"created_at": datetime.utcnow().isoformat(),
"total_students": evaluation_data.get("total_students", 0)
}
# Insert into Supabase
result = self.supabase.table("evaluation_results").insert(storage_data).execute()
if result.data:
print(f"Successfully stored evaluation result with key: {unique_key}")
return unique_key
else:
print("Failed to store evaluation result")
return None
except Exception as e:
print(f"Error storing evaluation result: {str(e)}")
return None
def get_evaluation_result(self, unique_key):
"""
Retrieve evaluation result by unique key
"""
try:
result = self.supabase.table("evaluation_results").select("*").eq("unique_key", unique_key).execute()
if result.data and len(result.data) > 0:
return result.data[0]
else:
return None
except Exception as e:
print(f"Error retrieving evaluation result: {str(e)}")
return None
def get_teacher_evaluations(self, teacher_email):
"""
Get all evaluation results for a specific teacher
"""
try:
result = self.supabase.table("evaluation_results").select("unique_key", "created_at", "total_students").eq("teacher_email", teacher_email).order("created_at", desc=True).execute()
if result.data:
return result.data
else:
return []
except Exception as e:
print(f"Error retrieving teacher evaluations: {str(e)}")
return []