File size: 4,580 Bytes
2b9c678 d3a7824 2b9c678 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | """
Progress management for SkillSync
"""
import json
import os
from datetime import datetime
class ProgressManager:
"""Manages user progress and submissions"""
def __init__(self):
self.progress_file = "data/user_data/progress.json"
self.progress = self.load_progress()
def load_progress(self):
"""Load progress from file"""
try:
if os.path.exists(self.progress_file):
with open(self.progress_file, 'r') as f:
return json.load(f)
except Exception as e:
print(f"Error loading progress: {e}")
return {
"completed_lessons": {},
"quiz_scores": {},
"assignment_submissions": {},
"capstone_submitted": False,
"capstone_details": {},
"last_accessed": None
}
def save_progress(self):
"""Save progress to file"""
try:
os.makedirs(os.path.dirname(self.progress_file), exist_ok=True)
self.progress["last_accessed"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open(self.progress_file, 'w') as f:
json.dump(self.progress, f, indent=2)
return True
except Exception as e:
print(f"Error saving progress: {e}")
return False
def get_completed_lessons(self, module_id):
"""Get list of completed lesson IDs for a module"""
return self.progress["completed_lessons"].get(str(module_id), [])
def get_total_completed(self):
"""Get total number of completed lessons"""
return sum(len(lessons) for lessons in self.progress["completed_lessons"].values())
def mark_lesson_complete(self, module_id, lesson_id):
"""Mark a lesson as complete"""
module_key = str(module_id)
if module_key not in self.progress["completed_lessons"]:
self.progress["completed_lessons"][module_key] = []
if lesson_id not in self.progress["completed_lessons"][module_key]:
self.progress["completed_lessons"][module_key].append(lesson_id)
self.save_progress()
return True
return False
def save_quiz_score(self, module_id, score):
"""Save quiz score for a module"""
self.progress["quiz_scores"][str(module_id)] = {
"score": score,
"date": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
self.save_progress()
return True
def get_quiz_score(self, module_id):
"""Get quiz score for a module"""
score_data = self.progress["quiz_scores"].get(str(module_id), {})
return score_data.get("score", 0)
def get_quizzes_passed(self, passing_score=80):
"""Get number of quizzes passed"""
return sum(
1 for score_data in self.progress["quiz_scores"].values()
if score_data.get("score", 0) >= passing_score
)
def save_assignment_submission(self, module_id, submission_data):
"""Save assignment submission"""
module_key = str(module_id)
if module_key not in self.progress["assignment_submissions"]:
self.progress["assignment_submissions"][module_key] = []
submission_data["submitted_at"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
self.progress["assignment_submissions"][module_key].append(submission_data)
self.save_progress()
return True
def submit_capstone(self, title, description, url, file):
"""Submit capstone project"""
if not title or not description:
return False, "Title and description are required"
self.progress["capstone_submitted"] = True
self.progress["capstone_details"] = {
"title": title,
"description": description,
"url": url or "",
"submitted_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
}
self.save_progress()
return True, "Capstone submitted successfully"
def get_overall_progress(self, total_lessons=25):
"""Calculate overall course progress"""
completed = self.get_total_completed()
return {
"total_lessons": total_lessons,
"completed_lessons": completed,
"percentage": int((completed / total_lessons) * 100) if total_lessons > 0 else 0,
"quizzes_passed": self.get_quizzes_passed(),
"capstone_submitted": self.progress.get("capstone_submitted", False)
}
|