Skip to content

fix: persistance de session F5 (fichiers /tmp) + BOM config.toml#210

Merged
alanconqrepo merged 9 commits into
mainfrom
feat/hide-demande-acces-when-logged-in
May 14, 2026
Merged

fix: persistance de session F5 (fichiers /tmp) + BOM config.toml#210
alanconqrepo merged 9 commits into
mainfrom
feat/hide-demande-acces-when-logged-in

Conversation

@alanconqrepo
Copy link
Copy Markdown
Owner

Summary

  • Session F5 : remplace le dict en mémoire _SESSION_STORE (effacé aux hot-reloads Streamlit) par des fichiers JSON dans /tmp/predictml_sessions/. Le sid est conservé dans st.query_params et restauré à chaque render — l'utilisateur reste connecté après F5 ou navigation entre pages.
  • "Page not found" : quand _restore_session échoue (sid invalide ou expiré), st.query_params.clear() nettoie l'URL avant que Streamlit ne tente de router dessus.
  • BOM config.toml : supprime le marqueur BOM (U+FEFF) en tête de .streamlit/config.toml qui provoquait une erreur TOML au démarrage du conteneur.

Test plan

  • Se connecter → URL affiche ?sid=...
  • Naviguer entre plusieurs pages → ?sid= toujours présent dans l'URL
  • Appuyer F5 → rester connecté sur la même page
  • Attendre l'expiration (ou supprimer manuellement le fichier JSON) → redirection login sans dialog "Page not found"
  • Vérifier les logs Docker au démarrage : plus d'erreur TOML

🤖 Generated with Claude Code

alanconqrepo and others added 8 commits May 14, 2026 20:39
- Mode sombre : toggle dans le bandeau latéral (visible toutes pages)
  avec injection CSS couvrant fond, textes, inputs, boutons
- Page d'accueil : simplifie l'expander « Pas de token » (ADMIN_TOKEN
  uniquement, suppression des commandes docker) ; supprime le tableau
  Navigation et le bouton Se déconnecter du contenu principal
- Bandeau gauche : bouton Se déconnecter déplacé sous « Mon token API »
- Navigation : Code Example déplacé en dernier (après Aide)
- Users : bouton « Appliquer rôle » affiché au-dessus de la liste
  déroulante « Changer rôle »

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Crée streamlit_app/.streamlit/config.toml avec base="light" pour que
Streamlit n'hérite pas du dark mode de l'OS. Le toggle "Mode sombre"
dans le bandeau reste fonctionnel pour basculer en dark.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Le CSS dark mode forçait color:#fafafa sur tous les div, rendant le texte
des boutons (blanc) invisible sur leur fond clair. Fix :
- Suppression de la règle trop large `div { color }`
- Ciblage direct de `button` avec fond sombre (#262730) et texte clair
- Boutons primaires gardent leur couleur rouge distincte

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- app.py : bloc sidebar "Mon compte" (quota, token, déconnexion, badge
  admin) déplacé dans le scope global → visible sur toutes les pages
- 10_Aide.py : boutons "⛶ Agrandir" sur la doc et le code source,
  ouvrent une popup pleine largeur via @st.dialog (Streamlit 1.36+)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Remplace le layout 2 colonnes (docs|chat) par 3 expanders verticaux
pleine largeur, chacun repliable indépendamment :
1. Documentation — sélecteur + conteneur scrollable + bouton Agrandir
2. Code source — sélecteur + code + bouton Agrandir (replié par défaut)
3. Assistant IA — sujets rapides sur 3 colonnes + chat
Les boutons "⛶ Agrandir" ouvrent toujours la popup @st.dialog.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- vertical_alignment="bottom" sur les colonnes pour aligner boutons et
  selectbox sur la même ligne
- Bouton ⬇ .md pour télécharger le document markdown sélectionné
- Bouton ⬇ .py pour télécharger le fichier source sélectionné

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oire

- _SESSION_STORE : dict module-level qui survit aux rechargements Streamlit
  (F5 crée une nouvelle session WebSocket mais le processus Python reste)
- À la connexion : génère un UUID session_id, stocke les credentials dans
  _SESSION_STORE, écrit sid=<uuid> dans st.query_params (visible dans l'URL)
- Au chargement : si api_token absent mais sid présent dans l'URL, restaure
  automatiquement la session depuis _SESSION_STORE
- Déconnexion : supprime la session du store et nettoie les query_params
- TTL 8h, nettoyage automatique des sessions expirées à chaque login

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…gation

st.navigation() supprime les query_params lors des changements de page.
Fix : stocker le sid aussi dans st.session_state["_sid"] et le ré-injecter
dans st.query_params à chaque render quand il est absent. Ainsi F5 sur
n'importe quelle page (/Users, /Models…) restaure la session correctement.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@alanconqrepo alanconqrepo merged commit d7163c2 into main May 14, 2026
2 of 4 checks passed
…fig.toml

- Remplace le dict en mémoire _SESSION_STORE par des fichiers JSON dans
  /tmp/predictml_sessions/ — survit aux hot-reloads Streamlit qui réimportent
  le module et effacent toute variable globale
- Vide st.query_params quand _restore_session échoue (sid invalide/expiré)
  pour éviter la dialog "Page not found" de Streamlit
- Supprime le BOM (U+FEFF) en tête de config.toml qui provoquait une erreur
  TOML au démarrage du conteneur

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant