diff --git a/surveillance/deconnexion.py b/surveillance/deconnexion.py index 99073561..2054f198 100644 --- a/surveillance/deconnexion.py +++ b/surveillance/deconnexion.py @@ -211,7 +211,11 @@ for elupload, eltype, elid in uploadeurs: if nb_decos >= 3: # Génération du fichier postscript - fichier_ps = generate_ps('upload', proprio, ldap) + try: + fichier_ps = generate_ps('upload', proprio, ldap) + except: + fichier_ps = ("ERREUR lors de la génération. Merci de regénérer manuellement la fiche avec la commande :\n" + + "/usr/scripts/surveillance/fiche_deconnexion/generate.py --upload aid=%d" % proprio.id()) # Envoi du mail à disconnect corps = upload.message_disconnect_multi % {'from': upload.expediteur, 'to': upload.expediteur, 'nbdeco': nb_decos, 'proprio': proprio.Nom(), 'ps': fichier_ps} @@ -469,8 +473,13 @@ for ip, id_p2p, nombre in fraudeurs: ######################################### nb_decos = len([ x for x in proprio.blacklist() if int(x.split('$')[0]) > time()-365*24*3600 and x.split('$')[2] == 'autodisc_p2p' ]) if nb_decos >= 3: + # Génération du fichier postscript + try: + fichier_ps = generate_ps('p2p', proprio, ldap) + except: + fichier_ps = ("ERREUR lors de la génération. Merci de regénérer manuellement la fiche avec la commande :\n" + + "/usr/scripts/surveillance/fiche_deconnexion/generate.py --p2p aid=%d" % proprio.id()) - fichier_ps = generate_ps('p2p', proprio, ldap) # Envoi du mail à disconnect corps = p2p.message_disconnect_multi % { 'from': p2p.expediteur, 'to': p2p.expediteur, diff --git a/surveillance/fiche_deconnexion/generate.py b/surveillance/fiche_deconnexion/generate.py index 95b67fa9..898c3de9 100644 --- a/surveillance/fiche_deconnexion/generate.py +++ b/surveillance/fiche_deconnexion/generate.py @@ -12,10 +12,14 @@ Licence : GPL v2 import sys sys.path.append('/usr/scripts/gestion') + from ldap_crans import crans_ldap -from time import * from config import upload + +from time import * +from unicodedata import normalize import commands + # logging tools import syslog def log(x): @@ -38,8 +42,22 @@ Les sanctions disponibles sont : usage: generate.py --sanction recherche_ldap Le motif de recherche dans la base ldap doit donné un résultat unique""" % "\n\t--".join(map(lambda x: x,sanctions)) +def decode(s): + u""" + Retourne un unicode à partir de s + s doit être en utf-8 + """ + if type(s) is unicode: + # Si s est déjà un unicode, on ne décode pas + return s + else: + return s.decode('utf-8', 'ignore') # On ignore les erreurs +def strip_accents(a): + u""" Supression des accents de la chaîne fournie """ + res = normalize('NFKD', decode(a)).encode('ASCII', 'ignore') + return res.replace(' ', '_').replace("'", '') def generate_ps(sanction, proprio, db): """En fonction de la sanction à appliquer au propriétaire, @@ -51,8 +69,8 @@ def generate_ps(sanction, proprio, db): dossier = '/usr/scripts/surveillance/fiche_deconnexion' # Base pour le nom du fichier - fichier = strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction, proprio.Nom().\ - lower().replace(' ', '-')) + fichier = strftime('%Y-%m-%d-%H-%M') + '-%s-%s' % (sanction, + strip_accents(proprio.Nom().lower().replace(' ', '-'))) # Création du fichier tex format_date = '%A %d %B %Y' @@ -93,7 +111,8 @@ def generate_ps(sanction, proprio, db): except Exception, e: log('Erreur lors de la génération du ps : ') log(str(e)) - log("Values : sanction:%s adherent:%s" % (sanction, proprio.Nom())) + log("Values : sanction:%s adherent:%s" % (sanction, + strip_accents(proprio.Nom()))) log(crans.utils.exceptions.formatExc()) raise e