jutor_write / assignment_service.py
youngtsai's picture
class AssignmentService:
309c78e
raw
history blame
3.23 kB
import uuid
import json
import datetime
import gradio as gr
from datetime import datetime
class AssignmentService:
def __init__(self, gcs_service):
self.bucket_name = "ai_assignment_submission"
self.gcs_service = gcs_service
def create_assignment_id(self):
while True:
assignment_id = "assign_" + str(uuid.uuid4())
file_name = f"assignments/{assignment_id}.json"
if not self.gcs_service.check_file_exists(self.bucket_name, file_name):
return assignment_id
def create_assignment(self, user_data, assignment_type, metadata):
assignment_id = self.create_assignment_id()
timestamp_now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
new_assignment = {
"assignment_id": assignment_id,
"assigner_data": user_data,
"assignment_type": assignment_type,
"metadata": metadata,
"submission_ids": [],
"timestamp": timestamp_now
}
self.save_assignment_to_gcs(new_assignment)
self.save_user_assignment_to_gcs(user_data, assignment_id)
return assignment_id
def save_assignment_to_gcs(self, assignment):
file_name = f"assignments/{assignment['assignment_id']}.json"
self.gcs_service.upload_json_string(self.bucket_name, file_name, json.dumps(assignment))
def save_user_assignment_to_gcs(self, user_id, assignment_id):
user_assignments = self.get_user_assignments(user_id)
assignment_data = self.get_assignment(assignment_id)
user_assignments[assignment_id] = {
"assignment_name": assignment_data["metadata"]["topic"],
"assignment_type": assignment_data["assignment_type"],
"timestamp": assignment_data["timestamp"]
}
self.gcs_service.upload_json_string(self.bucket_name, f"users/{user_id}/assignments.json", json.dumps(user_assignments))
def get_assignment(self, assignment_id):
try:
file_name = f"assignments/{assignment_id}.json"
assignment_json = self.gcs_service.download_as_string(self.bucket_name, file_name)
assignment_data = json.loads(assignment_json)
except Exception as e:
print(f"Error: {e}")
return "無效的作業 ID"
return assignment_data
def get_user_assignments(self, user_id):
try:
user_assignments_json = self.gcs_service.download_as_string(self.bucket_name, f"users/{user_id}/assignments.json")
user_assignments = json.loads(user_assignments_json)
except Exception as e:
print(f"Error: {e}")
user_assignments = {}
return user_assignments
def update_assignment_list(self, assigner_data):
choices = []
user_assignments = self.get_user_assignments(assigner_data)
for assignment_id in user_assignments.keys():
assignment_data = self.get_assignment(assignment_id)
metadata = assignment_data.get("metadata", {})
topic = metadata.get("topic", "未命名作业")
choice = (topic, assignment_id)
choices.append(choice)
return gr.update(choices=choices)