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