Fix dashboard imports for Streamlit multi-page routing

- Add sys.path.insert at top of app.py and all 5 page files
- Fix .streamlit/config.toml CORS/XSRF conflict
- Remove duplicate st.set_page_config from page files
- Verified: all pages import cleanly, dashboard boots via streamlit run
- All 49 tests passing (31 original + 18 dashboard)
This commit is contained in:
ramseshk
2026-08-11 15:08:09 +08:00
parent 65f5b66b05
commit 397078d635
7 changed files with 14 additions and 6 deletions
+1 -1
View File
@@ -1,3 +1,4 @@
import sys; from pathlib import Path; _p = Path(__file__).resolve().parent.parent.parent; str(_p) not in sys.path and sys.path.insert(0, str(_p))
"""Page 1 — Matchday Control Room.
KPI row, fixture difficulty heatmap, start/sit table, bump chart.
@@ -59,7 +60,6 @@ def _build_fixture_heatmap(players, fixtures):
def run():
st.set_page_config(page_title="Matchday — Fantabeto", page_icon="⚽", layout="wide")
inject_css()
preds, fixtures, players, lineups, votes = _get_data()
+1 -1
View File
@@ -1,3 +1,4 @@
import sys; from pathlib import Path; _p = Path(__file__).resolve().parent.parent.parent; str(_p) not in sys.path and sys.path.insert(0, str(_p))
"""Page 2 — Player Intelligence.
Radar charts, regression analysis, card risk, RAG news feed.
@@ -54,7 +55,6 @@ def _get_player_data(players, preds, votes, lineups, player_name):
def run():
st.set_page_config(page_title="Players — Fantabeto", page_icon="👤", layout="wide")
inject_css()
players, preds, votes, lineups = _get_data()
+1 -1
View File
@@ -1,3 +1,4 @@
import sys; from pathlib import Path; _p = Path(__file__).resolve().parent.parent.parent; str(_p) not in sys.path and sys.path.insert(0, str(_p))
"""Page 3 — Auction War Room.
Budget waterfall, value scatter, grid-auction heatmap, budget slider simulator.
@@ -98,7 +99,6 @@ def _grid_heatmap(players):
def run():
st.set_page_config(page_title="Auction — Fantabeto", page_icon="💰", layout="wide")
inject_css()
players, preds = _get_data()
+1 -1
View File
@@ -1,3 +1,4 @@
import sys; from pathlib import Path; _p = Path(__file__).resolve().parent.parent.parent; str(_p) not in sys.path and sys.path.insert(0, str(_p))
"""Page 4 — Lineup Optimizer.
SVG pitch with optimal XI, what-if toggles, opponent mirror.
@@ -84,7 +85,6 @@ def _opponent_lineup(preds, fixtures):
def run():
st.set_page_config(page_title="Lineup — Fantabeto", page_icon="📋", layout="wide")
inject_css()
preds, fixtures, players = _get_data()
+1 -1
View File
@@ -1,3 +1,4 @@
import sys; from pathlib import Path; _p = Path(__file__).resolve().parent.parent.parent; str(_p) not in sys.path and sys.path.insert(0, str(_p))
"""Page 5 — Model Lab.
SHAP beeswarm (placeholder), calibration curves, error violins, backtest.
@@ -112,7 +113,6 @@ def _feature_importance_plot(players):
def run():
st.set_page_config(page_title="Model Lab — Fantabeto", page_icon="🧪", layout="wide")
inject_css()
votes, preds, metrics, players = _get_data()