42 lines
835 B
Python
42 lines
835 B
Python
import importlib
|
|
import pkgutil
|
|
import streamlit as st
|
|
from config import PAGE_TITLE
|
|
from state import init_state
|
|
import views
|
|
|
|
st.set_page_config(
|
|
page_title=PAGE_TITLE,
|
|
layout="wide",
|
|
initial_sidebar_state="expanded",
|
|
)
|
|
|
|
init_state()
|
|
st.title(PAGE_TITLE)
|
|
|
|
def discover_views():
|
|
routes = {}
|
|
|
|
for module_info in pkgutil.iter_modules(views.__path__):
|
|
module_name = module_info.name
|
|
|
|
module = importlib.import_module(f"views.{module_name}")
|
|
|
|
if hasattr(module, "render") and hasattr(module, "page_title"):
|
|
title = module.page_title()
|
|
routes[title] = module.render
|
|
|
|
return routes
|
|
|
|
|
|
ROUTES = discover_views()
|
|
|
|
# optional: stable ordering
|
|
ROUTES = dict(sorted(ROUTES.items()))
|
|
|
|
view = st.sidebar.selectbox(
|
|
"Choose View",
|
|
list(ROUTES.keys()),
|
|
)
|
|
|
|
ROUTES[view]() |