|
- import streamlit as st
- import os
- import pandas as pd
- from pathlib import Path
- import time
- from datetime import datetime
-
- def show_training_data_manager(cfg):
- st.subheader("📂 Gestione Campioni Training")
-
- try:
- raw_path = cfg.get('collect_train', {}).get('samples_dir', '/data/train/samples')
- samples_dir = Path(raw_path)
- except Exception as e:
- st.error(f"Errore config: {e}")
- return
-
- # --- 1. RECUPERO E FILTRO DATI ---
- all_files = [f for f in os.listdir(samples_dir) if f.endswith('.csv')]
- files_data = []
-
- for file in all_files:
- path = samples_dir / file
- ts = os.path.getmtime(path)
- files_data.append({
- "File": file,
- "Data": datetime.fromtimestamp(ts).strftime("%Y-%m-%d %H:%M"),
- "ts": ts
- })
-
- df = pd.DataFrame(files_data).sort_values("ts", ascending=False)
-
- # Barra di ricerca
- search = st.text_input("🔍 Cerca coordinata:", "").strip().lower()
- if search:
- df = df[df['File'].str.lower().str.contains(search)]
-
- # --- 2. VISUALIZZAZIONE COMPATTA (SENZA TREMOLIO) ---
- # Usiamo le colonne per restringere la tabella al centro
- col_tab, col_empty = st.columns([3, 1])
-
- with col_tab:
- # st.table non ha scrollbar e non ha interazioni JS che causano tremolio
- st.table(df[["File", "Data"]].head(20))
-
- st.divider()
-
- # --- 3. AZIONI ---
- st.markdown("### 🛠️ Azioni")
- selected = st.selectbox("Seleziona file per operare:", df["File"].tolist())
-
- if selected:
- file_path = samples_dir / selected
- c1, c2, c3 = st.columns([1,1,1])
-
- with c1:
- if st.button("👁️ Dettagli", use_container_width=True):
- content = pd.read_csv(file_path, sep=";")
- st.markdown(f"**Dati di `{selected}`**")
- st.table(content.T.reset_index().rename(columns={'index': 'AP', 0: 'RSSI'}))
-
- with c2:
- with open(file_path, "rb") as f:
- st.download_button("📥 Scarica", f, file_name=selected, use_container_width=True)
-
- with c3:
- if st.button("🗑️ Elimina", use_container_width=True, type="primary"):
- os.remove(file_path)
- st.rerun()
-
- # Stats discrete in sidebar
- st.sidebar.caption(f"Totale campioni: {len(all_files)}")
|