From 680446be8b8a5aa3452b694e2a136db0e14b0eff Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Tue, 13 Dec 2011 21:24:54 +0100 Subject: [PATCH] =?UTF-8?q?[attributs,lc=5Fldap]=20On=20va=20chercher=20le?= =?UTF-8?q?s=20responsables=20de=20club=20de=20mani=C3=A8re=20paresseuse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- attributs.py | 13 +++++++++---- lc_ldap.py | 13 ++++++++++--- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/attributs.py b/attributs.py index 4432d82..657a211 100644 --- a/attributs.py +++ b/attributs.py @@ -444,15 +444,20 @@ class cid(intAttr): singlevalue = True optional = True legend = u"Identifiant du club" - - + class responsable(Attr): singlevalue = True optional = True legend = u"Responsable du club" - + + def get_respo(self): + if self.value == None: + self.value=self.conn.search('aid=%s' % self.__resp)[0] + return self.value + def parse_value(self, resp, ldif): - self.value = self.conn.search('aid=%s' % resp)[0] + self.__resp=resp + self.value = property(self.get_respo) def __unicode__(self): return self.value.attrs['aid'][0].__unicode__() diff --git a/lc_ldap.py b/lc_ldap.py index 5d45f47..24a558e 100644 --- a/lc_ldap.py +++ b/lc_ldap.py @@ -138,8 +138,6 @@ class lc_ldap(ldap.ldapobject.LDAPObject): machines[parent_dn]=[] machines[parent_dn].append(m) elif (dn.startswith('aid=') or dn.startswith('cid=') or dn==base_dn) and not parent.has_key(dn): - # Hélas on refait une recherche ldap dans attributs.py pour trouver les responsables des club - # ce qui prends un temps non négligeable mais est toujours mieux que de le faire pour tous les adherents parent[dn]=new_cransldapobject(self, dn, ldif = attrs) allmachines=[] for dn,mlist in machines.items(): # on associe propriétaires et machines @@ -460,7 +458,7 @@ class proprio(CransLdapObject): bool_paiement = True except KeyError: pass - if config.bl_carte_et_definitif: + if config.bl_carte_et_definitif and not 'club' in map(lambda x:x.value,self["objectClass"]): bool_carte = False try: for carte in self['carteEtudiant']: @@ -496,6 +494,15 @@ class machine(CransLdapObject): if not self._proprio: self._proprio = new_cransldapobject(self.conn, parent_dn, self.mode) return self._proprio + + def blacklist_actif(self): + """Renvoie la liste des blacklistes actives sur la machine et le proprio""" + # XXX - Proposer de filtrer les blacklistes avec un arg supplémentaire ? + # XXX - Vérifier les blacklistes des machines pour les adhérents ? + black=self.proprio().blacklist_actif() + attrs = (self.attrs if self.mode not in ["w", "rw"] else self._modifs) + black.extend(filter((lambda bl: bl.is_actif()), attrs.get("blacklist",[]))) + return black class AssociationCrans(proprio): pass