File size: 2,383 Bytes
65a4620 9ad433e 1d9b43f 9ad433e 1d9b43f 9ad433e e9d1eee cd176ed e9d1eee cd176ed f98657b e9d1eee c05e0a4 f98657b c05e0a4 e9d1eee c05e0a4 e9d1eee 0bcddf9 e9d1eee ab2c92a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
import io
import random
from typing import List, Tuple
import aiohttp
import panel as pn
from PIL import Image
from transformers import CLIPModel, CLIPProcessor
pn.extension(design="bootstrap", sizing_mode="stretch_width")
import panel as pn
import pandas as pd
import os
import datetime
import io
from google_sheet import fetch_leaderboard
from google_drive import upload_to_drive
pn.extension()
# File upload widget
file_input = pn.widgets.FileInput(accept='.zip', multiple=False)
# Status message
status = pn.pane.Markdown("")
# Leaderboard display
leaderboard = pn.pane.DataFrame(pd.DataFrame(), width=600)
import tempfile
temp_dir = tempfile.gettempdir()
def submit_file(event):
if file_input.value is None:
status.object = "⚠️ Please upload a .zip file before submitting."
return
try:
# Extract filename
filename = file_input.filename
submission_path = os.path.join(temp_dir, filename)
# Save uploaded content to temp file
with open(submission_path, "wb") as f:
f.write(file_input.value)
# Upload to Google Drive
drive_file_id = upload_to_drive(submission_path, filename)
status.object = f"✅ Uploaded to Google Drive [File ID: {drive_file_id}]"
except Exception as e:
status.object = f"❌ Failed to upload to Google Drive: {e}"
return # Exit early on failure
# Update leaderboard
try:
df = fetch_leaderboard()
if not df.empty:
df_sorted = df.sort_values(by="score", ascending=False)
leaderboard.object = df_sorted
else:
leaderboard.object = pd.DataFrame()
except Exception as e:
status.object += f"\n⚠️ Could not load leaderboard: {e}"
submit_button = pn.widgets.Button(name="Submit", button_type="primary")
submit_button.on_click(submit_file)
# Initial leaderboard load
try:
df = fetch_leaderboard()
if not df.empty:
df_sorted = df.sort_values(by="score", ascending=False)
leaderboard.object = df_sorted
else:
leaderboard.object = pd.DataFrame()
except Exception as e:
status.object += f"\n⚠️ Could not load leaderboard on startup: {e}"
# Layout
app = pn.Column(
"## 🏆 Hackathon Leaderboard",
file_input,
submit_button,
status,
"### Leaderboard",
leaderboard
)
app.servable()
|