Spaces:
Sleeping
Sleeping
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) | |