From 783805781407cf4ae071564e1f5f1ca6651c31a8 Mon Sep 17 00:00:00 2001 From: Daniel STAN Date: Mon, 16 Feb 2015 14:58:32 +0100 Subject: [PATCH] [ldap/gest_crans] revert "unicode sandwich" Pas encore stable. --- gestion/affich_tools.py | 4 - gestion/gest_crans.py | 1112 ++++++++++++--------------------------- gestion/ldap_crans.py | 2 +- 3 files changed, 341 insertions(+), 777 deletions(-) diff --git a/gestion/affich_tools.py b/gestion/affich_tools.py index 17302c87..7e5ad17a 100644 --- a/gestion/affich_tools.py +++ b/gestion/affich_tools.py @@ -94,10 +94,6 @@ def dialog(backtitle, arg, dialogrc=''): # Récupération du contenu du pipe _, sortie = processus.communicate() - - # On décode la sortie du programme dialog (et on le fait ici parce que - # c'est ici l'interface). - sortie = to_unicode(sortie) resultat = sortie.splitlines() # Récupération du code d'erreur diff --git a/gestion/gest_crans.py b/gestion/gest_crans.py index a91eb12d..bd718d6d 100755 --- a/gestion/gest_crans.py +++ b/gestion/gest_crans.py @@ -1,7 +1,7 @@ #!/bin/bash /usr/scripts/python.sh # -*- coding: utf-8 -*- -""" +u""" Interface utilisateur du système de gestion des machines et adhérents du crans @@ -17,13 +17,10 @@ Les fonction select permettent de choisir un objet dans la base Retournent None si pas d'objet trouvé. """ -from __future__ import unicode_literals ### Rapport de bug automatique # Destinataires, si vide n'envoi rien To = ['root@crans.org'] - - import string import os import sys @@ -45,20 +42,17 @@ from ldap_crans import Machine, MachineFixe, MachineWifi, MachineCrans, BorneWif from ldap_crans import tz, generalizedTimeFormat, fromGeneralizedTimeFormat import user_tests - - - isadm = user_tests.isadm() isdeconnecteur = user_tests.isdeconnecteur() db = crans_ldap() droits = db.search("uid=%s" % script_utilisateur)['adherent'][0].droits() -isimprimeur = "Imprimeur" in droits +isimprimeur = u"Imprimeur" in droits iscontroleur = u'Tresorier' in droits isbureau = u'Bureau' in droits encoding = sys.stdin.encoding or 'UTF-8' -if 'Nounou' in droits: +if u'Nounou' in droits: # Si on est nounou if os.path.exists(os.path.expanduser('~/.dialogrc')): # Si on a un fichier de configuration du programme dialog dans son @@ -90,799 +84,373 @@ in_facture = None ## Fonctions de remplissage ou modification des paramètres d'un adhérent def set_bases(adher): - """ - Définition des paramètres de base d'un adhérent : - - nom - - prénom - - téléphone - - chambre - - Paramètres: - - ``adher`` : instance de la classe :py:class:`ldap_crans.Adherent` - - Utilises: - - :py:func:`affich_tools.to_unicode` - - :py:func:`dialog` - - :py:meth:`ldap_crans.search` - - :py:func:`set_addr_ext` - - :py:func:`_set_chbre` - - Peut lever: - - :py:exc:`ValueError` - - Retournes: - - None ou 1 (en cas de problème) + u""" + Définition des paramètres de bases d'un adhérent : + * Nom + * Prenom + * Téléphone + * Chambre """ - # Construction de la liste des arguments à passer au programme dialog - arguments = [ - "--title", "Inscription adhérent", - "--form", "", "0", "0", "0", - "Nom :", "1", "1", adher.nom(), "1", "13", "20", "20", - "Prénom :", "2", "1", adher.prenom(), "2", "13", "20", "20", - "Numéro de téléphone :", "3", "1", to_unicode(adher.tel()), "3", "23", "15", "00", - "Chambre :", "4", "1", adher.chbre(), "4", "11", "05", "00", - "(bat+numéro)", "4", "17", "", "0", "0", "0", "0", - "EXT pour chambre extérieure au campus", "5", "1", "", "0", "0", "0", "0" - ] + # Construction de la boite de dialogue + arg = u'--title "Inscription adhérent" ' + arg += u'--form "" 0 0 0 ' + arg += u'"Nom :" 1 1 "%s" 1 13 20 20 ' % adher.nom() + arg += u'"Prénom :" 2 1 "%s" 2 13 20 20 ' % adher.prenom() + arg += u'"Numéro de téléphone :" 3 1 "%s" 3 23 15 00 ' % adher.tel() + arg += u'"Chambre :" 4 1 "%s" 4 11 05 00 ' % adher.chbre() + arg += u'"(bat+numéro)" 4 17 "" 0 0 0 0 ' + arg += u'"EXT pour chambre extérieure au campus" 5 1 "" 0 0 0 0 ' - # Affichage de la boîte de dialogue - code_erreur, sortie = dialog(arguments) - - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé + # Affichage + annul, result = dialog(arg) + if annul: return 1 - # On se prépare psychologiquement à ce qu'il y ait des erreurs - erreur = '' + # Traitement + err = '' + try: adher.nom(result[0]) + except ValueError, c: err += c.args[0] + '\n' - # Tentative de peuplement du nom, du prénom et du téléphonek - try: - # On essaye de mettre un nom à l'adhérent - adher.nom(sortie[0]) - except ValueError as exception: - # .. seealso:: :py:func:`ldap_crans.nom` - erreur += exception.args[0] + '\n' + try: adher.prenom(result[1]) + except ValueError, c: err += c.args[0] + '\n' - try: - # On essaye de mettre un prénom à l'adhérent - adher.prenom(sortie[1]) - except ValueError as exception: - # .. seealso:: :py:func:`ldap_crans.prenom` - erreur += exception.args[0] + '\n' + try: adher.tel(result[2]) + except ValueError, c: err += c.args[0] + '\n' - try: - # On essaye de mettre un numéro de téléphone à l'adhérent - adher.tel(sortie[2]) - except ValueError as exception: - # .. seealso:: :py:func:`ldap_crans.tel` - erreur += exception.args[0] + "\n" - - # On va vérifier dans la base LDAP qu'on a pas un adhérent du même nom - requete = "nom=" + sortie[0] + "&prenom=" + sortie[1] - - if db.search(requete)["adherent"]: - # S'il y a déjà un adhérent du même nom dans la base LDAP, on demande - # confirmation à l'utilisateur. - arguments_confirmation = [ - "--title", "Inscription adhérent", - "--yesno", "Un adhérent du même nom existe déjà.\nEst-ce bien une première inscription ?", "0", "0" - ] - non, _ = dialog(arguments_confirmation) - - if non: - # Si l'utilisateur dit que ce n'est pas une première inscription, - # on retourne un code d'erreur non nul. + # Un adhérent du même nom existe-t-il déjà ? + req = 'nom=' + result[0] + '&prenom=' + result[1] + if len(db.search(req)['adherent']) > 0: + arg = u'--title "Inscription adhérent" ' + arg += u'--yesno "Un adhérent du même nom existe déjà.' + arg += u'\nEst-ce bien une première inscription ?" 0 0' + no, res = dialog(arg) + if no: return 1 - # Vérification de la chambre donnée par l'adhérent. Si tout se passe bien - # _set_chbre renvoie une chaîne de caractère vide. - # .. seealso:: :py:func:`gest_crans._set_chbre` - erreur += _set_chbre(adher, sortie[3]) + err += _set_chbre(adher, result[3]) - # Gestion des erreurs - if erreur: - # S'il y a des erreurs, on recommence - arguments_echec = [ - "--title", "Inscription adhérent", - "--msgbox", to_unicode(erreur) + "\n\n", "0", "0", - ] - - # Affichage de la boîte de dialogue - dialog(arguments_echec) - # Et on recommence tout le processus + # Des erreurs ? + if err: + arg = u'--title "Inscription adhérent" ' + arg += u'--msgbox "%s\n\n" 0 0' % to_unicode(err) + dialog(arg) + # On redemande return set_bases(adher) - # Gestion des gens qui n'habitent pas sur le campus - if adher.chbre() == "EXT": + if adher.chbre() == 'EXT': # Il faut demander l'adresse extérieure if set_addr_ext(adher): - # Si set_addr_ext() renvoie 1, c'est que l'utilisateur a annulé et - # on recommence. + # Annulation return set_bases(adher) def _set_chbre(adher, chbre): + u""" Attribution de la chambre chbre à l'adhérent fourni + Retourne une chaine (unicode) avec l'erreur éventuelle """ - Attribution de la chambre ``chbre`` à l'adhérent ``adher`` fourni. + if chbre == '????': + # Réservé à un usage interne + return u'Chambre invalide\n' - Paramètres: - - ``adher`` : instance de la classe :py:class:`ldap_crans.Adherent` - - ``chbre`` : (str) contient la chambre de l'adhérent (Bat+numéro ou EXT) - - Utilises: - - :py:func:`dialog` - - :py:class:`ldap_crans.Adherent` - - :py:func:`whos.aff - - Peut lever: - - :py:exc:`EnvironmentError` - - :py:exc:`ValueError` - - Retournes: - - (str) vide (si la chambre a été modifiée sans problème) ou contenant - "Chambre invalide\n" - """ - if chbre == "????": - # Réservé à un usage interne. - return "Chambre invalide\n" - - try: - # Tentative de peuplement de la chambre - adher.chbre(chbre) - - except EnvironmentError as exception: - # XXX trouver d'où ça peut venir - return exception.args[0] + "\n" - - except ValueError as exception: - if len(exception.args) == 2: - # C'est que la chambre était déjà occupée - squatteur = exception.args[1] - - # Affichage des informations de ``squatteur`` - # .. seealso:: :py:func:`whos.aff` + try: c = adher.chbre(chbre) + except EnvironmentError, c: return c.args[0] + '\n' + except ValueError, c: + if len(c.args) == 2: + # La chambre est occupée + squatteur = c.args[1] aff(squatteur) - - # Construction de la liste d'arguments à passer à dialog pour - # demander à l'utilisateur s'il veut déloger le squatteur. - arguments = [ - "--title", "Inscription adhérent", - "--yesno", "Un adhérent " + squatteur.Nom() + " occupe déjà cette chambre.\n\nChanger la chambre de cet adhérent ?", "0", "0" - ] - - # Affichage de la boîte - non, _ = dialog(arguments) - - if not non: - # Si l'utilisateur veut changer la chambre, on le fait. - squatteur.chbre("????") + arg = u'--title "Inscription adhérent" ' + arg += u'--yesno "Un adhérent (%s) occupe déjà cette chambre.\n' % squatteur.Nom() + arg += u'\nChanger la chambre de cet adhérent ?" 0 0' + no, res = dialog(arg) + if not no: + squatteur.chbre('????') squatteur.save() - - # On recommence (si tout va bien, le squatteur n'habite plus - # là). + # On recommence, le géneur doit être parti. return _set_chbre(adher, chbre) + return c.args[0] + '\n' - return exception.args[0] + "\n" - - # Si tout s'est bien passé, on retourne une chaîne vide. - return "" + return u'' def set_addr_ext(adher): - """ - Définition de l'adresse extérieure d'un adhérent. - Il ne faut utiliser ceci que si adher.chbre() == "EXT". + u""" Définition de l'adresse extérieure d'un adhérent + La chambre de cet adhérent doit être EXT, sinon erreur """ + arg = u'--title "Adresse extérieure de %s" ' % adher.Nom() + arg += u'--form "" 0 0 0 ' + arg += u'"" 1 1 "%s" 1 1 46 50 ' % adher.adresse()[0] + arg += u'"" 2 1 "%s" 2 1 46 50 ' % adher.adresse()[1] + arg += u'"Code postal :" 3 1 "%s" 3 15 6 0 ' % adher.adresse()[2] + arg += u'"Ville :" 3 21 "%s" 3 30 17 30 ' % adher.adresse()[3] + # Affichage + annul, result = dialog(arg) + if annul: return 1 - Paramètres: - - ``adher`` : instanc de la classe :py:class:`ldap_crans.Adherent` - - Utilises: - - :py:func:`dialog` - - :py:class:`ldap_crans.Adherent` - - Peut lever: - - :py:exc:`ValueError` - - Retournes: - - None ou 1 (en cas de problème) - """ - # Construction de la liste des arguments à passer à dialog pour pouvoir - # deamander une adresse complète. - arguments = [ - "--title", "Adresse extérieure de " + adher.Nom(), - "--form", "", "0", "0", "0", - "", "1", "1", adher.adresse()[0], "1", "1", "46", "50", - "", "2", "1", adher.adresse()[1], "2", "1", "46", "50", - "Code postal :", "3", "1", adher.adresse()[2], "3", "15", "6", "0", - "Ville :", "3", "21", adher.adresse()[3], "3", "30", "17", "30" - ] - - # Affichage de la boîte de dialogue - code_erreur, sortie = dialog(arguments) - - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé - return 1 - - try: - # Tentative de peuplement de l'adresse - adher.adresse(sortie) - - except ValueError as exception: - # Construction de la liste des arguments à passer à dialog pour une - # boîte d'erreur. - arguments_echec = [ - "--title", "Adresse extérieure de " + adher.Nom(), - "--msgbox", exception.args[0] + "\n\n\n", "0", "0" - ] - - # Affichage de la boîte d'erreur - dialog(arguments_echec) - - # Et on recommence ! + try: adher.adresse(result) + except ValueError, c: + arg = u'--title "Adresse extérieure de %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % to_unicode(c.args[0]) + dialog(arg) + # On redemande return set_addr_ext(adher) def set_etudes(adher): - """ - Définition des `etudes` en 3 étapes: - 1. peuplement de l'établissement - 2. peuplement de l'année administrative - 3. peuplement de la section/du laboratoire - - Paramètres: - - ``adher`` : instance de la classe :py:class:`ldap_crans.Adherent` - - Utilises: - - :py:func:`dialog` - - :py:class:`ldap_crans.Adherent` - - Peut lever: - - :py:exc:`ValueError` - - Retournes: - - None ou 1 (en cas de problème) + u""" + Définition des études en 3 questions : + * établissement + * année administrative + * section/labo """ def __etudes_etab(): - """ - Définition de l'établissement d'étude d'un adhérent. - - Paramètres: - - None - - Utilises: - - :py:func:`dialog` - - Retournes: - - None ou 1 (en cas de problème) - """ - # Construction de la liste des arguments à passer à dialog - arguments = [ - "--title", "Études de " + adher.Nom() + " (1/3)" - ] - + arg = u'--title "Etudes de %s (1/3)" ' % adher.Nom() if adher.etudes(0): - # S'il existe déjà un établissement dans la base LDAP pour - # l'adhérent en question, on prend cet établissement comme défaut. - arguments += [ - "--default-item", adher.etudes(0) - ] + arg += u'--default-item "%s" ' % adher.etudes(0) + arg += u'--menu "Choisissez l\'établissement : " 0 0 0 ' + if adher.etudes(0): + arg += u'"Autre" "" ' + arg += u'"ENS" "" ' + arg += u'"IUT Cachan" "" ' + arg += u'"Maximilien Sorre" "" ' + arg += u'"Gustave Eiffel" "" ' + arg += u'"EFREI" "" ' + arg += u'"ESTP" "" ' + arg += u'"P1" "Université Panthéon Sorbonne" ' + arg += u'"P2" "Université Panthéon Assas" ' + arg += u'"P3" "Université de la Sorbonne Nouvelle" ' + arg += u'"P4" "Université Paris Sorbonne" ' + arg += u'"P5" "Université René Descartes" ' + arg += u'"P6" "Université Pierre et Marie Curie" ' + arg += u'"P7" "Université Paris Diderot" ' + arg += u'"P8" "Université Vincennes Saint Denis" ' + arg += u'"P9" "Université Paris Dauphine" ' + arg += u'"P10" "Université de Nanterre" ' + arg += u'"P11" "Université de Paris Sud (Orsay)" ' + arg += u'"P12" "Université Val de Marne" ' + arg += u'"P13" "Université Paris Nord" ' + arg += u'"IUFM" "" ' + arg += u'"Personnel ENS" "dans les appartements de l\'ENS" ' + if not adher.etudes(0): + arg += u'"Autre" ""' - # Construction de la liste des arguments de la boîte de demande de - # choix d'établissement. - arguments += [ - "--menu", "Choisissez l'établissement : ", "0", "0", "0", - "ENS", "", - "IUT Cachan", "", - "Maximilien Sorre", "", - "Gustave Eiffel", "", - "EFREI", "", - "ESTP", "", - "P1", "Université Panthéon Sorbonne", - "P2", "Université Panthéon Assas", - "P3", "Université de la Sorbonne Nouvelle", - "P4", "Université Paris Sorbonne", - "P5", "Université René Descartes", - "P6", "Université Pierre et Marie Curie", - "P7", "Université Paris Diderot", - "P8", "Université Vincennes Saint Denis", - "P9", "Université Paris Dauphine", - "P10", "Université de Nanterre", - "P11", "Université de Paris Sud (Orsay)", - "P12", "Université Val de Marne", - "P13", "Université Paris Nord", - "IUFM", "", - "Personnel ENS", "dans les appartements de l'ENS", - "Autre", "" - ] + annul, result = dialog(arg) + if annul: return 1 - # Affichage de la boîte de demande de choix d'établissement - code_erreur, sortie = dialog(arguments) - - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé - return 1 - - if sortie[0] == 'Autre': - # Si l'établissement de l'adhérent n'est pas dans la liste, alors, - # il faut proposer une boîte permettant de saisir l'établissement. - arguments_autre = [ - "--title", "Études de " + adher.Nom() + " (1/3)", - "--inputbox", "Précisez l'établissement d'études", "0", "0", adher.etudes(0) - ] - - # Affichage de la boîte de saisie - code_erreur, sortie = dialog(arguments_autre) - - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé - return 1 - - if sortie == ['']: - # Si l'utilisateur ne renseigne pas correctement l'établissement, - # c'est un échec et on construit la liste des arguments pour lui - # dire - arguments_echec = [ - "--title", "Études (1/3)", - "--msgbox", "Réponse invalide.\n\n\n", "0", "0" - ] - - # Affichage de la boîte de dialogue disant que c'est un échec. - dialog(arguments_echec) - - # Et on recommence + if result[0] == 'Autre': + arg = u'--title "Etudes de %s (1/3)" ' % adher.Nom() + arg += u'--inputbox "Précisez l\'établissement d\'études" 0 0 "%s"' % adher.etudes(0) + annul, result = dialog(arg) + if annul: return 1 + if result == ['']: + # Pas bon + arg = u'--title "Etudes (2/3)" ' + arg += u'--msgbox "Réponse invalide\n\n\n" 0 0' + dialog(arg) return __etudes_etab() - # Récupération de l'établissement - etudes[0] = sortie[0] + etudes[0] = result[0] def __etudes_annee(): - """ - Définition de l'année « d'étude » d'un adhérent. - - Paramètres: - - None - - Utilises: - - :py:func:`dialog` - - Retournes: - - None ou 1 (en cas de problème) - """ - # Construction de la liste des arguments à passer à dialog - arguments = [ - "--title", "Études de " + adher.Nom() + " (2/3)" - ] - + arg = u'--title "Etudes de %s (2/3)" ' % adher.Nom() if etudes[0] == 'ENS': - # Comme à l'ENS on fait pas comme les autres (on commence en L3) - arguments += [ - "--default-item", adher.etudes(1), - "--menu", "Choisissez l'année administrative", "0", "0", "0", - "1", "L3", - "2", "M1", - "3", "Agrégation/ARPE", - "4", "M2", - "5", "1ère année de thèse", - "6", "2ème année de thèse", - "7", "3ème année de thèse", - "Autre", "" - ] - - # Affichage de la boîte de dialogue - code_erreur, sortie = dialog(arguments) - - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé - return 1 - - elif etudes[0] in ['P1', 'P2', 'P3', 'P4', 'P5', 'P6', 'P7', 'P8', 'P9', 'P10', 'P11', 'P12', 'P13']: - # Si l'utilisateur a sélectionné une Université, on a un vrai - # parcours LMD - arguments += [ - "--default-item", adher.etudes(1), - "--menu", "Choisissez l'année administrative", "0", "0", "0", - "Deug 1", "1ère année de licence", - "Deug 2", "2ème année de licence", - "Licence", "3ème année de licence", - "Master 1", "1ère année de master", - "Master 2", "2ème année de master", - "Thèse 1", "1ère année de thèse", - "Thèse 2", "2ème année de thèse", - "Thèse 3", "3ème année de thèse", - "Autre", "" - ] - - # Affichage de la boîte de dialogue - code_erreur, sortie = dialog(arguments) - - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé - return 1 - + arg += u'--default-item "%s" ' % adher.etudes(1) + arg += u'--menu "Choisissez l\'année administrative" 0 0 0 ' + arg += u'"1" "License" ' + arg += u'"2" "Master 1" ' + arg += u'"3" "Agrégation" ' + arg += u'"4" "Master 2" ' + arg += u'"5" "1ère année thèse" ' + arg += u'"6" "2ème année thèse" ' + arg += u'"7" "3ème année thèse" ' + arg += u'"Autre" ""' + annul, result = dialog(arg) + if annul: return 1 + elif etudes[0] in [ 'P1', 'P2', 'P3', 'P4', 'P5', 'P6', 'P7', 'P8', 'P9', 'P10', 'P11', 'P12', 'P13' ]: + arg += u'--default-item "%s" ' % adher.etudes(1) + arg += u'--menu "Choisissez l\'année administrative" 0 0 0 ' + arg += u'"Deug 1" "Deug 1ère année" ' + arg += u'"Deug 2" "Deug 2ème année" ' + arg += u'"Licence" "" ' + arg += u'"Master 1" "Master 1ère année" ' + arg += u'"Master 2" "Master 2ème année" ' + arg += u'"Thèse 1" "1ème année thèse" ' + arg += u'"Thèse 2" "2ème année thèse" ' + arg += u'"Thèse 3" "3ème année thèse" ' + arg += u'"Autre" ""' + annul, result = dialog(arg) + if annul: return 1 elif etudes[0] == "Personnel ENS": - # Si on a affaire à un personnel ENS, on met 0 parce que c'est un - # champ obligatoire et que /normalement/ personne n'a comme année - # d'étude 0. - sortie = ['0'] - + result = ['0'] else: - # Dans les autres cas, comme l'ESTP et l'EFREI, on va spécifier - # l'année d'étude à la main plus tard. - sortie = ['Autre'] + result = ['Autre'] - if sortie[0] == 'Autre': - # On va spécifier les années d'études des établissements qui ne - # sont ni l'ENS ni une Université - arguments_autre = [ - "--title", "Études de " + adher.Nom() + " (2/3)", - "--inputbox", "Année administrative :\nEt UNIQUEMEN l'année (la section sera demandée après)", "0", "0", adher.etudes(1) - ] - - # Affichage de la boîte de saisie de l'année administrative - code_erreur, sortie = dialog(arguments_autre) - - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé - return 1 - - if sortie == ['']: - # Si l'utilisateur ne renseigne pas correctement l'année - # d'étude, c'est un échec et on construit la liste des - # arguments pour lui dire. - arguments_echec = [ - "--title", "Études (2/3)", - "--msgbox", "Réponse invalide\n\n\n", "0", "0" - ] - - # Affichage de la boîte de dialogue disant que c'est un échec - dialog(arguments_echec) - - # Et on recommence + if result[0] == 'Autre': + arg = u'--title "Etudes de %s (2/3)" ' % adher.Nom() + arg += u'--inputbox "Année adminstrative :\nET UNIQUEMENT l\'ANNEE : la section sera demandée après." 0 0 "%s"' % adher.etudes(1) + annul, result = dialog(arg) + if annul: return 1 + if result == ['']: + # Pas bon + arg = u'--title "Etudes (2/3)" ' + arg += u'--msgbox "Réponse invalide\n\n\n" 0 0' + dialog(arg) return __etudes_annee() - # Récupération de l'année administrative - etudes[1] = sortie[0] + etudes[1] = result[0] def __etudes_section(): - """ - Définition de la section d'un adhérent. - - Paramètres: - - None - - Utilises: - - :py:func:`dialog` - - Retournes: - - None ou 1 (en cas de problème) - """ - # Construction de la liste des arguments à passer à dialog - arguments = [ - "--title", "Études de " + adher.Nom() + " (3/3)" - ] + arg = u'--title "Etudes de %s (3/3)" ' % adher.Nom() + # Pour l'ENS if etudes[0] == 'ENS': - # Comme à l'ENS on fait pas comme les autres - arguments += [ - "--default-item", adher.etudes(2) - ] + arg += u'--default-item "%s" ' % adher.etudes(2) if etudes[1] in '1234': - # Dans ce cas là, on a une section/département - arguments += [ - "--menu", "Choisissez la section :", "0", "0", "0", - "A0", "Informatique", - "A1", "Mathématiques", - "A2", "Physique fondamentale", - "A''2", "Chimie", - "A3", "Biologie", - "C", "Art et création industrielle", - "D2", "Economie gestion", - "D3", "Sciences sociales", - "E", "Anglais" - ] - - if etudes[1] == '1': - # Si l'adhérent est un 1A, il peut être un SAPHIRE - arguments += [ - "SAPHIRE", "Sciences Appliquées en PHysique et Ingénierie pour la Recherche et l'Enseignement" - ] - elif etudes[1] == '2': - # En 2ème année, les SAPHIRE deviennent: - arguments += [ - "B1", "Mécanique", - "B2", "Génie civil", - "B3", "Génie mécanique", - "EEA", "Électronique, électrotechnique et automatique" - ] - else: - # En 3A+, on peut tout ça (y compris des trucs existent - # plus) - arguments += [ - "A'2", "Physique appliquée", - "B1", "Mécanique", - "B2", "Génie civil", - "B3", "Génie mécanique", - "B4", "Génie électrique" - ] - + arg += u'--menu "Choisissez la section : " 0 0 0 ' else: - # Dans ce cas, c'est qu'on est soit en thèse soit "Autre" et - # on considère que l'adhérent a un laboratoire - arguments += [ - "--menu", "Choisissez le laboratoire :", "0", "0", "0", - "CMLA", "Centre de Mathématiques et de Leurs Applications", - "GAPP", "Groupe d'Analyse des Politiques Publiques", - "IDHE", "Institutions et Dynamiques Historiques de l'Economie", - "LBPA", "Laboratoire de Biotechnologies et Pharmacologie génétique Appliquées", - "LMT", "Laboratoire de Mécanique et Technologie", - "LPQM", "Laboratoire de Photonique Quantique et Moléculaire" - "LSV", "Laboratoire de Spécification et Vérification", - "LURPA", "Laboratoire Universitaire de Recherche en Production Automatisée", - "PPSM", "Laboratoire de Photophysique et Photochimie Supramoléculaires et Macromoléculaires" - "SATIE", "Systèmes et Applications des Technologies de l'Information et de l'Énergie" - "STEF", "Sciences Techniques Éducation Formation" - ] + arg += u'--menu "Choisissez le laboratoire :" 0 0 0 ' + if not etudes[1] in '1234': + arg += u'"CMLA" "Centre de Mathématiques et de Leurs Applications" ' + arg += u'"GAPP" "Groupe d\'Analyse des Politiques Publiques" ' + arg += u'"IDHE" "Institutions et Dynamiques Historiques de l\'Economie" ' + arg += u'"LBPA" "Laboratoire de Biotechnologies et Pharmacologie génétique Appliquées" ' + arg += u'"LMT" "Laboratoire de Mécanique et Technologie" ' + arg += u'"LPQM" "Laboratoire de Photonique Quantique et Moléculaire" ' + arg += u'"LSV" "Laboratoire de Spécification et Vérification" ' + arg += u'"LURPA" "Laboratoire Universitaire de Recherche en Production Automatisée" ' + arg += u'"PPSM" "Laboratoire de Photophysique et Photochimie Supramoléculaires et Macromoléculaires" ' + arg += u'"SATIE" "Systèmes et Applications des Technologies de l\'Information et de l\'Energie" ' + arg += u'"STEF" "Sciences Techniques Education Formation" ' + if etudes[1] in '1234': + arg += u'"A0" "Informatique" ' + arg += u'"A1" "Mathématiques" ' + arg += u'"A2" "Physique fondamentale" ' + arg += u'"A\'\'2" "Chimie" ' + arg += u'"A3" "Biochimie" ' + if etudes[1] == '1': + arg += u'"SAPHIRE" "Sciences Appliquées en PHysique et Ingénierie pour la Recherche et l\'Enseignement" ' + elif etudes[1] == '2': + arg += u'"EEA" "Électronique, électrotechnique et automatique" ' + arg += u'"B1" "Mécanique" ' + arg += u'"B2" "Génie civil" ' + arg += u'"B3" "Génie mécanique" ' + else: + arg += u'"B1" "Mécanique" ' + arg += u'"B2" "Génie civil" ' + arg += u'"B3" "Génie mécanique" ' + arg += u'"A\'2" "Physique appliquée" ' + arg += u'"B4" "Génie électrique" ' + arg += u'"C" "Art et création industrielle" ' + arg += u'"D2" "Economie gestion" ' + arg += u'"D3" "Sciences sociales" ' + arg += u'"E" "Anglais" ' - arguments += [ - "Autre", "" - ] - - # Affichage de la fenêtre de sélection de section/laboratoire - code_erreur, sortie = dialog(arguments) - - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé - return 1 - - if sortie == ['']: - # Si l'utilisateur ne renseigne pas correctement l'année - # d'étude, c'est un échec et on construit la liste des - # arguments pour lui dire. - arguments_echec = [ - "--title", "Études (2/3)", - "--msgbox", "Réponse invalide\n\n\n", "0", "0" - ] - - # Affichage de la boîte de dialogue disant que c'est un échec - dialog(arguments_echec) - - # Et on recommence + arg += u'"Autre" ""' + annul, result = dialog(arg) + if annul: return 1 + if result == ['']: + # Pas bon + arg = u'--title "Etudes (2/3)" ' + arg += u'--msgbox "Réponse invalide\n\n\n" 0 0' + dialog(arg) return __etudes_annee() - elif etudes[0] == 'Personnel ENS': - # Si l'adhérent est un personnel ENS, il n'a ni section ni - # laboratoire, du coup on met "n/a" - sortie = ['n/a'] - + result = ['n/a'] else: - # Si l'adhérent est inscris dans une Université ou un établissement - # du supérieur qui n'est pas l'ENS il a pour section "Autre" et elle - # sera spécifiée plus tard. - sortie = ['Autre'] + result = ['Autre'] - if sortie[0] == 'Autre': - # Pour les adhérents inscris dans le supérieur non-ENS, on va - # spécifier la section/le laboratoire - # On construit une liste d'arguments à passer à dialog afin de - # demander à l'utilisateur de renseigner ce qu'il faut. - arguments_autre = [ - "--title", "Études de " + adher.Nom() + " (3/3)", - "--inputbox", "Section : ", "0", "0", adher.etudes(2) - ] - - # Affichage de la boîte demandant de spécifier la section - code_erreur, sortie = dialog(arguments_autre) - - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé - return 1 - - if sortie == ['']: - # Si l'utilisateur ne renseigne pas correctement l'année - # d'étude, c'est un échec et on construit la liste des - # arguments pour lui dire. - arguments_echec = [ - "--title", "Études (3/3)", - "--msgbox", "Réponse invalide\n\n\n", "0", "0" - ] - - # Affichage de la boîte de dialogue disant que c'est un échec - dialog(arguments_echec) - - # Et on recommence + if result[0] == 'Autre': + arg = u'--title "Etudes de %s (3/3)" ' % adher.Nom() + arg += u'--inputbox "Section : " 0 0 "%s"' % adher.etudes(2) + annul, result = dialog(arg) + if annul: return 1 + if result == ['']: + # Pas bon + arg = u'--title "Etudes (3/3)" ' + arg += u'--msgbox "Réponse invalide\n\n\n" 0 0' + dialog(arg) return __etudes_section() - # Récupération de la section/du laboratoire - etudes[2] = sortie[0] + etudes[2] = result[0] - # Véritable début de la fonction :py:func:`set_etudes` - # Initialisation de la liste `etudes` etudes = ['', '', ''] step = 1 - while step < 3: - # C'est-à-dire tant que tous les éléments d'`etudes` n'ont pas été - # peuplés. + while 1: if step == 1: - # On s'occupe de l'établissement. - if __etudes_etab(): - # Si :py:func:`__etudes_etab` renvoit 1, c'est que ça a échoué. - # On renvoit donc un code d'erreur non nul. - return 1 - else: - # Si tout s'est bien passé, on passe à l'étape suivante. - step += 1 + if __etudes_etab(): return 1 + else: step += 1 if step == 2: - # On s'occupe de l'année. - if __etudes_annee(): - # Si :py:func:`__etudes_annee` renvoit 1, c'est que ça a échoué. - # On retourne à l'étape précédente. - step -= 1 - else: - # Tout s'est bien passé, on passe à l'étape suivante. - step += 1 + if __etudes_annee(): step -= 1 + else: step += 1 if step == 3: - # On s'occupe de la section/du laboratoire - if __etudes_section(): - # Si :py:func:`__etudes_section` renvoit 1, c'est que ça a - # échoué. On retourne à l'étape précédente. - step -= 1 - else: - # Tout s'est bien passé et on a fini. - break + if __etudes_section(): step -= 1 + else: break try: - # Tentative de peuplement de la variable etudes adher.etudes(etudes) - - except ValueError as exception: - # Construction de la liste des arguments à passer à dialog pour une - # boîte d'erreur. - arguments_echec = [ - "--title", "Études de " + adher.Nom(), - "--msgbox", to_unicode(exception.args[0]) + "\n\n\n", "0", "0" - ] - - # Affichage de la boîte de dialogue disant que c'est un échec - dialog(arguments_echec) - - # Et on recommence + except ValueError, c: + arg = u'--title "Etudes de %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % to_unicode(c.args[0]) + dialog(arg) return set_etudes(adher) def set_mail(adher): + u""" + Choix d'une adresse mail crans ou extérieure. + Retourne ensuite le résultat de : + * set_mail_ext si adresse ext + * set_compte si compte crans """ - Définition d'une adresse mail extérieure ou @crans.org si elle est liée à - un compte Crans. - - Paramètres: - - ``adher`` : instance de la classe :py:class:`ldap_crans.Adherent` - - Utilises: - - :py:func:`dialog` - - :py:class:`ldap_crans.Adherent` - - :py:func:`set_compte` - - :py:func:`set_mail_ext` - - Retournes: - - None ou 1 (en cas de problème) - """ - if 'Nounou' in adher.droits() and not isadm: - # Si l'adhérent à modifier est Nounou et que l'utilisateur n'est pas - # administrateur au sens de :py:func:`user_test.isadm`, on dit à - # l'utilisateur qu'il est bien mignon mais qu'il a pas le droit. - arguments_echec = [ - "--title", "Adresse mail de " + adher.Nom(), - "--msgbox", "T'es bien mignon(ne) mais t'as le droit de faire ça.\n" + \ - "Il faut être administrateur pour modifier le mail d'une nounou.\n\n\n", "0", "0" - ] - - # Affichage de la boîte dialogue de "NOPE" - dialog(arguments_echec) + if u'Nounou' in adher.droits() and not isadm: + arg = u'--title "Adresse mail de %s" ' % adher.Nom() + arg += u'--msgbox "Vous n\'avez pas les droits necessaires pour effectuer cette opération.\n\n\n" 0 0' + dialog(arg) return if not isinstance(adher, Club) and not adher.adherentPayant(): - # Si l'adhérent n'est pas un Club et que l'adhérent a une adhésion - # gratuite (XXX ça existe plus les connexions gratuites ?), alors on - # lui demande une adresse mail extérieure. set_mail_ext(adher) return while 1: - arguments = [ - "--title", "Adresse mail de " + adher.Nom(), - "--menu", "Adresse mail de l'adhérent :", "0", "0", "0", - "Adresse mail extérieure", "" - ] - + arg = u'--title "Adresse mail de %s" ' % adher.Nom() + arg += u'--menu "Adresse mail de l\'adhérent :" 0 0 0 ' + arg += u'"Adresse mail extérieure" "" ' if adher.compte(): - # Si l'adhérent a un compte Crans - arguments += [ - "Laisser le compte Crans", "(login : " + adher.compte() +")" - ] + arg += u'"Laisser le compte crans" "(login : %s)"' % adher.compte() else: - # S'il n'en a pas - arguments += [ - "Créer un compte Crans", "(adresse @crans.org)" - ] + arg += u'"Créer un compte crans" "(adresse @crans.org)"' - # Affichage de la boîte de dialogue - code_erreur, sortie = dialog(arguments) + annul, result = dialog(arg) + if annul: return 1 - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé - return 1 - - if sortie[0].split()[0] == 'Laisser': - # Si l'adhérent a un compte Crans, il ne peut pas se mettre en - # adresse mail extérieure (ni modifier son adresse, ftm). + if result[0].split()[0] == 'Laisser': break - elif sortie[0].split()[1] == 'un': - # Si l'adhérent n'a pas de compte Crans - if not set_compte(adher): - # et que la création du compte Crans n'a pas échoué, alors - # s'interrompt - break + elif result[0].split()[1] == u'un': + if not set_compte(adher): break else: - # Si l'adhérent n'a pas de compte Crans et n'en veut pas. - if not set_mail_ext(adher): - # Si la création d'une adresse mail n'a pas échoué, on - # s'interrompt. - break + if not set_mail_ext(adher): break def set_mail_ext(adher): + u""" + Demande l'adresse mail extérieure d'un adhérent """ - Définition d'une adresse mail extérieure à un adhérent. + default = adher.mail() + if default.endswith('@crans.org'): + # C'était une adresse crans + default = '' - Paramètres: - - ``adher`` : instance de la classe :py:class:`ldap_crans.Adherent` - - Utilises: - - :py:func:`dialog` - - :py:class:`ldap_crans.Adherent` - - Peut lever: - - :py:exc:`ValueError` - - Retournes: - - None ou 1 (en cas de problème) - """ - # Par défaut, on considère une adresse mail déjà renseignée par l'adhérent - defaut = adher.mail() - if defaut.endswith('@crans.org'): - # Si cette adresse mail est en "@crans.org", c'est que c'est pas une - # adresse mail extérieure et on l'oublie - defaut = '' - - arguments = [ - "--title", "Adresse mail extérieure pour " + adher.Nom(), - "--inputbox", "Adresse : ", "0", "0", defaut - ] - - # Affichage de la boîte de dialogue - code_erreur, sortie = dialog(arguments) - - - if code_erreur: - # Si le code d'erreur vaut 1, donc si l'utilisateur a annulé - return 1 - - try: - # Tentative de peuplement de la variable mail - adher.mail(sortie[0]) - except ValueError as exception: - # Construction de la liste des arguments à passer à dialog pour - # construire une boîte d'erreur - arguments_echec = [ - "--title", "Adresse mail extérieure de " + adher.Nom(), - "--msgbox", to_unicode(exception.args[0]) + "\n\n\n", "0", "0" - ] - - # Affichage de la boîte de dialogue - dialog(arguments_echec) + arg = u'--title "Adresse mail extérieure pour %s" ' % adher.Nom() + arg += u'--inputbox "Adresse : " 0 0 "%s"' % default + annul, result = dialog(arg) + if annul: return 1 + try: adher.mail(result[0]) + except ValueError, c: + arg = u'--title "Adresse mail extérieure de %s" ' % adher.Nom() + arg += u'--msgbox "%s\n\n\n" 0 0' % to_unicode(c.args[0]) + dialog(arg) return set_mail_ext(adher) def set_etat_civil(adher): - """ + u""" Modifie l'état-civil (nom, prénom) d'un adhérent. """ if u'Nounou' in adher.droits() and not isadm: @@ -940,7 +508,7 @@ def set_etat_civil(adher): return set_etat_civil(adher) def set_compte(adher): - """ + u""" Créé un compte sur vert pour un adhérent. """ @@ -994,14 +562,14 @@ def set_compte(adher): continue break - txt = "Le compte ne sera créé que lors de l'enregistrement des données\n\n" - txt += "L'adresse mail de l'adhérent est : %s@crans.org\n" % login + txt = u"Le compte ne sera créé que lors de l'enregistrement des données\n\n" + txt += u"L'adresse mail de l'adhérent est : %s@crans.org\n" % login a = adher.canonical_alias() if a: - txt += "L'adhérent possède également l'alias : %s" % a + txt += u"L'adhérent possède également l'alias : %s" % a else: - txt += "\n\Zr\Z1L'adresse mail %s.%s@crans.org étant déja prise l'adhérent ne peut pas l'utiliser.\Zn" % (adher.prenom(), adher.nom()) + txt += u"\n\Zr\Z1L'adresse mail %s.%s@crans.org étant déja prise l'adhérent ne peut pas l'utiliser.\Zn" % (adher.prenom(), adher.nom()) txt += u'\n' @@ -1010,7 +578,7 @@ def set_compte(adher): dialog(arg) def set_droits(adher): - """ Définition des droits de l'adhérent """ + u""" Définition des droits de l'adhérent """ arg = u'--title "Droits de %s" ' % adher.Nom() arg += u'--separate-output ' arg += u'--checklist "" 0 0 0 ' @@ -1097,7 +665,7 @@ def set_droits(adher): return 1 def set_actif(adher): - """ + u""" Définition de l'état d'activité du compte. """ # Initialisation des différentes checkbox @@ -1126,7 +694,7 @@ def set_actif(adher): adher.active(True) def del_adher(adher): - """ + u""" Destruction adhérent """ if u'Nounou' in adher.droits() and not isadm: @@ -1189,7 +757,7 @@ def del_adher(adher): ## Fonctions de remplissage ou modification des paramètres club def set_responsable(club): - """ Modifie le responsable d'un club """ + u""" Modifie le responsable d'un club """ arg = u'--title "Responsable du club" ' arg += u'--msgbox "Séléctionnez l\'adhérent responsable du club\n\n\n" 0 0' dialog(arg) @@ -1199,7 +767,7 @@ def set_responsable(club): club.responsable(resp) def set_imprimeurs(club): - """ Modifie les imprimeurs d'un club """ + u""" Modifie les imprimeurs d'un club """ while 1: arg = u'--title "Imprimeurs de %s" ' % club.Nom() if len(club.imprimeurs()) > 0: @@ -1220,7 +788,7 @@ def set_imprimeurs(club): while 1: os.system('clear') choix = None - cprint("Ce club a plusieurs imprimeurs :") + cprint(u"Ce club a plusieurs imprimeurs :") aff(liste) i = affich_tools.prompt(u'Votre choix ? (0 pour annuler) aid =') if i == '0': break @@ -1264,7 +832,7 @@ def set_imprimeurs(club): continue def set_club_nom(club): - """Définit le nom du club""" + u"""Définit le nom du club""" # Nom du club arg = u'--title "Nom" ' arg += u'--inputbox "Nom du club ?" 0 0 "%s"' % club.Nom() @@ -1279,7 +847,7 @@ def set_club_nom(club): dialog(arg) def set_local(club): - """ Définit le local d'un club """ + u""" Définit le local d'un club """ try: club.chbre('&é"') # Fait une erreur except ValueError, c: @@ -1302,7 +870,7 @@ def set_local(club): def set_club_compte(club): - """ + u""" Créé un compte sur vert pour un club. """ @@ -1329,8 +897,8 @@ def set_club_compte(club): continue break - txt = "Le compte ne sera créé que lors de l'enregistrement des données\n\n" - txt += "L'adresse mail du club est : %s@crans.org\n" % login + txt = u"Le compte ne sera créé que lors de l'enregistrement des données\n\n" + txt += u"L'adresse mail du club est : %s@crans.org\n" % login txt += u'\n' @@ -1343,8 +911,8 @@ def set_club_compte(club): ## (suivant la classe fournie) def set_rque(clas): - """Définit le commentaire (méthode info de clas)""" - return __prompt_input_menu(clas.info, u'Remarque', "Ajouter ou modifier une remarque\nPour ajouter une remarque modifier la dernière de la liste.") + u"""Définit le commentaire (méthode info de clas)""" + return __prompt_input_menu(clas.info, u'Remarque', u"Ajouter ou modifier une remarque\nPour ajouter une remarque modifier la dernière de la liste.") def __prompt_input_menu(method, titre, prompt): arg = u'--title "%s" ' % titre @@ -1393,7 +961,7 @@ def __prompt_input_menu(method, titre, prompt): return __prompt_input_menu(method, titre, prompt) def set_solde(clas): - """ Débit ou crédit d'un compte """ + u""" Débit ou crédit d'un compte """ while 1: arg = u'--title "Crédit / débit du compte de %s" ' % clas.Nom() arg += u'--inputbox "Solde actuel : %s\n Opération à effectuer (+ pour crédits et - pour débit) ?" 0 0 "" ' % clas.solde() @@ -1421,7 +989,7 @@ def set_solde(clas): dialog(arg) def set_vente(proprio): - """ + u""" Vend un objet à l'adherent : génère la facture associée. """ from config.factures import items @@ -1490,8 +1058,8 @@ def set_vente(proprio): texte = [] for art in f.articles(): - texte.append("%dx %s à %s€" % (art['nombre'], art['designation'], art['pu'])) - texte.append("Total à payer: %s€" % f.total()) + texte.append(u"%dx %s à %s€" % (art['nombre'], art['designation'], art['pu'])) + texte.append(u"Total à payer: %s€" % f.total()) arg = u'--title "Résumé de la facture à payer" ' arg += u'--msgbox "%s\n" 0 0' % '\n'.join(texte) dialog(arg) @@ -1523,19 +1091,19 @@ def set_vente(proprio): arg += u'--inputbox "Commentaire à insérer ?" 0 0' if result[0] == "Spc": f.modePaiement('liquide') - paiement="Espèce" + paiement=u"Espèce" annul, comment = dialog(arg) elif result[0] == "Cb": f.modePaiement('carte') - paiement="Carte Bancaire" + paiement=u"Carte Bancaire" comment = None elif result[0] == "Chq": f.modePaiement('cheque') - paiement="Chèque" + paiement=u"Chèque" annul, comment = dialog(arg) elif result[0] == "Sol" and isimprimeur: f.modePaiement('solde') - paiement="Solde Crans" + paiement=u"Solde Crans" comment = None if comment and comment[0]: @@ -1579,7 +1147,7 @@ def set_vente(proprio): def confirm(clas): - """ Demande confirmation avant enregistrement""" + u""" Demande confirmation avant enregistrement""" global in_facture # On va faire en texte, les couleurs ne passent pas en curses os.system('clear') @@ -1587,7 +1155,7 @@ def confirm(clas): if in_facture is not None: cprint("Une facture d'un montant total de %s € sera confirmée." % (in_facture.total()), "rouge") while 1: - r = affich_tools.prompt("Valider et enregister ? [O/N]") + r = affich_tools.prompt(u"Valider et enregister ? [O/N]") if r == 'O' or r == 'o': break elif r == 'N' or r == 'n': @@ -1605,10 +1173,10 @@ def confirm(clas): in_facture = None cprint(res) - affich_tools.prompt("Appuyez sur ENTREE pour continuer") + affich_tools.prompt(u"Appuyez sur ENTREE pour continuer") def set_blackliste(clas): - """ Édite ou ajoute un item de la blackliste """ + u""" Édite ou ajoute un item de la blackliste """ bl = clas.blacklist() if not bl: # Pas d'entrée à éditer @@ -1722,7 +1290,7 @@ def set_blackliste(clas): ## Fonction de remplissage ou modification des paramètres club ou adhérent def on_off(condition): - """ + u""" Renvoie 'on' ou 'off' selon la condition (pour dialog). """ if condition: @@ -1731,19 +1299,19 @@ def on_off(condition): return 'off' def set_type_de_connexion(adherent): - """ + u""" Définition du type de connexion: gratuite limité ou normale. """ if isinstance(adherent, Club): return - annul, result = dlg.menu("Type de connexion", - choices=[("1", "Connexion normale"), - ("2", "Connexion gratuite")]) + annul, result = dlg.menu(u"Type de connexion", + choices=[("1", u"Connexion normale"), + ("2", u"Connexion gratuite")]) if annul: return 1 adherent.adherentPayant(result == "1") def set_admin(proprio): - """ + u""" Définition de l'état administratif : carte d'étudiant et paiement. """ # Le proprietaire a-t-il une section carte d'étudiant (pas les clubs) ? @@ -2024,7 +1592,7 @@ def new_club(club): else: break def modif_club(club): - """ + u""" Modification du club fourni (instance de club) Retourne 1 si annulation. """ @@ -2079,7 +1647,7 @@ def modif_club(club): return confirm(club) def select_club(clas): - """ Choix d'un club """ + u""" Choix d'un club """ arg = u'--title "Recherche d\'un club" ' clubs = clas.search('cid=*')['club'] @@ -2096,7 +1664,7 @@ def select_club(clas): return clas.search('cid=%s' % res[0], 'w')['club'][0] def del_club(club): - """ Destruction club """ + u""" Destruction club """ quoi = u'Toutes les machines associées à cet adhérent seront détruites' while 1: arg = u'--title "Destruction club " --colors ' @@ -2234,7 +1802,7 @@ def set_wifi(machine): elif result[4].lower().strip() == "non": machine.hotspot(False) else: - err += "Les valeurs possibles pour le parametre hotspot\n sont \"oui\" ou \"non\"\n" + err += u"Les valeurs possibles pour le parametre hotspot\n sont \"oui\" ou \"non\"\n" try: #On vérifie toutes les variables avant de sauvegarder @@ -2262,7 +1830,7 @@ def set_wifi(machine): return set_wifi(machine) def set_machine(machine): - """ + u""" Définition des paramètres d'une machine : * Nom de machine * Adresse MAC @@ -2380,25 +1948,25 @@ def set_machine(machine): return set_machine(machine) def set_machine_exemption(machine): - """Définit les réseau exemptés de comptage d'upload pour la machine""" - if __prompt_input_menu(machine.exempt, u'Exemption', "Ajouter ou modifier un réseau/une ip vers lequel on ne compte pas l'upload (format x.y.z.t[/m])\nPour ajouter un réseau modifier la fin de la liste.") or confirm(machine): + u"""Définit les réseau exemptés de comptage d'upload pour la machine""" + if __prompt_input_menu(machine.exempt, u'Exemption', u"Ajouter ou modifier un réseau/une ip vers lequel on ne compte pas l'upload (format x.y.z.t[/m])\nPour ajouter un réseau modifier la fin de la liste.") or confirm(machine): machine.restore() return 1 def set_machine_alias(machine): - """Définit la liste des alias d'une machine""" + u"""Définit la liste des alias d'une machine""" if __prompt_input_menu(machine.alias, 'Alias machine', "Entrez ou modifier un alias machine.\nPour ajouter un alias modifier le dernier de la liste.") or confirm(machine): machine.restore() return 1 def set_machine_sshFingerprint(machine): - """Définit la liste des fingerprints d'une machine""" + u"""Définit la liste des fingerprints d'une machine""" if __prompt_input_menu(machine.sshFingerprint, 'SSHFingerprint machine', "Entrez ou modifier la fingerprint ssh de la machine.\nPour ajouter une fingerprint modifier le dernier de la liste.") or confirm(machine): machine.restore() return 1 def del_machine(machine): - """ + u""" Destruction machine """ while 1: @@ -2424,7 +1992,7 @@ def del_machine(machine): dialog(arg) def del_facture(facture): - """ + u""" Destruction facture """ while 1: @@ -2453,7 +2021,7 @@ def del_facture(facture): ## Fonctions principales d'interface def new_adher(adher): - """ + u""" Définition des propriétés d'un adhérent 4 etapes : * set_bases @@ -2482,7 +2050,7 @@ def new_adher(adher): if not confirm(adher): break def modif_adher(adher): - """ + u""" Modification de l'adhérent fourni (instance de adhérent) Retourne 1 si annulation. """ @@ -2633,7 +2201,7 @@ def modif_adher(adher): __prompt_input_menu(adher.alias, 'Alias mail', "Entrez ou modifier un alias mail.\nPour ajouter un alias modifier le dernier de la liste.") elif res[0] == 'GPGFingerprint': - __prompt_input_menu(adher.gpgFingerprint, 'GPG Fingerprint', "Entrez ou modifier une empreinte GPG que l'adhérent possède (tout abus sera sanctionné).\nPour ajouter une empreinte modifier le dernier de la liste.") + __prompt_input_menu(adher.gpgFingerprint, 'GPG Fingerprint', u"Entrez ou modifier une empreinte GPG que l'adhérent possède (tout abus sera sanctionné).\nPour ajouter une empreinte modifier le dernier de la liste.") elif res[0] == "Etat": set_actif(adher) @@ -2662,7 +2230,7 @@ def modif_adher(adher): return confirm(adher) def modif_machine(machine): - """ + u""" Modification de la machine fournie (instance de machine) Retourne 1 si annulation. """ @@ -2729,7 +2297,7 @@ def modif_facture(facture): if not (facture.controle() == "TRUE" or facture.controle() == "FALSE") and not facture.recuPaiement(): arg += u'"Mode" "Mode de paiement" ' if not (facture.controle() == "TRUE" or facture.controle() == "FALSE") and facture.modePaiement(): - arg += u'"Rec" "Valider le reçu du paiement ou non" ' + arg += u'"Recu" "Valider le reçu du paiement ou non" ' if facture.recuPaiement() and (iscontroleur or isadm): arg += u'"Controle" "Valider ou non le contrôle de la facture." ' @@ -2751,7 +2319,7 @@ def modif_facture(facture): ## Fonction de sélection (adhérent ou machine) def select(clas, quoi, mde=''): - """ + u""" Interface de choix d'un adhérent, d'une machine ou d'un club Retourne une instance de la classe choisie. quoi est la chaine utilisée pour la demande (%sid=?) @@ -2905,7 +2473,7 @@ def select(clas, quoi, mde=''): while 1: os.system('clear') choix = None - cprint("Plusieurs réponses correspondant à votre requête ont été trouvées :") + cprint(u"Plusieurs réponses correspondant à votre requête ont été trouvées :") aff(valid) i = affich_tools.prompt(u'Votre choix ? (0 pour annuler) %sid =' % quoi) if i == '0': break @@ -2924,7 +2492,7 @@ def select(clas, quoi, mde=''): continue os.system('clear') - cprint("Sélection : ") + cprint(u"Sélection : ") aff(choix) while 1: @@ -2948,7 +2516,7 @@ def select(clas, quoi, mde=''): # Sinon retour interface de sélection def menu_principal(): - """ + u""" Affiche le menu de choix initial """ @@ -3123,7 +2691,7 @@ def menu_principal(): # Les gens qui ne paient pas n'ont le droit qu'à une # seule machine fixe if proprio.machines_fixes(): - dlg.msgbox("Le type de compte de cet adhérent ne lui permet pas d'avoir de machine supplémentaire") + dlg.msgbox(u"Le type de compte de cet adhérent ne lui permet pas d'avoir de machine supplémentaire") continue else: choix = "Fixe" @@ -3248,16 +2816,16 @@ if __name__ == '__main__': exit = 0 except KeyboardInterrupt: os.system('clear') - cprint("Interruption par l'utilisateur.") + cprint(u"Interruption par l'utilisateur.") exit = 255 except SystemExit, c: if c.__str__() == '254': os.system('reset') - cprint("Votre session d'édition a été tuée.") + cprint(u"Votre session d'édition a été tuée.") exit = c except: if not debug: os.system('clear') - cprint("""Une erreur fatale s'est produite durant l'exécution.""") + cprint(u"""Une erreur fatale s'est produite durant l'exécution.""") # Report de bug import traceback @@ -3286,7 +2854,7 @@ Subject: Bugreport %s conn.quit() sys.stderr.write(to_encoding("Un rapport de bug à été automatiquement envoyé.\n", encoding)) else: - cprint("Merci de faire parvenir un rapport de bug à nounou") + cprint(u"Merci de faire parvenir un rapport de bug à nounou") except: sys.stderr.write(to_encoding("Impossible d'envoyer le rapport de bug.\n", encoding)) @@ -3311,9 +2879,9 @@ Subject: Bugreport %s # Restart toutes les 10 min : 03, 13, 23, 33, 43, 53 t = (13 - mn % 10) % 10 + 1 # Certaines machines le font -Aà 4-b if t == 0: t = 10 - cprint("Les modifications apportées à la base seront prises en compte dans %i min environ." % t) + cprint(u"Les modifications apportées à la base seront prises en compte dans %i min environ." % t) if debug: - cprint("Les services suivants seront redémarrés: ") + cprint(u"Les services suivants seront redémarrés: ") for s in serv: cprint(u'\t%s' % s) diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index f8a204d2..68840c83 100755 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -3069,7 +3069,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) def __host_alias(self, champ, new): """ Vérification de la validité d'un nom de machine """ # Supression des accents - new = strip_accents(decode(new)) + new = strip_accents(unicode(new, 'utf-8')) l, new = preattr(new) new = new.lower()