|
|
import gradio as gr |
|
|
import tempfile |
|
|
import uuid |
|
|
from gradio_client import Client, handle_file |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SPACE_A = "MonishRaman/Hackathon_certificate_api" |
|
|
|
|
|
|
|
|
client = Client(SPACE_A) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CERT_HTML = """ |
|
|
<!DOCTYPE html> |
|
|
<html> |
|
|
<body style=" |
|
|
width:2000px; |
|
|
height:1414px; |
|
|
margin:0; |
|
|
display:flex; |
|
|
justify-content:center; |
|
|
align-items:center; |
|
|
background:linear-gradient(135deg,#FF6B35,#FF8C00); |
|
|
font-family:Arial;"> |
|
|
<div style="background:white;padding:80px;text-align:center;width:85%;height:80%;"> |
|
|
<h1>Certificate of Participation</h1> |
|
|
<h2>{name}</h2> |
|
|
<p>Project: {project}</p> |
|
|
<p>Track: {track}</p> |
|
|
<p>Certificate ID: {cid}</p> |
|
|
</div> |
|
|
</body> |
|
|
</html> |
|
|
""" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def generate_certificate(name, project, track): |
|
|
if not name or not project or not track: |
|
|
return None, "β All fields are required" |
|
|
|
|
|
cert_id = f"CERT-{uuid.uuid4().hex[:8].upper()}" |
|
|
|
|
|
html = CERT_HTML.format( |
|
|
name=name.strip(), |
|
|
project=project.strip(), |
|
|
track=track.strip(), |
|
|
cid=cert_id |
|
|
) |
|
|
|
|
|
|
|
|
with tempfile.NamedTemporaryFile(delete=False, suffix=".html", mode="w", encoding="utf-8") as f: |
|
|
f.write(html) |
|
|
html_path = f.name |
|
|
|
|
|
try: |
|
|
|
|
|
result = client.predict( |
|
|
handle_file(html_path), |
|
|
api_name="/predict" |
|
|
) |
|
|
|
|
|
|
|
|
if isinstance(result, list): |
|
|
result = result[0] |
|
|
|
|
|
if not result: |
|
|
return None, "β No image returned from Space A" |
|
|
|
|
|
return result, f"β
Certificate generated successfully\nID: `{cert_id}`" |
|
|
|
|
|
except Exception as e: |
|
|
return None, f"β Error: {str(e)}" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with gr.Blocks(title="Hackathon Certificate Generator") as demo: |
|
|
gr.Markdown("# π Hackathon Certificate Generator") |
|
|
|
|
|
name = gr.Textbox(label="Participant Name") |
|
|
project = gr.Textbox(label="Project Name") |
|
|
track = gr.Textbox(label="Track") |
|
|
|
|
|
generate_btn = gr.Button("Generate Certificate", variant="primary") |
|
|
|
|
|
output = gr.File(label="Download Certificate") |
|
|
status = gr.Markdown() |
|
|
|
|
|
generate_btn.click( |
|
|
fn=generate_certificate, |
|
|
inputs=[name, project, track], |
|
|
outputs=[output, status] |
|
|
) |
|
|
|
|
|
demo.launch() |
|
|
|