diff --git a/src/utils/adaptive_learning.py b/src/utils/adaptive_learning.py index 86592855..b92c0a75 100644 --- a/src/utils/adaptive_learning.py +++ b/src/utils/adaptive_learning.py @@ -1,7 +1,7 @@ """Adaptive learning paths and personalization system.""" from typing import Dict, List, Optional -from datetime import datetime +from datetime import datetime, timezone class AdaptiveLearningManager: @@ -22,8 +22,8 @@ def create_user_profile( "learning_style": learning_style, "preferred_difficulty": "Beginner", "learning_pace": "Medium", - "created_at": datetime.utcnow().isoformat(), - "updated_at": datetime.utcnow().isoformat(), + "created_at": datetime.now(timezone.utc).isoformat(), + "updated_at": datetime.now(timezone.utc).isoformat(), } self.user_profiles[user_id] = profile return profile @@ -38,7 +38,7 @@ def assess_skill_level(self, user_id: str, skill: str) -> Dict: "skill": skill, "level": "Beginner", "confidence": 0.0, - "assessed_at": datetime.utcnow().isoformat(), + "assessed_at": datetime.now(timezone.utc).isoformat(), } return assessment @@ -80,7 +80,7 @@ def record_progress( "item_id": item_id, "score": score, "time_spent_minutes": time_spent, - "recorded_at": datetime.utcnow().isoformat(), + "recorded_at": datetime.now(timezone.utc).isoformat(), } self.performance_history[user_id].append(record) @@ -109,7 +109,7 @@ def _adapt_path(self, user_id: str): profile["preferred_difficulty"] = "Beginner" profile["learning_pace"] = "Slow" - profile["updated_at"] = datetime.utcnow().isoformat() + profile["updated_at"] = datetime.now(timezone.utc).isoformat() def get_next_recommendation(self, user_id: str) -> Optional[Dict]: """Get next recommended item in adaptive path.""" diff --git a/src/utils/certification.py b/src/utils/certification.py index ea48264b..08e9fdb8 100644 --- a/src/utils/certification.py +++ b/src/utils/certification.py @@ -1,7 +1,7 @@ """Learning outcome assessment and certification system.""" from typing import Dict, List, Optional -from datetime import datetime +from datetime import datetime, timezone import hashlib @@ -28,7 +28,7 @@ def create_assessment( "skill": skill, "difficulty": difficulty, "questions": questions, - "created_at": datetime.utcnow().isoformat(), + "created_at": datetime.now(timezone.utc).isoformat(), "score": None, "passed": False, "completed_at": None, @@ -48,7 +48,7 @@ def submit_assessment( assessment["score"] = score assessment["passed"] = score >= 70 - assessment["completed_at"] = datetime.utcnow().isoformat() + assessment["completed_at"] = datetime.now(timezone.utc).isoformat() if assessment["passed"]: self._issue_certificate(assessment) @@ -77,7 +77,7 @@ def _issue_certificate(self, assessment: Dict): "skill": assessment["skill"], "difficulty": assessment["difficulty"], "score": assessment["score"], - "issued_at": datetime.utcnow().isoformat(), + "issued_at": datetime.now(timezone.utc).isoformat(), "valid_until": None, "verification_code": self._generate_verification_code(cert_id), } @@ -86,7 +86,7 @@ def _issue_certificate(self, assessment: Dict): def _generate_verification_code(self, cert_id: str) -> str: """Generate unique verification code.""" - data = f"{cert_id}{datetime.utcnow().isoformat()}".encode() + data = f"{cert_id}{datetime.now(timezone.utc).isoformat()}".encode() return hashlib.sha256(data).hexdigest()[:16] def issue_digital_badge(self, user_id: str, skill: str, level: str) -> Dict: @@ -97,7 +97,7 @@ def issue_digital_badge(self, user_id: str, skill: str, level: str) -> Dict: "user_id": user_id, "skill": skill, "level": level, - "issued_at": datetime.utcnow().isoformat(), + "issued_at": datetime.now(timezone.utc).isoformat(), "icon_url": f"/badges/{skill.lower()}_{level.lower()}.png", "description": f"{level} {skill} Badge", }