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