| |
| import asyncio |
| import os |
| import sys |
| import logging |
|
|
| |
| sys.path.append(os.getcwd()) |
| os.environ["SENDGRID_API_KEY"] = "SG.mock_key" |
|
|
| from report_aggregator import report_aggregator |
| from report_generator import report_generator |
| from report_delivery_service import report_delivery_service |
| from firebase_manager import firebase_manager |
| from unittest.mock import MagicMock |
|
|
| |
| firebase_manager.initialize = MagicMock() |
| firebase_manager.get_db = MagicMock(return_value=None) |
|
|
| async def generate_sample_report(uid, student_name, recipient_email): |
| print(f"📄 Generating Sample Report for {student_name} ({uid})...") |
| |
| |
| |
| summary = report_aggregator.get_summary_for_period(uid) |
| |
| if not summary or summary["total_interactions"] == 0: |
| print("⚠️ No real data found. Using MOCK data for visibility.") |
| summary = { |
| "total_interactions": 15, |
| "completed_challenges": 4, |
| "avg_mastery": { |
| "אלגברה": 85.5, |
| "גיאומטריה": 92.0, |
| "פונקציות": 78.2, |
| "טריגונומטריה": 65.0 |
| }, |
| "teacher_notes": ["התלמיד שולט היטב בפתרון משוואות.", "יש לשים לב לדיוק בשרטוט גיאומטרי."] |
| } |
|
|
| |
| print("🧠 Generating AI Summary...") |
| ai_summary = await report_generator.generate_ai_summary(summary, student_name) |
| print(f"Summary: {ai_summary}") |
|
|
| |
| print("📊 Generating Visuals...") |
| chart_url = report_generator.generate_radar_chart_url(summary["avg_mastery"]) |
| |
| |
| print("🎨 Rendering Template...") |
| template_data = { |
| "student_name": student_name, |
| "total_interactions": summary["total_interactions"], |
| "completed_challenges": summary["completed_challenges"], |
| "avg_mastery_pct": sum(summary["avg_mastery"].values()) / len(summary["avg_mastery"]), |
| "ai_summary": ai_summary, |
| "chart_url": chart_url |
| } |
| |
| html_content = report_delivery_service.render_html('report_template.html', template_data) |
| |
| |
| pdf_path = f"/tmp/BuddyMath_Report_{student_name}.pdf" |
| print("🖨️ Generating PDF...") |
| success = report_delivery_service.generate_pdf(html_content, pdf_path) |
| |
| if success: |
| print(f"✅ PDF Generated at: {pdf_path}") |
| else: |
| print("⚠️ PDF generation failed (likely xhtml2pdf missing). Saved as HTML.") |
| pdf_path = pdf_path.replace('.pdf', '.html') |
|
|
| |
| print(f"📧 Sending Email to {recipient_email}...") |
| subject = f"איך עבר השבוע של {student_name} ב-Buddy-Math? ✏️" |
| |
| |
| email_success = report_delivery_service.send_email_with_attachment( |
| recipient_email, subject, ai_summary, pdf_path, student_name |
| ) |
| |
| if email_success: |
| print("✅ Email sent successfully!") |
| else: |
| print("❌ Email delivery failed (verify SENDGRID_API_KEY).") |
|
|
| if __name__ == "__main__": |
| |
| try: |
| firebase_manager.initialize() |
| except Exception as e: |
| print(f"⚠️ Firebase initialization failed: {e}. Proceeding with mock data.") |
| |
| dotan_uid = "dotan_admin_uid" |
| asyncio.run(generate_sample_report(dotan_uid, "דותן", "dotan@example.com")) |
|
|