patchcenter/replace_etat.py
Admin MPCZ 8479d7280e Users/Contacts: workflow profils + LDAP + sync iTop + etat aligne
- Users: 4 profils (admin/coordinator/operator/viewer) remplacent la matrix
- /users/add: picker contacts iTop (plus de creation libre)
- /me/change-password: flow force_password_change
- LDAP: service + section settings + option login
- Sync iTop contacts: filtre par teams (SecOps/iPOP/Externe/DSI/Admin DSI)
- Auto-desactivation users si contact inactif
- etat: alignement sur enum iTop (production/implementation/stock/obsolete)
- Menu: Contacts dans Administration, Serveurs en groupe repliable
- Audit bases: demo/prod via JWT mode

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-12 18:50:43 +02:00

53 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""Remplace les anciennes valeurs d'etat par les nouvelles (iTop) dans tous les fichiers Python et templates."""
import os
import re
# Ordre important: plus specifiques d'abord
REPLACEMENTS = [
("en_decommissionnement", "obsolete"),
("en_implementation", "implementation"),
("en_production", "production"),
("decommissionne", "obsolete"),
("en_cours", "implementation"), # prudent: seulement si etat context
("'eteint'", "'obsolete'"),
('"eteint"', '"obsolete"'),
("'eol'", "'obsolete'"),
('"eol"', '"obsolete"'),
]
# Ne PAS toucher:
# - itop_service.py (mappings deja corrects, on les laisse pour rétro-compat)
# - migrate_etat.sql (script de migration)
# - les tests
SKIP_FILES = {
"itop_service.py", # contient le mapping historique
}
ROOT = "app"
count = 0
for root, dirs, files in os.walk(ROOT):
for f in files:
if not f.endswith((".py", ".html")):
continue
if f in SKIP_FILES:
continue
path = os.path.join(root, f)
with open(path, encoding="utf-8") as fh:
content = fh.read()
orig = content
for old, new in REPLACEMENTS:
# en_cours est ambigu : on ne remplace que dans contexte etat
if old == "en_cours":
content = re.sub(r"(etat\s*[=:]\s*['\"])en_cours(['\"])", r"\1implementation\2", content)
content = re.sub(r"\betat\s*==\s*['\"]en_cours['\"]", "etat == 'implementation'", content)
continue
content = content.replace(old, new)
if content != orig:
with open(path, "w", encoding="utf-8") as fh:
fh.write(content)
print(f" modified: {path}")
count += 1
print(f"\nTotal: {count} files modified")