diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 7ba44d8c..5aa7e30a 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -990,6 +990,14 @@ class BaseClasseCrans(CransLdap): retourne True s'il s'agit du même club/adhérent/machine, False sinon """ return self.__class__ == autre.__class__ and self.id() == autre.id() + def __enter__(self): + """Dummy""" + pass + + def __exit__(self, type, value, traceback): + """Dummy""" + pass + def id(self): """ Retourne la valeur de l'attribut caractéristique de la classe (aid,mid,cid)""" try: diff --git a/impression/impression_hp.py b/impression/impression_hp.py index 0f9ae9ce..32193c6e 100644 --- a/impression/impression_hp.py +++ b/impression/impression_hp.py @@ -21,11 +21,13 @@ import math if '/usr/scripts' not in sys.path: sys.path.append('/usr/scripts') -from base import FichierInvalide, SoldeInsuffisant, PrintError, SettingsError +from base import FichierInvalide, PrintError, SettingsError from gestion.config import impression as config_impression from subprocess import Popen, PIPE, check_output import livret +import lc_ldap.shortcuts +import lc_ldap.crans_utils as crans_utils ## Pour les codes qui se connectent direct à l'imprimante en http BASE_URL = 'https://imprimante.adm.crans.org' @@ -357,16 +359,12 @@ class impression(object): self._jid = self._uniq_jid() # debite l'adhérent si adherent il y a - if not DEBUG and (self._adh != None): - adh = self._adh.split('@') - if len(adh) > 1: - adh = adh[1:] - adh = self._get_adh(adh[0]) + if self._adh != None: + adh = self._get_adh_write() self._calcule_prix() # Normalement inutile, mais évite les races - if (self._prix > (adh.solde() - config_impression.decouvert)): - raise SoldeInsuffisant - adh.solde(-self._prix, "impression(%d): %s par %s" % (self._jid,self._fichier,self._adh)) - adh.save() + with adh: + adh.solde(-self._prix, u"impression(%d): %s par %s" % (self._jid,self._fichier, self._adh)) + adh.save() del adh # imprime le document self._exec_imprime() @@ -424,11 +422,14 @@ class impression(object): self._prix = float(c_total)/100 return self._prix - def _get_adh(self, adh): - if type(adh) == str: - #from ldap_crans_test import crans_ldap - from gestion.ldap_crans import CransLdap - adh = CransLdap().getProprio(adh, 'w') + @lc_ldap.shortcuts.with_ldap_conn(retries=2, delay=5, + constructor=lc_ldap.shortcuts.lc_ldap_admin) + def _get_adh_write(self, ldap): + """Récupère l'adhérent en lecture-écriture""" + uid = self._adh + if type(uid) in [str, unicode]: + uid = uid.split('@')[0] + adh = ldap.search(u'uid=%s' % crans_utils.escape(uid), mode='rw')[0] return adh ## ################################# ##