Ajout de methodes pour tester l'égalité d'objets ou d'attributs,
possibilité de fournir une valeur du bon type python à un attribut test booléen sur s'attribut propagée à sa valeur. Le teste d'égalité sur un attribut peut se faire avec la sérialisation de l'attribut ou le type python qui le représente. Le teste d'égalité sur les cransLdapObjet se fait sur le dn et ses attributs. De plus, on peut aussi le testé avec un chaine de caractère : "host=freebox.crans.org" == MachineCrans(...) renvoie True ssi MachineCrans(...) a l'attribut host, qu'il est globalement unique et vaut freebox.crans.org vala vala
This commit is contained in:
parent
e9d092698a
commit
ca170c19f4
2 changed files with 79 additions and 28 deletions
39
objets.py
39
objets.py
|
@ -162,6 +162,41 @@ class CransLdapObject(object):
|
|||
nvals = [nldif[attr][vals.index(v)] for v in vals ]
|
||||
raise EnvironmentError("λv. str(Attr(v)) n'est peut-être pas une projection (ie non idempotente):", attr, nvals, vals)
|
||||
|
||||
def __eq__(self, obj):
|
||||
if isinstance(obj, self.__class__):
|
||||
if self.mode in ['w', 'rw']:
|
||||
return self.dn == obj.dn and self._modifs == obj._modifs and self.attrs == obj.attrs
|
||||
else:
|
||||
return self.dn == obj.dn and self.attrs == obj.attrs
|
||||
elif (isinstance(obj, str) or isinstance(obj, unicode)) and '=' in obj:
|
||||
attr, val = obj.split('=', 1)
|
||||
return attr in self.attrs.keys() and val in self[attr]
|
||||
else:
|
||||
return False
|
||||
|
||||
def __iter__(self):
|
||||
if self.mode in [ 'w', 'rw' ]:
|
||||
return self._modifs.__iter__()
|
||||
else:
|
||||
return self.attrs.__iter__()
|
||||
|
||||
def keys(self):
|
||||
if self.mode in [ 'w', 'rw' ]:
|
||||
return self._modifs.keys()
|
||||
else:
|
||||
return self.attrs.keys()
|
||||
|
||||
def values(self):
|
||||
if self.mode in [ 'w', 'rw' ]:
|
||||
return self._modifs.values()
|
||||
else:
|
||||
return self.attrs.values()
|
||||
|
||||
def items(self):
|
||||
if self.mode in [ 'w', 'rw' ]:
|
||||
return self._modifs.items()
|
||||
else:
|
||||
return self.attrs.items()
|
||||
|
||||
def display(self):
|
||||
print printing.sprint(self)
|
||||
|
@ -543,7 +578,7 @@ class proprio(CransLdapObject):
|
|||
super(proprio, self).__init__(conn, dn, mode, ldif)
|
||||
self._machines = None
|
||||
self._factures = None
|
||||
if u'cransAccount' in [ unicode(o) for o in self['objectClass']]:
|
||||
if u'cransAccount' in self['objectClass']:
|
||||
self.attribs = self.attribs + crans_account_attribs
|
||||
self.full = True
|
||||
|
||||
|
@ -837,7 +872,7 @@ class adherent(proprio):
|
|||
u"""Renvoie le nom du compte crans. S'il n'existe pas, et que uid
|
||||
est précisé, le crée."""
|
||||
|
||||
if u'posixAccount' in [str(o) for o in self.attrs['objectClass']]:
|
||||
if u'posixAccount' in self['objectClass']:
|
||||
return self.attrs['uid'][0]
|
||||
|
||||
elif login:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue