[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 optional = True
legend = u"Identifiant du club" legend = u"Identifiant du club"
class responsable(Attr): class responsable(Attr):
singlevalue = True singlevalue = True
optional = True optional = True
legend = u"Responsable du club" 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): 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): def __unicode__(self):
return self.value.attrs['aid'][0].__unicode__() 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]=[]
machines[parent_dn].append(m) machines[parent_dn].append(m)
elif (dn.startswith('aid=') or dn.startswith('cid=') or dn==base_dn) and not parent.has_key(dn): 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) parent[dn]=new_cransldapobject(self, dn, ldif = attrs)
allmachines=[] allmachines=[]
for dn,mlist in machines.items(): # on associe propriétaires et machines for dn,mlist in machines.items(): # on associe propriétaires et machines
@ -460,7 +458,7 @@ class proprio(CransLdapObject):
bool_paiement = True bool_paiement = True
except KeyError: except KeyError:
pass 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 bool_carte = False
try: try:
for carte in self['carteEtudiant']: for carte in self['carteEtudiant']:
@ -497,6 +495,15 @@ class machine(CransLdapObject):
self._proprio = new_cransldapobject(self.conn, parent_dn, self.mode) self._proprio = new_cransldapobject(self.conn, parent_dn, self.mode)
return self._proprio 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 class AssociationCrans(proprio): pass