ThomasSimonini's picture
Update app.py
c8ac78a verified
raw
history blame
2.46 kB
import gradio as gr
from datasets import load_dataset, Dataset
from datetime import datetime
import io
import os
# Load the datasets
SCORES_DATASET = "agents-course/unit4-students-scores"
CERTIFICATES_DATASET = "agents-course/course-certificates-of-excellence"
THRESOLD_SCORE = 45
# Check the score based on username
def check_user_score(username):
score_data = load_dataset(SCORES_DATASET, split="train", download_mode="force_redownload")
matches = [row for row in score_data if row["username"] == username]
return matches[0] if matches else None
# Check if this user already generated a certificate
def has_certificate_entry(username):
cert_data = load_dataset(CERTIFICATES_DATASET, split="train", download_mode="force_redownload")
return any(row["username"] == username for row in cert_data)
def add_certificate_entry(username, name):
# Create a new entry
new_entry = {
"username": username,
"name": name,
"date": datetime.now().strftime("%Y-%m-%d"),
}
# Download the dataset, append and push
ds = load_dataset(CERTIFICATES_DATASET, split="train")
updated = ds.add_item(new_entry)
updated.push_to_hub(CERTIFICATES_DATASET)
def generate_certificate(name, score):
pass
def handle_certificate(name, request: gr.Request):
username = request.username
if not username:
return "You must be logged in with your Hugging Face account.", None
user_score = check_user_score(username)
if not user_score:
return "You need to complete Unit 4 first.", None
score = user_score["score"]
if score < THRESOLD_SCORE:
return f"Your score is {score}. You need at least {THRESOLD_SCORE} to pass.", None
# Passed: check if already in certificate dataset
if not has_certificate_entry(username):
add_certificate_entry(username, name)
certificate = generate_certificate(name, score)
return "Congratulations! Here's your certificate:", certificate
with gr.Blocks(auth=True) as demo:
gr.Markdown("# 🎓 Unit 4 Certificate Generator")
with gr.Row():
name_input = gr.Text(label="Enter your name")
generate_btn = gr.Button("Get my certificate")
output_text = gr.Textbox(label="Result")
cert_file = gr.File(label="Your Certificate", file_types=[".pdf"])
generate_btn.click(
fn=handle_certificate,
inputs=[name_input],
outputs=[output_text, cert_file]
)
demo.launch()