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()