import gradio as gr import os import json from datetime import datetime # Load domain descriptions def load_domain_descriptions(): try: with open('domain_descriptions.json', 'r') as f: return json.load(f) except FileNotFoundError: return {} # Load projects data def load_projects(): try: with open('projects.json', 'r') as f: return json.load(f) except FileNotFoundError: return {} # Load students data def load_students(): try: with open('students.json', 'r') as f: return json.load(f) except FileNotFoundError: return [] def get_domain_stats(): projects = load_projects() students = load_students() domains = load_domain_descriptions() total_projects = len(projects) total_students = len(students) total_domains = len(domains) return f""" ### Project Management System Statistics - **Total Domains:** {total_domains} - **Total Projects:** {total_projects} - **Total Students:** {total_students} """ def get_domain_list(): domains = load_domain_descriptions() projects = load_projects() domain_list = [] for domain_id, description in domains.items(): domain_projects = [p for p in projects.values() if p.get('domain') == domain_id] project_count = len(domain_projects) domain_list.append(f""" ### Domain {domain_id} {description} **Projects:** {project_count} """) return "\n".join(domain_list) def get_project_list(): projects = load_projects() students = load_students() project_list = [] for project_id, project in projects.items(): assigned_students = [s for s in students if project_id in s.get('projects', [])] student_names = ", ".join([s['name'] for s in assigned_students]) project_list.append(f""" ### {project['name']} **Domain:** {project['domain']} **Type:** {'Hardware' if project.get('type') == 'H' else 'Software'} **Description:** {project.get('description', 'No description available')} **Assigned Students:** {student_names if student_names else 'None'} """) return "\n".join(project_list) def get_student_list(): students = load_students() projects = load_projects() student_list = [] for student in students: student_projects = [projects.get(pid) for pid in student.get('projects', [])] project_names = ", ".join([p['name'] for p in student_projects if p]) student_list.append(f""" ### {student['name']} **ID:** {student['id']} **Email:** {student['email']} **Projects:** {project_names if project_names else 'None'} """) return "\n".join(student_list) # Create Gradio interface with gr.Blocks() as demo: gr.Markdown("# Project Management System") with gr.Tab("Home"): gr.Markdown(get_domain_stats()) with gr.Tab("Domains"): gr.Markdown(get_domain_list()) with gr.Tab("Projects"): gr.Markdown(get_project_list()) with gr.Tab("Students"): gr.Markdown(get_student_list()) # Launch the interface if __name__ == "__main__": demo.launch(server_name="0.0.0.0", server_port=7860)