[ldap_crans.py] pylint++, retrait de l'horrible fonction strip_accents
Ignore-this: 3465477d91f2a479c05d6bd0a9ff82ea darcs-hash:20090317171804-bd074-d1db979293761b83029ed93e912985362749c6d5.gz
This commit is contained in:
parent
59ba62490d
commit
90255b53ee
1 changed files with 40 additions and 34 deletions
|
@ -13,12 +13,13 @@ from socket import gethostname
|
||||||
import smtplib, re, os, random, string, time, sys, pwd
|
import smtplib, re, os, random, string, time, sys, pwd
|
||||||
import ldap, ldap.modlist, ldap_passwd
|
import ldap, ldap.modlist, ldap_passwd
|
||||||
|
|
||||||
import config, annuaires, iptools, chgpass, cPickle, config_mail
|
import config, annuaires, iptools, cPickle, config_mail
|
||||||
from chgpass import chgpass
|
from chgpass import chgpass
|
||||||
from affich_tools import coul, prompt, cprint
|
from affich_tools import coul, prompt, cprint
|
||||||
from email_tools import send_email
|
from email_tools import send_email
|
||||||
from syslog import *
|
from syslog import openlog, closelog, syslog
|
||||||
from numeros_disponibles import lister_ip_dispo
|
from numeros_disponibles import lister_ip_dispo
|
||||||
|
from unicodedata import normalize
|
||||||
|
|
||||||
date_format = '%d/%m/%Y %H:%M'
|
date_format = '%d/%m/%Y %H:%M'
|
||||||
hostname = gethostname().split(".")[0]
|
hostname = gethostname().split(".")[0]
|
||||||
|
@ -113,17 +114,10 @@ def decode(s):
|
||||||
else:
|
else:
|
||||||
return s.decode('utf-8', 'ignore') # On ignore les erreurs
|
return s.decode('utf-8', 'ignore') # On ignore les erreurs
|
||||||
|
|
||||||
accents = "êëèéÉÈÀÙâäàûüôöÖÔîïÎÏ'çÇÿßæÆøØ" # Si modif ici modifier aussi la fonction
|
|
||||||
def strip_accents(a):
|
def strip_accents(a):
|
||||||
""" Supression des accents de la chaîne fournie """
|
""" Supression des accents de la chaîne fournie """
|
||||||
a = a.replace(u'ê','e').replace(u'ë','e').replace(u'è','e').replace(u'é','e').replace(u'É','e').replace(u'È','e')
|
res = normalize('NFKD', decode(a)).encode('ASCII', 'ignore')
|
||||||
a = a.replace(u'â','a').replace(u'ä','a').replace(u'à','a').replace(u'À','a')
|
return res.replace(' ', '_').replace("'", '')
|
||||||
a = a.replace(u'û','u').replace(u'ü','u').replace(u'ù','u').replace(u'Ù','u')
|
|
||||||
a = a.replace(u'ô','o').replace(u'ö','o').replace(u'Ö','o').replace(u'Ô','o')
|
|
||||||
a = a.replace(u'î','i').replace(u'ï','i').replace(u'Ï','i').replace(u'Î','i')
|
|
||||||
a = a.replace(' ','_').replace(u"'",'').replace(u'ç','c').replace(u'Ç','c')
|
|
||||||
a = a.replace(u'ÿ','y').replace(u'ß','ss').replace(u'æ','ae').replace(u'Æ','ae').replace(u'ø','o').replace(u'Ø','o')
|
|
||||||
return a
|
|
||||||
|
|
||||||
def mailexist(mail):
|
def mailexist(mail):
|
||||||
"""
|
"""
|
||||||
|
@ -148,7 +142,7 @@ def preattr(val):
|
||||||
val est :
|
val est :
|
||||||
* un entier
|
* un entier
|
||||||
* une chaîne
|
* une chaîne
|
||||||
* une liste avec un seul entier ou une seule cha-Aîne-b
|
* une liste avec un seul entier ou une seule chaîne
|
||||||
|
|
||||||
Retourne [ len(str(val).strip), str(val).strip en utf-8 ]
|
Retourne [ len(str(val).strip), str(val).strip en utf-8 ]
|
||||||
"""
|
"""
|
||||||
|
@ -507,7 +501,8 @@ class CransLdap:
|
||||||
if time.time() < int(date):
|
if time.time() < int(date):
|
||||||
keep_date.append(date)
|
keep_date.append(date)
|
||||||
if keep_date:
|
if keep_date:
|
||||||
self.conn.modify_s(remove_dn, ldap.modlist.modifyModlist({'start': serv_dates[new[1:]]}, { 'start': keep_date }))
|
mods = [{'start': serv_dates[new[1:]]}, { 'start': keep_date }]
|
||||||
|
self.conn.modify_s(remove_dn, ldap.modlist.modifyModlist(*mods))
|
||||||
remove_dn = None
|
remove_dn = None
|
||||||
|
|
||||||
if remove_dn:
|
if remove_dn:
|
||||||
|
@ -646,7 +641,7 @@ class CransLdap:
|
||||||
# considéré non ok s'il n'a pas fourni sa carte d'etudiant
|
# considéré non ok s'il n'a pas fourni sa carte d'etudiant
|
||||||
# alors que l'on est desormais en periode de bloquage
|
# alors que l'on est desormais en periode de bloquage
|
||||||
# définifif (cf config.py).
|
# définifif (cf config.py).
|
||||||
if time.localtime()[1] in (8,9):
|
if time.localtime()[1] in (8, 9):
|
||||||
# Pour septembre paiement année précédente ok
|
# Pour septembre paiement année précédente ok
|
||||||
el = "(|(paiement=%d)(paiement=%d))" % (ann_scol, ann_scol-1)
|
el = "(|(paiement=%d)(paiement=%d))" % (ann_scol, ann_scol-1)
|
||||||
else:
|
else:
|
||||||
|
@ -820,7 +815,7 @@ class CransLdap:
|
||||||
Renvoie un proprietaire ou un adherent correspondant au
|
Renvoie un proprietaire ou un adherent correspondant au
|
||||||
login/ mot de passe (mot de passe facultatif)
|
login/ mot de passe (mot de passe facultatif)
|
||||||
"""
|
"""
|
||||||
recherche = self.search(("uid=%s" % uid),mode)
|
recherche = self.search(("uid=%s" % uid), mode)
|
||||||
proprio = None
|
proprio = None
|
||||||
|
|
||||||
if len(recherche['club']) > 0:
|
if len(recherche['club']) > 0:
|
||||||
|
@ -1231,11 +1226,15 @@ class BaseClasseCrans(CransLdap):
|
||||||
|
|
||||||
# Sauvegarde
|
# Sauvegarde
|
||||||
t = str(self.__class__).split('.')[-1]
|
t = str(self.__class__).split('.')[-1]
|
||||||
fd = open('%s/%s/%s_%s' % (config.cimetiere, t, time.strftime('%Y-%m-%d-%H:%M'), self.nom()), 'wb')
|
fd = open('%s/%s/%s_%s' % (config.cimetiere, t,
|
||||||
|
time.strftime('%Y-%m-%d-%H:%M'),
|
||||||
|
self.nom()), 'wb')
|
||||||
self.conn = None # Fermeture des connexions à la base sinon cPickle ne marchera pas
|
self.conn = None # Fermeture des connexions à la base sinon cPickle ne marchera pas
|
||||||
cPickle.dump(self, fd, 2)
|
cPickle.dump(self, fd, 2)
|
||||||
fd.close()
|
fd.close()
|
||||||
index = u"%s, %s : %s %s # %s\n" % (time.strftime(date_format), script_utilisateur, t, self.Nom() , decode(comment))
|
index = u"%s, %s : %s %s # %s\n" % (time.strftime(date_format),
|
||||||
|
script_utilisateur, t,
|
||||||
|
self.Nom(), decode(comment))
|
||||||
|
|
||||||
self.connect() # Reconnexion à la base
|
self.connect() # Reconnexion à la base
|
||||||
# Destruction
|
# Destruction
|
||||||
|
@ -1808,11 +1807,11 @@ class Adherent(BaseProprietaire):
|
||||||
new = new.capitalize()
|
new = new.capitalize()
|
||||||
for c in new[:]:
|
for c in new[:]:
|
||||||
if c not in (string.letters + '- ' + preattr(accents)[1] ):
|
if c not in (string.letters + '- ' + preattr(accents)[1] ):
|
||||||
raise ValueError(u"Seuls les caractères alphabétiques, l'espace et le - sont permis dans %s." % champ.replace(u'e', u'é') )
|
raise ValueError(u"Seuls les caractères alphabétiques, l'espace et le - sont permis dans %s." % champ)
|
||||||
if l<2:
|
if l<2:
|
||||||
raise ValueError(u"%s trop court." % champ.capitalize().replace(u'e', u'é'))
|
raise ValueError(u"%s trop court." % champ)
|
||||||
if new[0] not in string.letters:
|
if new[0] not in string.letters:
|
||||||
raise ValueError(u"Le premier caractère du %s doit être une lettre" % champ.replace(u'e', u'é') )
|
raise ValueError(u"Le premier caractère du %s doit être une lettre" % champ)
|
||||||
|
|
||||||
self._set(champ, [new])
|
self._set(champ, [new])
|
||||||
if self._data.has_key('gecos'):
|
if self._data.has_key('gecos'):
|
||||||
|
@ -2249,7 +2248,7 @@ class Adherent(BaseProprietaire):
|
||||||
raise ValueError(u'Droit %s incorrect' % droit)
|
raise ValueError(u'Droit %s incorrect' % droit)
|
||||||
new.append(droit.encode('utf-8'))
|
new.append(droit.encode('utf-8'))
|
||||||
|
|
||||||
ancien = self._data.get('droits',[])
|
ancien = self._data.get('droits', [])
|
||||||
for droit in new:
|
for droit in new:
|
||||||
if droit not in ancien:
|
if droit not in ancien:
|
||||||
db.services_to_restart("mail_ajout_droits", self.compte().encode('latin-1') + ":" + droit)
|
db.services_to_restart("mail_ajout_droits", self.compte().encode('latin-1') + ":" + droit)
|
||||||
|
@ -2278,7 +2277,7 @@ class Adherent(BaseProprietaire):
|
||||||
raise ValueError(u'Droit %s incorrect' % droit)
|
raise ValueError(u'Droit %s incorrect' % droit)
|
||||||
new.append(droit.encode('utf-8'))
|
new.append(droit.encode('utf-8'))
|
||||||
|
|
||||||
ancien = self._data.get('droits',[])
|
ancien = self._data.get('droits', [])
|
||||||
for droit in new:
|
for droit in new:
|
||||||
if droit not in ancien:
|
if droit not in ancien:
|
||||||
db.services_to_restart("mail_ajout_droits", self.compte().encode('latin-1') + ":" + droit)
|
db.services_to_restart("mail_ajout_droits", self.compte().encode('latin-1') + ":" + droit)
|
||||||
|
@ -2637,7 +2636,10 @@ class Machine(BaseClasseCrans):
|
||||||
raise RuntimeError(u"Fichier de fabriquants de MAC non trouvé !")
|
raise RuntimeError(u"Fichier de fabriquants de MAC non trouvé !")
|
||||||
|
|
||||||
if not multi_ok and not vendor:
|
if not multi_ok and not vendor:
|
||||||
raise ValueError(u"Le constructeur correspondant à cette adresse MAC ne peut être trouvé.\nL'adresse MAC correspond peut-être à un pont réseau, désactivez ce pont réseau.\nContactez nounou si la MAC est bien celle d'une carte.", 3)
|
raise ValueError(
|
||||||
|
u"""Le constructeur correspondant à cette adresse MAC ne peut être trouvé.
|
||||||
|
L'adresse MAC correspond peut-être à un pont réseau, désactivez ce pont réseau.
|
||||||
|
Contactez nounou si la MAC est bien celle d'une carte.""", 3)
|
||||||
|
|
||||||
# Lock de la mac
|
# Lock de la mac
|
||||||
self.lock('macAddress', mac)
|
self.lock('macAddress', mac)
|
||||||
|
@ -3336,7 +3338,7 @@ class Facture(BaseClasseCrans):
|
||||||
|
|
||||||
def numero(self):
|
def numero(self):
|
||||||
""" Retourne le numéro de facture """
|
""" Retourne le numéro de facture """
|
||||||
fid = self._data.get('fid',[None])[0]
|
fid = self._data.get('fid', [None])[0]
|
||||||
if fid == None:
|
if fid == None:
|
||||||
raise NotImplementedError, u'Il faut enregistrer une facture pour connaitre son numero'
|
raise NotImplementedError, u'Il faut enregistrer une facture pour connaitre son numero'
|
||||||
return fid
|
return fid
|
||||||
|
@ -3382,7 +3384,7 @@ class Facture(BaseClasseCrans):
|
||||||
if not self._modifiable:
|
if not self._modifiable:
|
||||||
raise NotImplementedError, "La facture n'est pas modifiable"
|
raise NotImplementedError, "La facture n'est pas modifiable"
|
||||||
|
|
||||||
if new not in ['liquide','cheque','paypal']:
|
if new not in ['liquide', 'cheque', 'paypal']:
|
||||||
raise ValueError, u'Mode de paiement non accepté'
|
raise ValueError, u'Mode de paiement non accepté'
|
||||||
|
|
||||||
self._set('modePaiement', [new])
|
self._set('modePaiement', [new])
|
||||||
|
@ -3412,14 +3414,14 @@ class Facture(BaseClasseCrans):
|
||||||
self.ajoute(self._frais())
|
self.ajoute(self._frais())
|
||||||
|
|
||||||
# modifie la base ldap
|
# modifie la base ldap
|
||||||
self._set("recuPaiement",[new])
|
self._set("recuPaiement", [new])
|
||||||
|
|
||||||
# renvoie la valeur trouvée dans la base
|
# renvoie la valeur trouvée dans la base
|
||||||
return self._data.get("recuPaiement",[None])[0]
|
return self._data.get("recuPaiement", [None])[0]
|
||||||
|
|
||||||
def _del_recu_paiement(self):
|
def _del_recu_paiement(self):
|
||||||
""" Pour test """
|
""" Pour test """
|
||||||
self._set("recuPaiement",[])
|
self._set("recuPaiement", [])
|
||||||
|
|
||||||
def _crediter(self):
|
def _crediter(self):
|
||||||
"""
|
"""
|
||||||
|
@ -3439,7 +3441,7 @@ class Facture(BaseClasseCrans):
|
||||||
# solde impression
|
# solde impression
|
||||||
if art["code"] == "SOLDE":
|
if art["code"] == "SOLDE":
|
||||||
proprio = self.proprietaire()
|
proprio = self.proprietaire()
|
||||||
proprio.solde(operation=art['nombre']*art["pu"], comment="Facture n°%s : %s" % (self.numero(),art['designation']))
|
proprio.solde(operation=art['nombre']*art["pu"], comment="Facture n°%s : %s" % (self.numero(), art['designation']))
|
||||||
proprio.save()
|
proprio.save()
|
||||||
|
|
||||||
def _frais(self):
|
def _frais(self):
|
||||||
|
@ -3466,7 +3468,7 @@ class Facture(BaseClasseCrans):
|
||||||
s = float(int(s*100)/100.0)
|
s = float(int(s*100)/100.0)
|
||||||
|
|
||||||
# ajoute à la liste d'articles de frais
|
# ajoute à la liste d'articles de frais
|
||||||
arts.append( {'code':'FRAIS','designation':'Frais de tansaction PayPal','nombre':1,'pu':round(s,2)} )
|
arts.append( {'code':'FRAIS', 'designation':'Frais de tansaction PayPal', 'nombre':1, 'pu':round(s, 2)} )
|
||||||
|
|
||||||
return arts
|
return arts
|
||||||
|
|
||||||
|
@ -3475,11 +3477,14 @@ class Facture(BaseClasseCrans):
|
||||||
|
|
||||||
# modifie la liste des articles
|
# modifie la liste des articles
|
||||||
if arts != None:
|
if arts != None:
|
||||||
self._set('article',['%s~~%s~~%s~~%s' % (art['code'],art['designation'],str(art['nombre']),str(art['pu'])) for art in arts])
|
self._set('article',
|
||||||
|
['%s~~%s~~%s~~%s' % (art['code'], art['designation'],
|
||||||
|
str(art['nombre']), str(art['pu']))
|
||||||
|
for art in arts])
|
||||||
|
|
||||||
# charge la liste des articles
|
# charge la liste des articles
|
||||||
arts = []
|
arts = []
|
||||||
for art in self._data.get("article",[]):
|
for art in self._data.get("article", []):
|
||||||
art = art.split('~~')
|
art = art.split('~~')
|
||||||
art = { 'code' : art[0],
|
art = { 'code' : art[0],
|
||||||
'designation' : art[1],
|
'designation' : art[1],
|
||||||
|
@ -3558,7 +3563,8 @@ class Facture(BaseClasseCrans):
|
||||||
s += art['nombre'] * art['pu']
|
s += art['nombre'] * art['pu']
|
||||||
return s
|
return s
|
||||||
|
|
||||||
def urlPaypal(self, useSandbox = False, businessMail = "paypal@crans.org", return_page=None, cancel_return_page=None):
|
def urlPaypal(self, useSandbox = False, businessMail = "paypal@crans.org",
|
||||||
|
return_page=None, cancel_return_page=None):
|
||||||
"""
|
"""
|
||||||
Retourne l'url paypal pour le paiement de cette facture
|
Retourne l'url paypal pour le paiement de cette facture
|
||||||
"""
|
"""
|
||||||
|
@ -3659,7 +3665,7 @@ if __name__ == '__main__':
|
||||||
usage = """Usage %s [ACTION]
|
usage = """Usage %s [ACTION]
|
||||||
--lock : donne la liste des locks actifs
|
--lock : donne la liste des locks actifs
|
||||||
--purgelock : supprime tous les locks de la base LDAP
|
--purgelock : supprime tous les locks de la base LDAP
|
||||||
--menage : supprime les machines des anciens adhérents"""%sys.argv[0]
|
--menage : supprime les machines des anciens adhérents""" % sys.argv[0]
|
||||||
|
|
||||||
if len(sys.argv) != 2:
|
if len(sys.argv) != 2:
|
||||||
print usage
|
print usage
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue