pradyutkrishna123 commited on
Commit
01f2f24
Β·
verified Β·
1 Parent(s): 704500b
Files changed (1) hide show
  1. app.py +112 -0
app.py ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+
4
+ # === Google Sheets ===
5
+ MAIN_SHEET_ID = "1cUBISFNCHqS9Ru_jBlYZgF8vb-e25wq8gC0PoT3cHlg"
6
+ MAIN_SHEET_NAME = "Sheet1"
7
+
8
+ ANNOUNCEMENT_SHEET_ID = "1B-Vhgi0BSi8iKR4_Y5ICOcf5cDd73atzq71wU17cCTs"
9
+ ANNOUNCEMENT_SHEET_NAME = "Sheet1"
10
+
11
+ # === URLs ===
12
+ main_csv_url = f"https://docs.google.com/spreadsheets/d/{MAIN_SHEET_ID}/gviz/tq?tqx=out:csv&sheet={MAIN_SHEET_NAME}"
13
+ announcement_csv_url = f"https://docs.google.com/spreadsheets/d/{ANNOUNCEMENT_SHEET_ID}/gviz/tq?tqx=out:csv&sheet={ANNOUNCEMENT_SHEET_NAME}"
14
+
15
+ # === Password ===
16
+ ADMIN_PASSWORD = "1234" # change this if needed
17
+
18
+
19
+ # === Fetch Functions ===
20
+ def fetch_data():
21
+ try:
22
+ df = pd.read_csv(main_csv_url)
23
+ df = df.head(10)
24
+ return df
25
+ except Exception as e:
26
+ return pd.DataFrame({"Error": [f"Failed to fetch main data: {e}"]})
27
+
28
+
29
+ def fetch_announcements():
30
+ try:
31
+ df = pd.read_csv(announcement_csv_url)
32
+ return df
33
+ except Exception as e:
34
+ return pd.DataFrame({"Error": [f"Failed to fetch announcements: {e}"]})
35
+
36
+
37
+ # === Convert DataFrame to Cards ===
38
+ def df_to_cards(df, page_name="Main"):
39
+ if df.empty:
40
+ return "<p style='color:red;'>No data found.</p>"
41
+ html = "<div style='display:flex;flex-wrap:wrap;gap:10px;justify-content:center;'>"
42
+ for _, row in df.iterrows():
43
+ html += f"""
44
+ <div style='width:300px;background:#ffffff;border-radius:15px;padding:15px;
45
+ box-shadow:0 3px 8px rgba(0,0,0,0.15);font-family:sans-serif;'>
46
+ <h3 style='color:#333;margin-bottom:5px;'>{row.iloc[0]}</h3>
47
+ <p style='margin:4px 0;color:#555;font-size:14px;'><b>Details:</b> {', '.join(map(str, row.values[1:]))}</p>
48
+ </div>
49
+ """
50
+ html += "</div>"
51
+ return html
52
+
53
+
54
+ # === Interface ===
55
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
56
+ # --- HEADER ---
57
+ with gr.Row():
58
+ gr.Markdown("### πŸ”₯ Blaze Dashboard", elem_id="title")
59
+ admin_btn = gr.Button("πŸ‘¨β€πŸ’Ό ADMIN", elem_id="admin_button")
60
+
61
+ # --- MAIN PAGE ---
62
+ with gr.Column(visible=True) as main_page:
63
+ gr.Markdown("### πŸ“Š Main Data")
64
+ main_cards = gr.HTML()
65
+ refresh_btn = gr.Button("πŸ”„ Refresh Data")
66
+
67
+ # --- PASSWORD PAGE ---
68
+ with gr.Column(visible=False) as password_page:
69
+ gr.Markdown("### πŸ” Admin Login")
70
+ password_input = gr.Textbox(label="Enter Password", type="password")
71
+ submit_pass = gr.Button("Submit")
72
+
73
+ # --- ADMIN PAGE ---
74
+ with gr.Column(visible=False) as admin_page:
75
+ gr.Markdown("### πŸ“’ Important Announcements")
76
+ admin_cards = gr.HTML()
77
+ back_btn = gr.Button("β¬… Back")
78
+
79
+ # --- Logic ---
80
+ def refresh_main():
81
+ df = fetch_data()
82
+ return df_to_cards(df, "Main")
83
+
84
+ def go_admin():
85
+ return gr.update(visible=False), gr.update(visible=True), gr.update(visible=False)
86
+
87
+ def verify_password(pw):
88
+ if pw == ADMIN_PASSWORD:
89
+ df = fetch_announcements()
90
+ return (
91
+ gr.update(visible=False),
92
+ gr.update(visible=False),
93
+ gr.update(visible=True),
94
+ df_to_cards(df, "Announcements"),
95
+ )
96
+ else:
97
+ return (
98
+ gr.update(visible=False),
99
+ gr.update(visible=True),
100
+ gr.update(visible=False),
101
+ "<p style='color:red;'>❌ Incorrect password.</p>",
102
+ )
103
+
104
+ refresh_btn.click(refresh_main, outputs=main_cards)
105
+ admin_btn.click(go_admin, outputs=[main_page, password_page, admin_page])
106
+ submit_pass.click(verify_password, inputs=password_input, outputs=[main_page, password_page, admin_page, admin_cards])
107
+ back_btn.click(lambda: (gr.update(visible=True), gr.update(visible=False), gr.update(visible=False)), outputs=[main_page, password_page, admin_page])
108
+
109
+ # Load initial data
110
+ demo.load(refresh_main, outputs=main_cards)
111
+
112
+ demo.launch(share=True)