En effet, en effectue ensuite un nombre important de fois l'opération i in nonfree.
Avec des liste l'opération est en O(n) alors qu'elle est en O(1) avec des set
D'une façon général, on s'assure que tous les locks concernant un cransLdapObject
sont bien mis avec l'identifiant de lock cransLdapObject.lockId.
Avant d'entrer dans le context manager du cransLdapObject, on fait bien attention
d'intercepter les exceptions pouvant être levée pour libérer les locks potentiellement
déjà posés avant de propager l'exception.
Si on essayer d'appeler une methode d'enregistrement (.save() .delete() .create()) sans
utiliser un context manager, on affiche un warning sur stderr.
À terme ça serait bien de n'utiliser que des context manager pour être sûr qu'on ne
laisse pas de lock traîner dans la base de donnée.
Il faut bien sûr faire attention de bien ajouter les lock avec l'identifiant cransLdapObject.lockId
puisqu'on se base là dessus pour les libérer.
Si on a utiliser une context manager, en en sortant, on rend le cransLdapObject read only
(de façon douce en modifiant le cransLdapObject.mode et de façon force en changeant les methodes
save create delete pour lever l'exception EnvironmentError("Hors du context, impossible de faire des écritures"))
C'est un peu moche comme on s'est efforcé que dans lc_ldap tout soit un unicode et que
unicode n'a pas de sens pour un objet binaire. Avec le champ python_type = str sur les
attributs bianire, ça a tout de même l'air d'aller.
Ça permet d'utiliser des fonctions générique sur les machines lc_ldap
pour s'occuper aussi du multicast. Notamment dans /usr/scripts/gestion/gen_confs/bind2.py
où cela nous permet de générer gratuirement la zone tv.crans.org et son reverse.
* Quand on modifie un attribut qui devrait en modifier d'autres, on peut
invoquer check_changes pour voir ce qui devrait être changé, puis
validate_changes pour rendre ces changements effectifs. Il ne reste plus
qu'à appeler save pour enregistrer le tout.
* Correction de petits problèmes sur les locks : quand save réussissait,
ils n'étaient pas virés.
* En cas d'erreur au create ou au save, on supprime les locks malgré tout
* Les fonctions new* modifiaient directement le dico qu'on leur passait en
argument, on fait désormais une copie de celui-ci, de façon à ce que test.py
n'instancie pas toujours le même objet en croyant instancier des objets
différents à chaque fois
* Cela permet de trouver une typo dans services.py
* crans_utils a été un peu corrigé.
* Malheureusement lc_ldap._create_entity et objet.create sont un peu
sales, mais j'ai pas trouvé mieux.
* L'historique contient désormais les secondes.
* Maintenant, on va pouvoir identifier formellement les machines v6-only et les autres, sans perdre
la possibilité de passer de l'une à l'autre rapidement (avec les changements qui vont bien)
Lors de la création d'un nouvel objets :
* On à besoin des attributs pour le créer
* On a besoin de l'objet pour créer ses attributs
(si on veux faire la vérification commentée)
À priori, c'est juste temporaire.
* Par défaut, on préfère que le binding crashe si des enfants d'un adhérent ne sont pas
des machines et ne sont pas gérés par le binding que de les détruire
* objet.delete ne permet donc par défaut que de détruire l'objet, et pour proprio, on
surcharge pour détruire les machines
* _create_entity a été changée pour récupérer des dicos de valeurs encodées,
on adapte les méthodes new* en virant les uldifs, et en rendant l'historique
non unicode.
* Ipsec est facultatif, donc on le crée après avoir instancié la machine, que
l'on souhaite instancier le plus tôt possible, et on en laisse la gestion
à attributs, pour le parsage etc