[attributs,lc_ldap] On va chercher les responsables de club de manière paresseuse

This commit is contained in:
Valentin Samir 2011-12-13 21:24:54 +01:00
parent 66a1eb2fb5
commit 680446be8b
2 changed files with 19 additions and 7 deletions

View file

@ -445,14 +445,19 @@ class cid(intAttr):
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__()

View file

@ -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']:
@ -497,6 +495,15 @@ class machine(CransLdapObject):
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