diff --git a/gestion/gest_crans.py b/gestion/gest_crans.py index bd718d6d..a91eb12d 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,10 +17,13 @@ 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 @@ -42,17 +45,20 @@ 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 = u"Imprimeur" in droits +isimprimeur = "Imprimeur" in droits iscontroleur = u'Tresorier' in droits isbureau = u'Bureau' in droits encoding = sys.stdin.encoding or 'UTF-8' -if u'Nounou' in droits: +if '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 @@ -84,373 +90,799 @@ in_facture = None ## Fonctions de remplissage ou modification des paramètres d'un adhérent def set_bases(adher): - u""" - Définition des paramètres de bases d'un adhérent : - * Nom - * Prenom - * Téléphone - * Chambre + """ + 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) """ - # 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 ' + # 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" + ] - # Affichage - annul, result = dialog(arg) - if annul: + # 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 - # Traitement - err = '' - try: adher.nom(result[0]) - except ValueError, c: err += c.args[0] + '\n' + # On se prépare psychologiquement à ce qu'il y ait des erreurs + erreur = '' - try: adher.prenom(result[1]) - 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.tel(result[2]) - 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' - # 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: + 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. return 1 - err += _set_chbre(adher, result[3]) + # 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]) - # 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 + # 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 return set_bases(adher) - if adher.chbre() == 'EXT': + # Gestion des gens qui n'habitent pas sur le campus + if adher.chbre() == "EXT": # Il faut demander l'adresse extérieure if set_addr_ext(adher): - # Annulation + # Si set_addr_ext() renvoie 1, c'est que l'utilisateur a annulé et + # on recommence. 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 """ - if chbre == '????': - # Réservé à un usage interne - return u'Chambre invalide\n' + Attribution de la chambre ``chbre`` à l'adhérent ``adher`` fourni. - 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] + 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` aff(squatteur) - 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, le géneur doit être parti. - return _set_chbre(adher, chbre) - return c.args[0] + '\n' - return u'' + # 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("????") + squatteur.save() + + # On recommence (si tout va bien, le squatteur n'habite plus + # là). + return _set_chbre(adher, chbre) + + return exception.args[0] + "\n" + + # Si tout s'est bien passé, on retourne une chaîne vide. + return "" def set_addr_ext(adher): - 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 + """ + Définition de l'adresse extérieure d'un adhérent. + Il ne faut utiliser ceci que si adher.chbre() == "EXT". - 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 + 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 ! return set_addr_ext(adher) def set_etudes(adher): - u""" - Définition des études en 3 questions : - * établissement - * année administrative - * section/labo + """ + 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) """ def __etudes_etab(): - arg = u'--title "Etudes de %s (1/3)" ' % adher.Nom() - if 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" ""' + """ + Définition de l'établissement d'étude d'un adhérent. - annul, result = dialog(arg) - if annul: return 1 + Paramètres: + - None - 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) + 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)" + ] + + 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) + ] + + # 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", "" + ] + + # 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 return __etudes_etab() - etudes[0] = result[0] + # Récupération de l'établissement + etudes[0] = sortie[0] def __etudes_annee(): - arg = u'--title "Etudes de %s (2/3)" ' % adher.Nom() - if etudes[0] == 'ENS': - 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": - result = ['0'] - else: - result = ['Autre'] + """ + Définition de l'année « d'étude » d'un adhérent. - 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) + 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)" + ] + + 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 + + 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'] + + 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'] + + 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 return __etudes_annee() - etudes[1] = result[0] + # Récupération de l'année administrative + etudes[1] = sortie[0] def __etudes_section(): - arg = u'--title "Etudes de %s (3/3)" ' % adher.Nom() + """ + 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)" + ] - # Pour l'ENS if etudes[0] == 'ENS': - arg += u'--default-item "%s" ' % adher.etudes(2) + # Comme à l'ENS on fait pas comme les autres + arguments += [ + "--default-item", adher.etudes(2) + ] if etudes[1] in '1234': - arg += u'--menu "Choisissez la section : " 0 0 0 ' - else: - 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" ' + # 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': - arg += u'"SAPHIRE" "Sciences Appliquées en PHysique et Ingénierie pour la Recherche et l\'Enseignement" ' + # 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': - 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" ' + # 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: - 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" ' + # 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'"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) + 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" + ] + + 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 return __etudes_annee() - elif etudes[0] == 'Personnel ENS': - result = ['n/a'] - else: - result = ['Autre'] - 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) + 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'] + + 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'] + + 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 return __etudes_section() - etudes[2] = result[0] + # Récupération de la section/du laboratoire + etudes[2] = sortie[0] + # Véritable début de la fonction :py:func:`set_etudes` + # Initialisation de la liste `etudes` etudes = ['', '', ''] step = 1 - while 1: + while step < 3: + # C'est-à-dire tant que tous les éléments d'`etudes` n'ont pas été + # peuplés. if step == 1: - if __etudes_etab(): return 1 - else: 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 step == 2: - if __etudes_annee(): step -= 1 - else: step += 1 + # 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 step == 3: - if __etudes_section(): step -= 1 - else: break + # 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 try: + # Tentative de peuplement de la variable etudes adher.etudes(etudes) - 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) + + 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 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 """ - 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) + 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) 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: - 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" "" ' + arguments = [ + "--title", "Adresse mail de " + adher.Nom(), + "--menu", "Adresse mail de l'adhérent :", "0", "0", "0", + "Adresse mail extérieure", "" + ] + if adher.compte(): - arg += u'"Laisser le compte crans" "(login : %s)"' % adher.compte() + # Si l'adhérent a un compte Crans + arguments += [ + "Laisser le compte Crans", "(login : " + adher.compte() +")" + ] else: - arg += u'"Créer un compte crans" "(adresse @crans.org)"' + # S'il n'en a pas + arguments += [ + "Créer un compte Crans", "(adresse @crans.org)" + ] - annul, result = dialog(arg) - if annul: return 1 + # Affichage de la boîte de dialogue + code_erreur, sortie = dialog(arguments) - if result[0].split()[0] == 'Laisser': + 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). break - elif result[0].split()[1] == u'un': - if not set_compte(adher): 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 else: - if not set_mail_ext(adher): break + # 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 def set_mail_ext(adher): - u""" - Demande l'adresse mail extérieure d'un adhérent """ - default = adher.mail() - if default.endswith('@crans.org'): - # C'était une adresse crans - default = '' + Définition d'une adresse mail extérieure à un adhérent. - 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 + 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) - 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: @@ -508,7 +940,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. """ @@ -562,14 +994,14 @@ def set_compte(adher): continue break - 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 + 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 a = adher.canonical_alias() if a: - txt += u"L'adhérent possède également l'alias : %s" % a + txt += "L'adhérent possède également l'alias : %s" % a else: - 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 += "\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' @@ -578,7 +1010,7 @@ def set_compte(adher): dialog(arg) def set_droits(adher): - u""" Définition des droits de l'adhérent """ + """ 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 ' @@ -665,7 +1097,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 @@ -694,7 +1126,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: @@ -757,7 +1189,7 @@ def del_adher(adher): ## Fonctions de remplissage ou modification des paramètres club def set_responsable(club): - u""" Modifie le responsable d'un club """ + """ 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) @@ -767,7 +1199,7 @@ def set_responsable(club): club.responsable(resp) def set_imprimeurs(club): - u""" Modifie les imprimeurs d'un club """ + """ Modifie les imprimeurs d'un club """ while 1: arg = u'--title "Imprimeurs de %s" ' % club.Nom() if len(club.imprimeurs()) > 0: @@ -788,7 +1220,7 @@ def set_imprimeurs(club): while 1: os.system('clear') choix = None - cprint(u"Ce club a plusieurs imprimeurs :") + cprint("Ce club a plusieurs imprimeurs :") aff(liste) i = affich_tools.prompt(u'Votre choix ? (0 pour annuler) aid =') if i == '0': break @@ -832,7 +1264,7 @@ def set_imprimeurs(club): continue def set_club_nom(club): - u"""Définit le nom du club""" + """Définit le nom du club""" # Nom du club arg = u'--title "Nom" ' arg += u'--inputbox "Nom du club ?" 0 0 "%s"' % club.Nom() @@ -847,7 +1279,7 @@ def set_club_nom(club): dialog(arg) def set_local(club): - u""" Définit le local d'un club """ + """ Définit le local d'un club """ try: club.chbre('&é"') # Fait une erreur except ValueError, c: @@ -870,7 +1302,7 @@ def set_local(club): def set_club_compte(club): - u""" + """ Créé un compte sur vert pour un club. """ @@ -897,8 +1329,8 @@ def set_club_compte(club): continue break - 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 = "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'\n' @@ -911,8 +1343,8 @@ def set_club_compte(club): ## (suivant la classe fournie) def set_rque(clas): - 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.") + """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.") def __prompt_input_menu(method, titre, prompt): arg = u'--title "%s" ' % titre @@ -961,7 +1393,7 @@ def __prompt_input_menu(method, titre, prompt): return __prompt_input_menu(method, titre, prompt) def set_solde(clas): - u""" Débit ou crédit d'un compte """ + """ 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() @@ -989,7 +1421,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 @@ -1058,8 +1490,8 @@ def set_vente(proprio): texte = [] for art in f.articles(): - texte.append(u"%dx %s à %s€" % (art['nombre'], art['designation'], art['pu'])) - texte.append(u"Total à payer: %s€" % f.total()) + texte.append("%dx %s à %s€" % (art['nombre'], art['designation'], art['pu'])) + texte.append("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) @@ -1091,19 +1523,19 @@ def set_vente(proprio): arg += u'--inputbox "Commentaire à insérer ?" 0 0' if result[0] == "Spc": f.modePaiement('liquide') - paiement=u"Espèce" + paiement="Espèce" annul, comment = dialog(arg) elif result[0] == "Cb": f.modePaiement('carte') - paiement=u"Carte Bancaire" + paiement="Carte Bancaire" comment = None elif result[0] == "Chq": f.modePaiement('cheque') - paiement=u"Chèque" + paiement="Chèque" annul, comment = dialog(arg) elif result[0] == "Sol" and isimprimeur: f.modePaiement('solde') - paiement=u"Solde Crans" + paiement="Solde Crans" comment = None if comment and comment[0]: @@ -1147,7 +1579,7 @@ def set_vente(proprio): def confirm(clas): - u""" Demande confirmation avant enregistrement""" + """ Demande confirmation avant enregistrement""" global in_facture # On va faire en texte, les couleurs ne passent pas en curses os.system('clear') @@ -1155,7 +1587,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(u"Valider et enregister ? [O/N]") + r = affich_tools.prompt("Valider et enregister ? [O/N]") if r == 'O' or r == 'o': break elif r == 'N' or r == 'n': @@ -1173,10 +1605,10 @@ def confirm(clas): in_facture = None cprint(res) - affich_tools.prompt(u"Appuyez sur ENTREE pour continuer") + affich_tools.prompt("Appuyez sur ENTREE pour continuer") def set_blackliste(clas): - u""" Édite ou ajoute un item de la blackliste """ + """ Édite ou ajoute un item de la blackliste """ bl = clas.blacklist() if not bl: # Pas d'entrée à éditer @@ -1290,7 +1722,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: @@ -1299,19 +1731,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(u"Type de connexion", - choices=[("1", u"Connexion normale"), - ("2", u"Connexion gratuite")]) + annul, result = dlg.menu("Type de connexion", + choices=[("1", "Connexion normale"), + ("2", "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) ? @@ -1592,7 +2024,7 @@ def new_club(club): else: break def modif_club(club): - u""" + """ Modification du club fourni (instance de club) Retourne 1 si annulation. """ @@ -1647,7 +2079,7 @@ def modif_club(club): return confirm(club) def select_club(clas): - u""" Choix d'un club """ + """ Choix d'un club """ arg = u'--title "Recherche d\'un club" ' clubs = clas.search('cid=*')['club'] @@ -1664,7 +2096,7 @@ def select_club(clas): return clas.search('cid=%s' % res[0], 'w')['club'][0] def del_club(club): - u""" Destruction club """ + """ Destruction club """ quoi = u'Toutes les machines associées à cet adhérent seront détruites' while 1: arg = u'--title "Destruction club " --colors ' @@ -1802,7 +2234,7 @@ def set_wifi(machine): elif result[4].lower().strip() == "non": machine.hotspot(False) else: - err += u"Les valeurs possibles pour le parametre hotspot\n sont \"oui\" ou \"non\"\n" + err += "Les valeurs possibles pour le parametre hotspot\n sont \"oui\" ou \"non\"\n" try: #On vérifie toutes les variables avant de sauvegarder @@ -1830,7 +2262,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 @@ -1948,25 +2380,25 @@ def set_machine(machine): return set_machine(machine) def set_machine_exemption(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): + """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): machine.restore() return 1 def set_machine_alias(machine): - u"""Définit la liste des alias d'une machine""" + """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): - u"""Définit la liste des fingerprints d'une machine""" + """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: @@ -1992,7 +2424,7 @@ def del_machine(machine): dialog(arg) def del_facture(facture): - u""" + """ Destruction facture """ while 1: @@ -2021,7 +2453,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 @@ -2050,7 +2482,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. """ @@ -2201,7 +2633,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', 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.") + __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.") elif res[0] == "Etat": set_actif(adher) @@ -2230,7 +2662,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. """ @@ -2297,7 +2729,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'"Recu" "Valider le reçu du paiement ou non" ' + arg += u'"Rec" "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." ' @@ -2319,7 +2751,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=?) @@ -2473,7 +2905,7 @@ def select(clas, quoi, mde=''): while 1: os.system('clear') choix = None - cprint(u"Plusieurs réponses correspondant à votre requête ont été trouvées :") + cprint("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 @@ -2492,7 +2924,7 @@ def select(clas, quoi, mde=''): continue os.system('clear') - cprint(u"Sélection : ") + cprint("Sélection : ") aff(choix) while 1: @@ -2516,7 +2948,7 @@ def select(clas, quoi, mde=''): # Sinon retour interface de sélection def menu_principal(): - u""" + """ Affiche le menu de choix initial """ @@ -2691,7 +3123,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(u"Le type de compte de cet adhérent ne lui permet pas d'avoir de machine supplémentaire") + dlg.msgbox("Le type de compte de cet adhérent ne lui permet pas d'avoir de machine supplémentaire") continue else: choix = "Fixe" @@ -2816,16 +3248,16 @@ if __name__ == '__main__': exit = 0 except KeyboardInterrupt: os.system('clear') - cprint(u"Interruption par l'utilisateur.") + cprint("Interruption par l'utilisateur.") exit = 255 except SystemExit, c: if c.__str__() == '254': os.system('reset') - cprint(u"Votre session d'édition a été tuée.") + cprint("Votre session d'édition a été tuée.") exit = c except: if not debug: os.system('clear') - cprint(u"""Une erreur fatale s'est produite durant l'exécution.""") + cprint("""Une erreur fatale s'est produite durant l'exécution.""") # Report de bug import traceback @@ -2854,7 +3286,7 @@ Subject: Bugreport %s conn.quit() sys.stderr.write(to_encoding("Un rapport de bug à été automatiquement envoyé.\n", encoding)) else: - cprint(u"Merci de faire parvenir un rapport de bug à nounou") + cprint("Merci de faire parvenir un rapport de bug à nounou") except: sys.stderr.write(to_encoding("Impossible d'envoyer le rapport de bug.\n", encoding)) @@ -2879,9 +3311,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(u"Les modifications apportées à la base seront prises en compte dans %i min environ." % t) + cprint("Les modifications apportées à la base seront prises en compte dans %i min environ." % t) if debug: - cprint(u"Les services suivants seront redémarrés: ") + cprint("Les services suivants seront redémarrés: ") for s in serv: cprint(u'\t%s' % s)