Spaces:
Running
Running
File size: 2,667 Bytes
41e170e |
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 |
import streamlit as st
import os
from app.backend.constant import LEADERBOARD_ICON_MAP
LEADERBOARD_MAP = {}
LI_CSS = []
PAGE_SECTIONS = []
def init_leaderboard():
data_engine = st.session_state["data_engine"]
leaderboard_map = {}
page_sections = []
li_css = []
sort_id = 0
leaderboard_change = False
page_change = False
for dataset in data_engine.datasets:
sort_id += 1
leaderboard = dataset["leaderboard"]
name = dataset["name"]
leaderboard_section = f"{leaderboard.capitalize()} Leaderboard"
if leaderboard_section not in leaderboard_map:
leaderboard_map[leaderboard_section] = []
if name.lower() == leaderboard.lower():
leaderboard_map[leaderboard_section].append((name, 0))
else:
leaderboard_map[leaderboard_section].append((name, sort_id))
li_css.append(f"""
ul[data-testid="stSidebarNavItems"] li:nth-child({sort_id}) {{
text-indent: 2rem;
}}
""")
page_name = leaderboard_section if name.lower() == leaderboard.lower() else name.capitalize()
page_sections.append(f"""
[[pages]]
path = "app/ui/pages/{name}.py"
name = "{page_name}"
icon = "{LEADERBOARD_ICON_MAP.get(page_name, "")}"
""")
# ensure leaderboard is first
for k, v in leaderboard_map.items():
v.sort(key=lambda x: x[1])
if leaderboard_map != LEADERBOARD_MAP:
LEADERBOARD_MAP.update(leaderboard_map)
leaderboard_change = True
if page_sections != PAGE_SECTIONS:
PAGE_SECTIONS.clear()
PAGE_SECTIONS.extend(page_sections)
page_change = True
if li_css != LI_CSS:
LI_CSS.clear()
LI_CSS.extend(li_css)
return leaderboard_change, page_change
def init_pages(leaderboard_change, page_change):
# init pages
if leaderboard_change:
with open("app/ui/pages/data_page.py", "r", encoding="utf-8") as f:
data_page = f.read()
for leaderboard, group_names in LEADERBOARD_MAP.items():
for group_name in group_names:
path = os.path.join("app/ui/pages", f"{group_name[0]}.py")
with open(path, "w", encoding="utf-8") as f:
f.write(data_page.replace("$group_name$", group_name[0])
)
if page_change:
with open("app/ui/pages_sections.toml", "w", encoding="utf-8") as f:
f.write("\n".join(PAGE_SECTIONS))
if __name__ == '__main__':
init_leaderboard()
init_pages()
print("\n".join(PAGE_SECTIONS))
print("\n".join(LI_CSS))
|