From cef971fdab7b9e6d15c9d7b35e0824ce17eb4dfb Mon Sep 17 00:00:00 2001 From: Mavis Bot Date: Tue, 4 Aug 2026 21:53:22 +0000 Subject: [PATCH 1/2] fix: replace deprecated datetime.utcnow with timezone-aware alternative in certification --- src/utils/certification.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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", } From f84b7fabcde1c09c5246d9bb9ea2989eb5edc889 Mon Sep 17 00:00:00 2001 From: Mavis Bot Date: Tue, 4 Aug 2026 21:53:40 +0000 Subject: [PATCH 2/2] fix: replace deprecated datetime.utcnow with timezone-aware alternative in code_review --- src/utils/code_review.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/utils/code_review.py b/src/utils/code_review.py index 8138423d..ad4d3f7d 100644 --- a/src/utils/code_review.py +++ b/src/utils/code_review.py @@ -7,7 +7,7 @@ from typing import Dict, List, Optional from enum import Enum -from datetime import datetime +from datetime import datetime, timezone class ReviewStatus(Enum): @@ -100,7 +100,7 @@ def submit_code( "code": code, "language": language, "description": description or "", - "submitted_at": datetime.utcnow().isoformat(), + "submitted_at": datetime.now(timezone.utc).isoformat(), "review_status": ReviewStatus.PENDING.value, "review_count": 0, "metrics": {}, @@ -128,13 +128,13 @@ def start_review( raise ValueError(f"Submission {submission_id} not found") submission = self.submissions[submission_id] - review_id = f"review_{submission_id}_{datetime.utcnow().timestamp()}" + review_id = f"review_{submission_id}_{datetime.now(timezone.utc).timestamp()}" review = { "review_id": review_id, "submission_id": submission_id, "reviewer_id": reviewer_id, - "started_at": datetime.utcnow().isoformat(), + "started_at": datetime.now(timezone.utc).isoformat(), "completed_at": None, "status": ReviewStatus.IN_PROGRESS.value, "overall_score": None, @@ -178,7 +178,7 @@ def add_feedback_comment( "code_snippet": code_snippet, "feedback": feedback, "severity": severity, - "created_at": datetime.utcnow().isoformat(), + "created_at": datetime.now(timezone.utc).isoformat(), } self.feedback_comments[review_id].append(comment) @@ -249,7 +249,7 @@ def complete_review( scores = [s["score"] for s in review["category_scores"].values()] overall_score = sum(scores) / len(scores) if scores else 0 - review["completed_at"] = datetime.utcnow().isoformat() + review["completed_at"] = datetime.now(timezone.utc).isoformat() review["overall_score"] = round(overall_score, 2) review["summary"] = summary review["status"] = (