import streamlit as st st.set_page_config( page_title="NPO DB Query", page_icon=":computer:", layout="wide", initial_sidebar_state="expanded", menu_items={ "About": "**NPO DB Query v0.2.15**", }, ) def apply_icon_color_css() -> None: st.markdown( """ """, unsafe_allow_html=True, ) # Authentication function def check_password(): """Returns `True` if the user had the correct password.""" # st.write(st.secrets) def password_entered(): """Checks whether a password entered by the user is correct.""" if ( str(st.session_state.get("username", "")).strip() == str(st.secrets.get("username", "")).strip() and str(st.session_state.get("password", "")).strip() == str(st.secrets.get("password", "")).strip() ): st.session_state["password_correct"] = True del st.session_state["password"] # don't store password del st.session_state["username"] # don't store username else: st.session_state["password_correct"] = False # Create a visually appealing login form if ( "password_correct" not in st.session_state or not st.session_state["password_correct"] ): # Add custom CSS for styling st.markdown( """ """, unsafe_allow_html=True, ) # Create a centered layout col1, col2, col3 = st.columns([1, 2, 1]) with col2: # Login container with title and subtitle st.markdown( """
NPO DB Query
Please log in to continue
""", unsafe_allow_html=True, ) # Show error message if login failed if ( "password_correct" in st.session_state and not st.session_state["password_correct"] ): st.error("User not known or password incorrect") # Login form with improved input fields st.text_input("Username", key="username", placeholder="Enter your username") st.text_input( "Password", type="password", key="password", placeholder="Enter your password", ) # Full-width login button st.button("Login", on_click=password_entered, use_container_width=True) return False else: # Password correct return True # Only show the app if authentication is successful if check_password(): apply_icon_color_css() pages = { "Apps": [ st.Page( "apps/database_page.py", title="Generate Databases", icon=":material/home:", ), st.Page( "apps/parameters_distribution.py", title="Parameters distribution", icon=":material/tune:", ), st.Page( "apps/ciq_2g_generator.py", title="CIQ 2G Generator", icon=":material/description:", ), st.Page( "apps/ciq_3g_generator.py", title="CIQ 3G Generator", icon=":material/description:", ), st.Page( "apps/ciq_4g_generator.py", title="CIQ 4G Generator", icon=":material/description:", ), st.Page( "apps/ciq_verification.py", title="CIQ Verification", icon=":material/fact_check:", ), st.Page( "apps/core_dump_page.py", title="Parse dump core", icon=":material/terminal:", ), st.Page( "apps/ue_capability_parser.py", title="UE Capability Parser", icon=":material/memory:", ), st.Page( "apps/gps_converter.py", title="GPS Converter", icon=":material/explore:", ), st.Page( "apps/dbm_watt_calculator.py", title="dBm <> Watt Calculator", icon=":material/calculate:", ), st.Page( "apps/distance.py", title="Distance Calculator", icon=":material/social_distance:", ), st.Page( "apps/multi_points_distance_calculator.py", title="Multi Points Distance Calculator", icon=":material/route:", ), st.Page( "apps/sector_kml_generator.py", title="Sector KML Generator", icon=":material/map:", ), st.Page( "apps/clustering.py", title="Automatic Site Clustering", icon=":material/hub:", ), st.Page( "apps/fnb_parser.py", title="F4NB Extractor", icon=":material/article:", ), st.Page( "apps/dump_compare.py", title="Dump Compare", icon=":material/compare_arrows:", ), st.Page( "apps/import_physical_db.py", title="Physical Database Verification", icon=":material/public:", ), ], "Capacity Analysis": [ st.Page( "apps/kpi_analysis/gsm_capacity.py", title="GSM Capacity Analysis", icon=":material/bar_chart:", ), st.Page( "apps/kpi_analysis/wbts_capacty.py", title="WBTS Capacity BB and CE Analysis", icon=":material/developer_board:", ), st.Page( "apps/kpi_analysis/wcel_capacity.py", title="WCEL Capacity Analysis", icon=":material/cell_tower:", ), st.Page( "apps/kpi_analysis/lcg_analysis.py", title="LCG Capacity Analysis", icon=":material/stacked_line_chart:", ), st.Page( "apps/kpi_analysis/lte_capacity.py", title="LTE Capacity Analysis", icon=":material/signal_cellular_alt:", ), ], "Paging Analysis": [ st.Page( "apps/kpi_analysis/gsm_lac_load.py", title="GSM LAC Load Analysis", icon=":material/sms:", ), ], "KPI Analysis": [ st.Page( "apps/kpi_analysis/lte_drop_trafic.py", title="LTE Drop Traffic Analysis", icon=":material/trending_down:", ), st.Page( "apps/kpi_analysis/anomalie.py", title="KPIs Anomaly Detection", icon=":material/warning:", ), st.Page( "apps/kpi_analysis/trafic_analysis.py", title="Trafic Analysis", icon=":material/analytics:", ), ], "Documentations": [ st.Page( "documentations/index_doc.py", title="Documentation Home", icon=":material/menu_book:", ), st.Page( "documentations/database_doc.py", title="Databases Documentation", icon=":material/menu_book:", ), st.Page( "documentations/core_dump_doc.py", title="Dump Core Documentation", icon=":material/menu_book:", ), st.Page( "documentations/ue_capability_doc.py", title="UE Capability Documentation", icon=":material/menu_book:", ), st.Page( "documentations/ciq_verification_doc.py", title="CIQ Verification Documentation", icon=":material/menu_book:", ), st.Page( "documentations/gps_converter_doc.py", title="GPS Converter Documentation", icon=":material/menu_book:", ), st.Page( "documentations/distance_doc.py", title="Distance Calculator Documentation", icon=":material/menu_book:", ), st.Page( "documentations/sector_kml_doc.py", title="Sector KML Generator Documentation", icon=":material/menu_book:", ), st.Page( "documentations/gsm_capacity_docs.py", title="GSM Capacity Documentation", icon=":material/menu_book:", ), st.Page( "documentations/lte_capacity_docs.py", title="LTE Capacity Documentation", icon=":material/menu_book:", ), st.Page( "documentations/trafic_analysis_doc.py", title="Traffic Analysis Documentation", icon=":material/menu_book:", ), st.Page( "documentations/anomaly_detection_doc.py", title="Anomaly Detection Documentation", icon=":material/menu_book:", ), st.Page( "documentations/dump_compare_doc.py", title="Dump Compare Documentation", icon=":material/menu_book:", ), st.Page( "documentations/clustering_doc.py", title="Clustering Documentation", icon=":material/menu_book:", ), st.Page( "documentations/import_physical_db_doc.py", title="Physical Database Documentation", icon=":material/menu_book:", ), st.Page( "documentations/multi_points_distance_doc.py", title="Multi Points Distance Documentation", icon=":material/menu_book:", ), st.Page( "documentations/dump_analysis_doc.py", title="Dump Analytics Documentation", icon=":material/menu_book:", ), st.Page( "documentations/wbts_capacity_doc.py", title="WBTS Capacity Documentation", icon=":material/menu_book:", ), st.Page( "documentations/wcel_capacity_doc.py", title="WCEL Capacity Documentation", icon=":material/menu_book:", ), st.Page( "documentations/lcg_analysis_doc.py", title="LCG Analysis Documentation", icon=":material/menu_book:", ), st.Page( "documentations/gsm_lac_load_doc.py", title="GSM LAC Load Documentation", icon=":material/menu_book:", ), st.Page( "documentations/ciq_2g_doc.py", title="CIQ 2G Documentation", icon=":material/menu_book:", ), st.Page( "documentations/ciq_3g_doc.py", title="CIQ 3G Documentation", icon=":material/menu_book:", ), st.Page( "documentations/ciq_4g_doc.py", title="CIQ 4G Documentation", icon=":material/menu_book:", ), st.Page( "documentations/dbm_watt_doc.py", title="dBm Watt Documentation", icon=":material/menu_book:", ), st.Page( "documentations/fnb_parser_doc.py", title="F4NB Extractor Documentation", icon=":material/menu_book:", ), st.Page( "documentations/lte_drop_traffic_doc.py", title="LTE Drop Traffic Documentation", icon=":material/menu_book:", ), st.Page( "documentations/parameters_distribution_doc.py", title="Parameters Distribution Documentation", icon=":material/menu_book:", ), ], } pg = st.navigation(pages, position="top") pg.run()