Spaces:
Running
Running
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)) | |