[objets.py] OK, I WILL EXPLAIN, DUDE !

* Quelques commentaires sur mon workaround pour les attributs liés.
This commit is contained in:
Pierre-Elliott Bécue 2013-08-03 18:10:37 +02:00
parent 4fbd45b66c
commit aeb1a8086f

View file

@ -653,13 +653,18 @@ class machine(CransLdapObject):
self._proprio._machines.remove(self)
def check_changes(self):
""" EXPLAIN WAT U DO !!!"""
"""Certaines propriétés sont liées les unes aux autres de façon non-
intrinsèque à LDAP, parce qu'on veut qu'il en soit ainsi. Cette
fonction crée un dictionnaire des choses qui devraient être modifiées,
sbm, et le renvoie. Par exemple, si le rid devrait passer de 42 à 1337,
alors la clef 'rid' de sbm contiendra le tuple (42, 1337)."""
old = {}
new = {}
sbm = {'rid' : (), 'ipHostNumber' : (), 'ip6HostNumber' : ()}
default = {'rid': -1, 'ipHostNumber': u'', 'macAddress': u''}
for i in ['rid', 'ipHostNumber', 'macAddress']:
# Try and may fail, then try again
# On stocke dans old et new l'ancienne et la nouvelle
# valeur de chaque attribut concerné.
try:
old[i] = self.attrs[i][0].value
except:
@ -668,6 +673,8 @@ class machine(CransLdapObject):
new[i] = self._modifs[i][0].value
except:
new[i] = default[i]
# Si le rid est changé, on met à jour ip4 et 6, en tenant compte
# des éventuels changements de mac.
if old['rid'] != new['rid']:
nip4 = unicode(crans_utils.ip4_of_rid(new['rid']))
oip4 = unicode(new['ipHostNumber'])
@ -680,13 +687,17 @@ class machine(CransLdapObject):
oip6 = u""
if oip6 != nip6:
sbm['ip6HostNumber'] = (oip6, nip6)
# safer to cast everything to unicode
# Les ipHostNumber sont des objets netaddr, on les cast en unicode
# si l'ip4 a changé, il suffit de changer le rid, en effet, l'ip6 peut
# subsister malgré tout. On retourne alors -1 pour le rid, et on fera
# le changement adapté ensuite.
elif unicode(old['ipHostNumber']) != unicode(new['ipHostNumber']):
nrid = crans_utils.rid_of_ip4(new['ipHostNumber'])
orid = new['rid']
if nrid != orid:
sbm['rid'] = (orid, nrid)
# safer not to cast (…)
# Les macAddress sont déjà des unicodes.
# On change l'ip6
elif old['macAddress'] != new['macAddress']:
nip6 = unicode(crans_utils.ip6_of_mac(new['macAddress'], new['rid']))
try:
@ -700,6 +711,9 @@ class machine(CransLdapObject):
def validate_changes(self):
sbm = self.check_changes()
if sbm['rid']:
# Si le rid est à -1, on agit en conséquence si on a une ipv6.
# Je me demande simplement pourquoi je l'ai pas fait au dessus, dans
# check_changes.
if sbm['rid'][1] == -1:
try:
ip6 = unicode(self._modifs['ip6HostNumber'][0])