fix: persistance de session F5 (fichiers /tmp) + BOM config.toml#210
Merged
Conversation
- 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>
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
_SESSION_STORE(effacé aux hot-reloads Streamlit) par des fichiers JSON dans/tmp/predictml_sessions/. Lesidest conservé dansst.query_paramset restauré à chaque render — l'utilisateur reste connecté après F5 ou navigation entre pages._restore_sessionéchoue (sid invalide ou expiré),st.query_params.clear()nettoie l'URL avant que Streamlit ne tente de router dessus.U+FEFF) en tête de.streamlit/config.tomlqui provoquait une erreur TOML au démarrage du conteneur.Test plan
?sid=...?sid=toujours présent dans l'URL🤖 Generated with Claude Code