[attributs] Les imprimeurs et les respos des clubs sont générés à la volée

Leur valeur sont un property au lieu d'une valeur fixe.
This commit is contained in:
Pierre-Elliott Bécue 2013-03-05 16:55:21 +01:00
parent 83198b6bf6
commit dfed1fceb2
3 changed files with 52 additions and 24 deletions

View file

@ -115,7 +115,7 @@ class Attr(object):
ctxt_check: effectue les validations
"""
self.ctxt_check=ctxt_check
self.value = None
#self.value = None
self.conn = conn
assert isinstance(val, unicode)
self.parse_value(val, ldif)
@ -720,17 +720,33 @@ class responsable(Attr):
category = 'perso'
can_modify = [cableur, nounou]
def nonefunction(self, val):
"""
Just... do... nothing.
L'idée est qu'on initialise self.value à None
dans Attr. Simplement ici, self.value est une property,
donc il faut une fonction pour l'attribution.
"""
pass
def get_respo(self):
if self.value == None:
self.value=self.conn.search('aid=%s' % self.__resp)[0]
return self.value
if hasattr(self, "_value"):
return self._value
else:
try:
res = self.conn.search('aid=%s' % self.__value)[0]
except IndexError:
raise ValueError("L'adherent %s n'existe pas ou plus" % (self.__value))
self._value = res
return res
def parse_value(self, resp, ldif):
self.__resp=resp
self.value = property(self.get_respo)
self.__value = resp
value = property(get_respo, nonefunction)
def __unicode__(self):
return self.__resp
return self.__value
class imprimeurClub(Attr):
optional = True
@ -738,11 +754,30 @@ class imprimeurClub(Attr):
category = "perso"
can_modify = [cableur, nounou]
def nonefunction(self, val):
"""
Just... do... nothing.
L'idée est qu'on initialise self.value à None
dans Attr. Simplement ici, self.value est une property,
donc il faut une fonction pour l'attribution.
"""
pass
def get_imprimeur(self):
if hasattr(self, "_value"):
return self._value
else:
try:
res = self.conn.search('aid=%s' % int(self.__value))[0]
except IndexError:
raise ValueError("L'adhérent aid=%r n'existe pas ou plus" % self.__value)
self._value = res
return res
def parse_value(self, val, ldif):
res = self.conn.search('aid=%s' % int(val))
if len(res) != 1:
raise ValueError("L'adhérent aid=%r n'existe plus." % val)
self.value = res[0]
self.__value = val
value = property(get_imprimeur, nonefunction)
def __unicode__(self):
return unicode(self.value['aid'][0])

View file

@ -160,7 +160,7 @@ def validate_name(value, more_chars=""):
apostrophes, et éventuellement des caractères additionnels"""
if re.match("^[A-Za-z0-9]([-' %s]?[A-Za-z0-9])*$" % more_chars,
normalize('NFKD', value).encode('ASCII', 'ignore')):
return value
return unicode(value)
else:
raise ValueError("Nom invalide ('%s')" % value)

View file

@ -387,13 +387,6 @@ class lc_ldap_local(lc_ldap):
L'idée est que les machines avec un réplica bossent
avec elles-mêmes pour la lecture, pas avec vert."""
def __init__(self):
if os.path.exists('/var/run/slapd/ldapi'):
ro_uri = 'ldapi://%2fvar%2frun%2fslapd%2fldapi/'
auth_dn = auth_pw = ""
elif os.path.exists('/var/run/ldapi'):
ro_uri = 'ldapi://%2fvar%2frun%2fldapi/'
auth_dn = auth_pw = ""
else:
secrets = import_secrets()
ro_uri = 'ldap://127.0.0.1'
auth_dn = secrets.ldap_readonly_auth_dn