[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 ctxt_check: effectue les validations
""" """
self.ctxt_check=ctxt_check self.ctxt_check=ctxt_check
self.value = None #self.value = None
self.conn = conn self.conn = conn
assert isinstance(val, unicode) assert isinstance(val, unicode)
self.parse_value(val, ldif) self.parse_value(val, ldif)
@ -720,17 +720,33 @@ class responsable(Attr):
category = 'perso' category = 'perso'
can_modify = [cableur, nounou] 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): def get_respo(self):
if self.value == None: if hasattr(self, "_value"):
self.value=self.conn.search('aid=%s' % self.__resp)[0] return 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): def parse_value(self, resp, ldif):
self.__resp=resp self.__value = resp
self.value = property(self.get_respo)
value = property(get_respo, nonefunction)
def __unicode__(self): def __unicode__(self):
return self.__resp return self.__value
class imprimeurClub(Attr): class imprimeurClub(Attr):
optional = True optional = True
@ -738,11 +754,30 @@ class imprimeurClub(Attr):
category = "perso" category = "perso"
can_modify = [cableur, nounou] 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): def parse_value(self, val, ldif):
res = self.conn.search('aid=%s' % int(val)) self.__value = val
if len(res) != 1:
raise ValueError("L'adhérent aid=%r n'existe plus." % val) value = property(get_imprimeur, nonefunction)
self.value = res[0]
def __unicode__(self): def __unicode__(self):
return unicode(self.value['aid'][0]) 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""" apostrophes, et éventuellement des caractères additionnels"""
if re.match("^[A-Za-z0-9]([-' %s]?[A-Za-z0-9])*$" % more_chars, if re.match("^[A-Za-z0-9]([-' %s]?[A-Za-z0-9])*$" % more_chars,
normalize('NFKD', value).encode('ASCII', 'ignore')): normalize('NFKD', value).encode('ASCII', 'ignore')):
return value return unicode(value)
else: else:
raise ValueError("Nom invalide ('%s')" % value) raise ValueError("Nom invalide ('%s')" % value)

View file

@ -387,17 +387,10 @@ class lc_ldap_local(lc_ldap):
L'idée est que les machines avec un réplica bossent L'idée est que les machines avec un réplica bossent
avec elles-mêmes pour la lecture, pas avec vert.""" avec elles-mêmes pour la lecture, pas avec vert."""
def __init__(self): def __init__(self):
if os.path.exists('/var/run/slapd/ldapi'): secrets = import_secrets()
ro_uri = 'ldapi://%2fvar%2frun%2fslapd%2fldapi/' ro_uri = 'ldap://127.0.0.1'
auth_dn = auth_pw = "" auth_dn = secrets.ldap_readonly_auth_dn
elif os.path.exists('/var/run/ldapi'): auth_pw = secrets.ldap_readonly_password
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
auth_pw = secrets.ldap_readonly_password
super(lc_ldap_local, self).__init__(uri=ro_uri, dn=auth_dn, cred=auth_pw) super(lc_ldap_local, self).__init__(uri=ro_uri, dn=auth_dn, cred=auth_pw)