[global] On diminue le risque de lock résiduel, et on corrige une faille des fonctions new[A-Z]*

* 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é.
This commit is contained in:
Pierre-Elliott Bécue 2013-05-30 18:44:15 +02:00
parent e0bce3f7d3
commit 616acdbb7a
6 changed files with 52 additions and 21 deletions

View file

@ -47,6 +47,7 @@ import attributs
import objets
import ldap_locks
import variables
import copy
import itertools
## import de /usr/scripts/
@ -218,10 +219,13 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
_, adherents = self.allMachinesAdherents(mode)
return adherents
def newMachine(self, parent, realm, uldif, login=None):
def newMachine(self, parent, realm, mldif, login=None):
"""Crée une nouvelle machine: ``realm`` peut être:
fil, fil-v6, wifi, wifi-v6, adm, gratuit, personnel-ens, special
mldif est un uldif pour la machine
--Partiellement implémenté"""
# On ne veut pas modifier mldif directement
uldif = copy.deepcopy(mldif)
if login is None:
login = self.current_login
#adm, serveurs, bornes, wifi, adherents, gratuit ou personnel-ens"""
@ -239,7 +243,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
uldif['objectClass'] = [u'machineWifi']
assert isinstance(owner, objets.adherent) or isinstance(owner, objets.club)
elif realm in ["adherents", "adherents-v6", "personnel-ens"]:
elif realm in ["adherents", "fil-v6", "personnel-ens"]:
uldif['objectClass'] = [u'machineFixe']
assert isinstance(owner, objets.adherent) or isinstance(owner, objets.club)
@ -249,7 +253,7 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
# On récupère la plage des mids
plage = itertools.chain(*[xrange(a,b+1) for (a,b) in config.rid_primaires[realm]])
# On récupère le premier id libre dans la plages s'il n'est pas
# déjà précisé dans le ldiff
# déjà précisé dans le ldif
rid = uldif.setdefault('rid', [unicode(self._find_id('rid', plage)) ])
# La machine peut-elle avoir une ipv4 ?
@ -262,14 +266,14 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
# Tout doit disparaître !!
machine = self._create_entity('mid=%s,%s' % (uldif['mid'][0], parent), uldif)
machine.history_add(login, u"inscription")
if machine.may_be(variables.created, self.droits + self._check_parent(machine.dn)):
return machine
else:
raise EnvironmentError("Vous n'avez pas le droit de créer cette machine.")
def newAdherent(self, uldif):
def newAdherent(self, aldif):
"""Crée un nouvel adhérent"""
uldif = copy.deepcopy(aldif)
aid = uldif.setdefault('aid', [ unicode(self._find_id('aid')) ])
uldif['objectClass'] = [u'adherent']
adherent = self._create_entity('aid=%s,%s' % (aid[0], variables.base_dn), uldif)
@ -278,8 +282,9 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
else:
raise EnvironmentError("Vous n'avez pas le droit de créer cet adhérent.")
def newClub(self, uldif):
def newClub(self, cldif):
"""Crée un nouveau club"""
uldif = copy.deepcopy(cldif)
cid = uldif.setdefault('cid', [ unicode(self._find_id('cid')) ])
uldif['objectClass'] = [u'club']
club = self._create_entity('cid=%s,%s' % (cid[0], variables.base_dn), uldif)
@ -288,9 +293,10 @@ class lc_ldap(ldap.ldapobject.LDAPObject, object):
else:
raise EnvironmentError("Vous n'avez pas le droit de créer cet adhérent.")
def newFacture(self, uldif):
def newFacture(self, fldif):
"""Crée une nouvelle facture
--Non implémenté !"""
uldif = copy.deepcopy(fldif)
raise NotImplementedError()
def _create_entity(self, dn, uldif):