"""Protection contre les modifications concurrentes.""" from datetime import datetime from fastapi import HTTPException def version_iso(obj) -> str | None: valeur = getattr(obj, "modifie_le", None) or getattr(obj, "cree_le", None) return valeur.isoformat() if valeur else None def _normaliser(valeur: datetime) -> str: return valeur.isoformat().replace("+00:00", "Z") def verifier_version(obj, version_attendue: str | None = None): """Refuse l'écriture si le client a ouvert une ancienne version de la donnée.""" if not version_attendue: return actuelle = getattr(obj, "modifie_le", None) or getattr(obj, "cree_le", None) if not actuelle: return if _normaliser(actuelle) != version_attendue.replace("+00:00", "Z"): raise HTTPException( status_code=409, detail="Cette information a été modifiée depuis son affichage. Rechargez les données avant d'enregistrer.", )