Spaces:
Running
Running
Claude Haiku 5.5
fix(signature): localisation facultative — le code email reste saisissable sans position
06df37a Download src/modules/localisation_ui.py from klydekushy/Vortex-Flux: direct link, hf CLI and curl.
- Browser
- Download file 2.82 kB
-
https://huggingface.co/spaces/klydekushy/Vortex-Flux/resolve/main/src/modules/localisation_ui.py
- Command line
-
hf download hf://spaces/klydekushy/Vortex-Flux/src/modules/localisation_ui.py
-
curl -L -o localisation_ui.py https://huggingface.co/spaces/klydekushy/Vortex-Flux/resolve/main/src/modules/localisation_ui.py
2.82 kB
| """ | |
| SECTION « LOCALISATION » DES ECRANS DE SIGNATURE | |
| ================================================== | |
| Partagee par la page de signature des parties (sign_page) et la contresignature | |
| du preteur (signatures_admin). La position GPS est demandee au navigateur par | |
| core/audit_log.capturer_gps (a chaque rerun, tant qu'elle n'est pas resolue). | |
| Regle : la localisation n'est PAS un obstacle. Le code recu par email peut toujours | |
| etre saisi, avec ou sans position. Sans position, le document porte la mention | |
| « refusée » ou « non reçue » a la place du lieu. La case permet seulement de | |
| redemander la position au navigateur. | |
| """ | |
| import streamlit as st | |
| from core import audit_log, geoloc_signature | |
| def _relancer(cle: str): | |
| """Callback de la case : coche -> le navigateur est interroge de nouveau.""" | |
| if st.session_state.get(cle): | |
| audit_log.redemander_gps() | |
| def section_localisation(cle: str, contexte: str = "signer") -> dict: | |
| """Affiche l'etat de la localisation (information, jamais bloquante). Retourne toujours | |
| {"ok": bool, "texte": str, "gps": str} : texte et gps prets a enregistrer, meme sans position.""" | |
| ss = st.session_state | |
| etat = ss.get("_audit_gps_etat") | |
| coords = ss.get("_audit_gps_coords") | |
| if etat == geoloc_signature.ETAT_OK and coords: | |
| texte, brut = geoloc_signature.construire_localisation(etat, coords) | |
| st.success(f"[POSITION] Lieu de {contexte} détecté : **{texte}**. Il sera inscrit sur le document, " | |
| "avec votre adresse IP.") | |
| return {"ok": True, "texte": texte, "gps": brut} | |
| if etat == geoloc_signature.ETAT_REFUS: | |
| texte, brut = geoloc_signature.construire_localisation(etat) | |
| else: | |
| texte, brut = geoloc_signature.construire_localisation(geoloc_signature.ETAT_INDISPONIBLE) | |
| if etat in (geoloc_signature.ETAT_REFUS, geoloc_signature.ETAT_INDISPONIBLE): | |
| st.info(f"Localisation non partagée : le document portera « {texte} » à la place du lieu. " | |
| "Vous pouvez quand même saisir le code reçu par email.") | |
| st.checkbox("Je relance la demande de localisation au navigateur (facultatif).", | |
| key=f"loc_relance_{cle}", on_change=_relancer, args=(f"loc_relance_{cle}",)) | |
| if ss.get("_audit_gps_essai", 0) >= 1: | |
| st.caption("Si votre navigateur ne vous redemande rien, la localisation est bloquée pour ce site " | |
| "(cadenas à gauche de l'adresse). Ce n'est pas bloquant.") | |
| return {"ok": False, "texte": texte, "gps": brut} | |
| st.info("[POSITION] Localisation en attente (facultative) : le lieu sera inscrit sur le document si votre " | |
| "navigateur la partage. Vous pouvez signer sans.") | |
| return {"ok": False, "texte": geoloc_signature.TEXTE_NON_RECU, "gps": "NON_RECU"} | |