db_query / apps /ue_capability_parser.py
DavMelchi's picture
Remove CA benchmark option in UE parser and update physical DB
5c9b711
from pathlib import Path
import pandas as pd
import streamlit as st
from queries.process_ue_capability import SHEET_ORDER, parse_uecap_files, to_excel_bytes
st.title(":material/memory: UE Capability Parser")
st.markdown(
"""
Parse UE Capability text exports (`.txt`) from drive-test/log tools (Actix/TEMS-like decoded RRC trees)
and extract useful 3GPP info:
- Bands by RAT (LTE, WCDMA/UTRA, GSM/GERAN, NR when present)
- Features and category fields
- CA / combination structures
- Release explicit + inferred (rules-based)
"""
)
samples_dir = Path(__file__).resolve().parents[1] / "samples"
sample_uecap = samples_dir / "ue_capability.txt"
if sample_uecap.exists():
st.download_button(
label="Download UE capability sample",
data=sample_uecap.read_bytes(),
file_name=sample_uecap.name,
mime="text/plain",
)
uploaded_files = st.file_uploader(
"Upload one or multiple UE capability text files",
type=["txt"],
accept_multiple_files=True,
)
enable_volte_assessment = st.checkbox(
"Enable VoLTE assessment",
value=True,
help="Compute VoLTE confidence score and supporting evidence.",
)
if st.button("Process", type="primary", disabled=not uploaded_files):
try:
payload = [(f.name, f.read()) for f in uploaded_files]
with st.spinner("Parsing UE capability exports..."):
sheets = parse_uecap_files(
payload,
enable_volte_assessment=enable_volte_assessment,
)
excel_bytes = to_excel_bytes(sheets)
st.session_state["uecap_sheets"] = sheets
st.session_state["uecap_excel"] = excel_bytes
st.success(f"Processed {len(uploaded_files)} file(s).")
except Exception as error:
st.error(f"Parsing failed: {error}")
sheets: dict[str, pd.DataFrame] | None = st.session_state.get("uecap_sheets")
excel_bytes: bytes | None = st.session_state.get("uecap_excel")
if sheets:
visible_sheets = [name for name in SHEET_ORDER if name != "Benchmark_CA_Diff"]
tabs = st.tabs(visible_sheets)
for tab, sheet_name in zip(tabs, visible_sheets):
with tab:
df = sheets.get(sheet_name, pd.DataFrame())
if df is None or df.empty:
st.info("No data extracted for this sheet.")
else:
st.dataframe(df, use_container_width=True)
if excel_bytes:
st.download_button(
label="Download UE capability Excel",
data=excel_bytes,
file_name="UE_Capability_Parsed.xlsx",
mime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
type="primary",
)