#!/usr/bin/env python3 """ Certificate and Badge Generator for AITBC Training Generates: 1. Markdown badges (shields.io style) for completed stages 2. HTML certificates with proper formatting 3. Summary certificate for completing all stages """ import json import os import sys from datetime import datetime, timezone from pathlib import Path CERT_DIR = Path(__file__).parent / ".training_state" / "certificates" BADGE_DIR = Path(__file__).parent / ".training_state" / "badges" HTML_DIR = Path(__file__).parent / ".training_state" / "html_certificates" def ensure_dirs(): """Ensure output directories exist.""" BADGE_DIR.mkdir(parents=True, exist_ok=True) HTML_DIR.mkdir(parents=True, exist_ok=True) def load_certificate(stage_num: int) -> dict: """Load certificate JSON for a stage.""" cert_file = CERT_DIR / f"stage{stage_num}_certificate.json" if not cert_file.exists(): return None with open(cert_file) as f: return json.load(f) def generate_markdown_badge(stage_num: int, cert_data: dict) -> str: """Generate shields.io markdown badge for a stage.""" badge_label = f"Stage {stage_num}" badge_message = "Completed" badge_color = "brightgreen" # URL encode spaces badge_url = f"https://img.shields.io/badge/{badge_label.replace(' ', '%20')}-{badge_message.replace(' ', '%20')}-{badge_color}?style=flat-square" markdown = f"[![Stage {stage_num}]({badge_url})]({CERT_DIR}/stage{stage_num}_certificate.json)" return markdown def generate_html_certificate(stage_num: int, cert_data: dict) -> str: """Generate HTML certificate for a stage.""" stage_name = cert_data.get("stage_name", f"Stage {stage_num}") timestamp = cert_data.get("completion_timestamp", datetime.now(timezone.utc).isoformat()) wallet = cert_data.get("wallet_name", "Unknown") cert_id = cert_data.get("certificate_id", "Unknown") html = f""" Certificate - Stage {stage_num}
🏆 Certificate of Completion
AITBC Agent Training Program
Stage {stage_num}: {stage_name}
Certificate ID: {cert_id}
Completed: {timestamp}
Wallet: {wallet}
Training Program: hermes AITBC Mastery Training
✓ Stage Completed ✓ Hands-On Training ✓ Blockchain Verified
""" return html def generate_summary_certificate(completed_stages: list) -> str: """Generate summary HTML certificate for completing all stages.""" stages_html = "" for stage in sorted(completed_stages): cert = load_certificate(stage) stage_name = cert.get("stage_name", f"Stage {stage}") if cert else f"Stage {stage}" stages_html += f'
Stage {stage}: {stage_name}
\n' html = f""" Mastery Certificate - AITBC Training
🎓 Mastery Certificate
AITBC Agent Training Program
Congratulations! You have completed all {len(completed_stages)} training stages
{stages_html}
""" return html def generate_markdown_summary(completed_stages: list) -> str: """Generate Markdown summary with all badges.""" markdown = "# AITBC Training Certificates\n\n" markdown += f"Completed {len(completed_stages)} / 11 stages\n\n" markdown += "## Badges\n\n" for stage in sorted(completed_stages): cert = load_certificate(stage) if cert: badge = generate_markdown_badge(stage, cert) markdown += f"{badge} " markdown += "\n\n## Stages Completed\n\n" for stage in sorted(completed_stages): cert = load_certificate(stage) if cert: stage_name = cert.get("stage_name", f"Stage {stage}") timestamp = cert.get("completion_timestamp", "Unknown") markdown += f"- **Stage {stage}: {stage_name}** - Completed {timestamp}\n" return markdown def main(): """Main function.""" ensure_dirs() # Find all completed stages completed_stages = [] for i in range(11): # Stages 0-10 cert = load_certificate(i) if cert: completed_stages.append(i) # Generate markdown badge badge_md = generate_markdown_badge(i, cert) badge_file = BADGE_DIR / f"stage{i}_badge.md" with open(badge_file, 'w') as f: f.write(badge_md) # Generate HTML certificate html = generate_html_certificate(i, cert) html_file = HTML_DIR / f"stage{i}_certificate.html" with open(html_file, 'w') as f: f.write(html) print(f"✓ Generated badge and HTML certificate for Stage {i}") # Generate summary certificate if all stages completed if len(completed_stages) == 11: summary_html = generate_summary_certificate(completed_stages) summary_file = HTML_DIR / "mastery_certificate.html" with open(summary_file, 'w') as f: f.write(summary_html) print(f"✓ Generated Mastery Certificate: {summary_file}") # Generate Markdown summary if completed_stages: md_summary = generate_markdown_summary(completed_stages) summary_md_file = BADGE_DIR / "training_summary.md" with open(summary_md_file, 'w') as f: f.write(md_summary) print(f"✓ Generated Markdown summary: {summary_md_file}") print(f"\nTotal completed stages: {len(completed_stages)} / 11") print(f"Badges directory: {BADGE_DIR}") print(f"HTML certificates: {HTML_DIR}") if __name__ == "__main__": main()