"""Nettoyage one-shot des labels en doublon sur les notes du systeme.""" from trilium_api import _ea, search_by_label, get_note ea = _ea() LABELS_A_DEDOUBLONNER = ["statut", "priorite", "encoreValide", "type", "projet"] # On parcourt tous les types de notes du systeme types_notes = ["backlogItem", "decision", "historiqueItem", "conversation", "termeGlossaire", "projet", "contexteReprise", "skill"] notes_traitees = set() total_supprimes = 0 for tn in types_notes: for n in search_by_label("type", tn): nid = n["noteId"] if nid in notes_traitees: continue notes_traitees.add(nid) note = get_note(nid) attrs = [a for a in note.get("attributes", []) if a.get("type") == "label"] # Grouper par nom de label par_nom = {} for a in attrs: par_nom.setdefault(a.get("name"), []).append(a) for name, lst in par_nom.items(): if len(lst) <= 1: continue if name not in LABELS_A_DEDOUBLONNER: continue # Valeur de reference = celle du dernier label (plus recent) valeur_finale = lst[-1].get("value", "") garde = lst[0] # Patcher le premier avec la valeur finale try: ea.patch_attribute(attributeId=garde.get("attributeId"), value=valeur_finale) except Exception as e: print(" patch echoue sur", nid, name, ":", e) # Supprimer tous les autres for doublon in lst[1:]: try: ea.delete_attribute(attributeId=doublon.get("attributeId")) total_supprimes += 1 except Exception as e: print(" delete echoue :", e) print(f"{nid} : {name} dedoublonne ({len(lst)} -> 1, valeur={valeur_finale})") print(f"\nTermine. {total_supprimes} labels en double supprimes.")