diff --git a/gestion/ldap_crans.py b/gestion/ldap_crans.py index 33624a66..5aeb9a10 100644 --- a/gestion/ldap_crans.py +++ b/gestion/ldap_crans.py @@ -127,7 +127,7 @@ script_utilisateur = cur_user ################################################################################## ### Fonctions utiles def decode(s): - u""" + """ Retourne un unicode à partir de s s doit être en utf-8 """ @@ -139,12 +139,12 @@ def decode(s): return s.decode('utf-8', 'ignore') # On ignore les erreurs def strip_accents(a): - u""" Supression des accents de la chaîne fournie """ + """ Supression des accents de la chaîne fournie """ res = normalize('NFKD', decode(a)).encode('ASCII', 'ignore') return res.replace(' ', '_').replace("'", '') def mailexist(mail): - u""" + """ Vérifie si une adresse mail existe ou non grace à la commande vrfy du serveur mail """ @@ -162,7 +162,7 @@ def mailexist(mail): return r def preattr(val): - u""" + """ val est : * un entier * une chaîne @@ -187,7 +187,7 @@ def preattr(val): def is_actif(sanction): - u""" + """ Retourne True ou False suivant si la sanction fournie (chaîne venant de blacklist) est active ou non """ @@ -202,7 +202,7 @@ def is_actif(sanction): def format_mac(mac): - u""" + """ Formatage des adresses mac Transforme une adresse pour obtenir la forme xx:xx:xx:xx:xx:xx Le séparateur original peut être :, - ou rien @@ -233,7 +233,7 @@ def format_mac(mac): ### Définition des classes class Service: - u""" Définit un service à redémarrer """ + """ Définit un service à redémarrer """ def __init__(self, nom, args=[], start=[]): """ Nom du service @@ -344,7 +344,7 @@ class CransLdap: self.remove_lock(lock) def connect(self, readonly=False): - u""" Initialisation la connexion vers le serveur LDAP """ + """ Initialisation la connexion vers le serveur LDAP """ if readonly: self.conn = ldap.initialize(ro_uri) return @@ -364,7 +364,7 @@ class CransLdap: time.sleep(0.3) def exist(self, arg): - u""" + """ Vérifie l'existence d'une entrée dans la base et que cette entrée n'appartient pas à l'objet en cours. @@ -411,7 +411,7 @@ class CransLdap: return r def lock(self, item, valeur): - u""" + """ Lock un item avec la valeur valeur, les items possibles peuvent être : @@ -456,7 +456,7 @@ class CransLdap: self._locks.append(lock_dn) def remove_lock(self, lockdn): - u""" + """ Destruction d'un lock Destruction de tous les locks si lockdn=* """ @@ -476,11 +476,11 @@ class CransLdap: self.conn.delete_s(l[0]) def list_locks(self): - u""" Liste les locks """ + """ Liste les locks """ return self.conn.search_s(self.base_lock, 1, 'objectClass=lock') def services_to_restart(self, new=None, args=[], start=0): - u""" + """ start indique la date (en secondes depuis epoch) à partir du moment où cette action sera effectuée. @@ -591,7 +591,7 @@ class CransLdap: def make(self, entry, mode=''): - u""" + """ Crée le bon objet à partir de entry. mode a la même signification que dans search. """ @@ -607,7 +607,7 @@ class CransLdap: def search(self, expression, mode=''): - u""" + """ Recherche dans la base LDAP, expression est une chaîne : * soit une expression : champ1=expr1&champ2=expr2&champ3!=expr3... * soit un seul terme, dans ce cas cherche sur les champs de @@ -642,7 +642,7 @@ class CransLdap: # Fonction utile def build_filtre(champ, expr, neg=False): - u""" + """ Retourne une chaine pour recherche dans la base LDAP du style (champ=expr) en adaptant les valeurs de expr au champ. Si neg = True, retourne le négatif : (!(champ=expr)) @@ -841,7 +841,7 @@ class CransLdap: return result def getProprio(self, uid, mode=''): - u""" + """ Renvoie un proprietaire ou un adherent correspondant au login/ mot de passe (mot de passe facultatif) """ @@ -859,7 +859,7 @@ class CransLdap: __machines = () def all_machines(self, graphic=False): - u""" + """ Renvoie toutes les machines autorisées. Cela affiche des trucs et des bidules si graphic est à True. @@ -889,15 +889,15 @@ class CransLdap: ############################################################################# class BaseClasseCrans(CransLdap): - u""" Méthodes de base des classes machines, et BaseProprietaire """ + """ Méthodes de base des classes machines, et BaseProprietaire """ def __eq__(self, autre): - u""" Test d'égalité de deux instances de club/adhérent/machine, + """ Test d'égalité de deux instances de club/adhérent/machine, retourne True s'il s'agit du même club/adhérent/machine, False sinon """ return self.__class__ == autre.__class__ and self.id() == autre.id() def id(self): - u""" Retourne la valeur de l'attribu caractéristique de la classe (aid,mid,cid)""" + """ Retourne la valeur de l'attribu caractéristique de la classe (aid,mid,cid)""" try: s = self.dn.split(',')[0].split('=') if s[0] == self.idn: @@ -906,11 +906,11 @@ class BaseClasseCrans(CransLdap): return '' def __str__(self): - u""" Chainde identifiant l'objet de la forme 'uid=1245' """ + """ Chainde identifiant l'objet de la forme 'uid=1245' """ return '%s=%s' % (self.idn, self.id()) def blacklist_actif(self): - u""" + """ Vérifie si l'instance courante est blacklistée. Retourne les sanctions en cours (liste). Retourne une liste vide si aucune sanction en cours. @@ -918,7 +918,7 @@ class BaseClasseCrans(CransLdap): return self.blacklist_all()[0].keys() def blacklist_all(self): - u""" + """ Vérifie si l'instance courante est blacklistée ou a été blacklistée. Retourne les sanctions en cours sous la forme d'un couple de deux dictionnaires (l'un pour les sanctions @@ -949,7 +949,7 @@ class BaseClasseCrans(CransLdap): return (actifs, inactifs) def blacklist(self, new=None): - u""" + """ Blacklistage de la ou de toutes la machines du propriétaire * new est une liste de 4 termes : [debut_sanction, fin_sanction, sanction, commentaire] @@ -1025,16 +1025,16 @@ class BaseClasseCrans(CransLdap): return liste def restore(self): - u""" Restore les données à l'état initial (ou pas) """ + """ Restore les données à l'état initial (ou pas) """ self._data = self._init_data.copy() self.modifs = {} def historique(self): - u""" Retourne l'historique de l'objet """ + """ Retourne l'historique de l'objet """ return map(decode, self._data.get('historique', [])) def info(self, new=None): - u""" + """ Pour ajouter une remarque new doit être la chaîne représentant la remarque à ajouter Pour modifier new doit être une liste de la forme: @@ -1071,7 +1071,7 @@ class BaseClasseCrans(CransLdap): return liste def _save(self): - u""" Sauvegarde dans la base LDAP """ + """ Sauvegarde dans la base LDAP """ if not self.modifs: # Rien à faire return [] @@ -1268,7 +1268,7 @@ class BaseClasseCrans(CransLdap): self._init_data = self._data.copy() def _delete(self, dn, comment=''): - u""" Sauvegarde puis destruction du dn (et des sous-dn) fourni """ + """ Sauvegarde puis destruction du dn (et des sous-dn) fourni """ # Commentaires comment = preattr(comment)[1] self.modifs.setdefault('destruction (%s)' % comment, None) @@ -1302,7 +1302,7 @@ class BaseClasseCrans(CransLdap): pass def _set(self, champ, val, comment=None): - u""" + """ Met à jour les données de _data et modifie modifs si besoin. Si val=[] ou None, supprime le champ. """ @@ -1331,10 +1331,10 @@ class BaseClasseCrans(CransLdap): ############################################################################# class BaseProprietaire(BaseClasseCrans): - u""" Méthodes de bases pour les classes Adherent et Club """ + """ Méthodes de bases pour les classes Adherent et Club """ def __init__(self, data=(), mode='', conn=None): - u""" + """ Si data est fourni initialise l'adhérent avec les valeurs données Format de data : tuple comme retourné par une recherche dans la base ldap: ( dn, { donnée }) @@ -1374,7 +1374,7 @@ class BaseProprietaire(BaseClasseCrans): self._modifiable = 'w' def chsh(self, new=None): - u""" Retourne ou change le shell de l'adhérent """ + """ Retourne ou change le shell de l'adhérent """ if new == None: try: return decode(self._data.get('loginShell', [''])[0]) except: return '' @@ -1384,7 +1384,7 @@ class BaseProprietaire(BaseClasseCrans): return new def alias(self, new=None): - u""" + """ Création ou visualisation des alias mail Même sytème d'argument que la méthode info. """ @@ -1432,7 +1432,7 @@ class BaseProprietaire(BaseClasseCrans): return liste def homepageAlias(self, new=None): - u""" + """ Creation ou visualisation des alias de page perso. Meme systeme d'arguments que pour info. """ @@ -1480,7 +1480,7 @@ class BaseProprietaire(BaseClasseCrans): return liste def machines(self): - u""" Retourne les machines (instances) appartenant à la classe """ + """ Retourne les machines (instances) appartenant à la classe """ # Le champ id n'est pas initialisé lorsque le proprio est en cours # de création if self.id(): @@ -1492,7 +1492,7 @@ class BaseProprietaire(BaseClasseCrans): return [] def machines_fixes(self): - u""" Retourne les machines fixes appartenant à l'instance """ + """ Retourne les machines fixes appartenant à l'instance """ if self.id(): res = [] for r in self.conn.search_s('%s=%s,%s' % (self.idn, self.id(), self.base_dn), 1, 'objectClass=machineFixe'): @@ -1502,7 +1502,7 @@ class BaseProprietaire(BaseClasseCrans): return [] def machines_wifi(self): - u""" Retourne les machines wifi appartenant à l'instance """ + """ Retourne les machines wifi appartenant à l'instance """ if self.id(): res = [] for r in self.conn.search_s('%s=%s,%s' % (self.idn, self.id(), self.base_dn), 1, 'objectClass=machineWifi'): @@ -1512,7 +1512,7 @@ class BaseProprietaire(BaseClasseCrans): return [] def factures(self): - u""" Retourne les factures (instances) appartenant à la classe """ + """ Retourne les factures (instances) appartenant à la classe """ # Le champ id n'est pas initialisé lorsque le proprio est en cours # de création if self.id(): @@ -1524,7 +1524,7 @@ class BaseProprietaire(BaseClasseCrans): return [] def solde(self, operation=None, comment=None): - u""" Retourne ou modifie le solde d'un propriétaire + """ Retourne ou modifie le solde d'un propriétaire operation doit être un nombre positif ou négatif (string ou int ou float) comment est un commentaire à rajouter dans l'historique @@ -1548,7 +1548,7 @@ class BaseProprietaire(BaseClasseCrans): return new def controle(self, new=None): - u""" + """ Controle du tresorier New est de la forme [+-][pc] (p pour le paiement, c pour la carte) @@ -1586,7 +1586,7 @@ class BaseProprietaire(BaseClasseCrans): return actuel def contourneGreylist(self, contourneGreylist=None): - u""" + """ Retourne ou change la greylist pour le compte * True : contourne le GreyListing * False : ne contourne pas le greylisting @@ -1614,7 +1614,7 @@ class BaseProprietaire(BaseClasseCrans): return bool(self._data.get('contourneGreylist', [])) def verifyPasswd(self, passwd): - u""" + """ Retourne True si le mot de passe est bon, ou False si le mot de passe n'est pas bon. """ @@ -1623,7 +1623,7 @@ class BaseProprietaire(BaseClasseCrans): return ldap_passwd.checkpwd(passwd, self._data['userPassword'][0]) def changePasswd(self, passwd): - u""" + """ Modifie le mot de passe de l'adhérent """ if not self.compte(): @@ -1631,7 +1631,7 @@ class BaseProprietaire(BaseClasseCrans): self._set('userPassword', [ldap_passwd.mkpasswd(passwd)]) def forward(self, new = None): - u""" + """ Modifie ou retourne l'adresse de forward de l'adhérent NB : il faut avoir un sudo sur /usr/scripts/gestion/mail_config.py sinon cette metode ne fonctionnera pas @@ -1641,7 +1641,7 @@ class BaseProprietaire(BaseClasseCrans): return config_mail.MailConfig(uid=self._data['uid'][0], forward = new)['forward'] def spam(self, new = None): - u""" + """ Modifie ou retourne le traitement des spams de l'adhérent new doit être 'accepte', 'marque' ou 'supprime' NB : il faut avoir un sudo sur /usr/scripts/gestion/mail_config.py @@ -1652,14 +1652,14 @@ class BaseProprietaire(BaseClasseCrans): return config_mail.MailConfig(uid=self._data['uid'][0], spam = new)['spam'] def home(self): - u""" Retourne le home de l'adhérent """ + """ Retourne le home de l'adhérent """ if not self.compte(): raise NotImplementedError, u"L'adhérent na pas de compte" return self._data['homeDirectory'][0] def uidNumber(self, new=None): - u""" Retourne ou change l'uidNumber de l'adhérent """ + """ Retourne ou change l'uidNumber de l'adhérent """ if not self.compte(): raise NotImplementedError, u"L'adhérent na pas de compte" if new == None: @@ -1670,7 +1670,7 @@ class BaseProprietaire(BaseClasseCrans): return new def paiement(self, action=None): - u""" + """ Action est un entier représentant une année si positif ajoute l'année à la liste si négatif le supprime @@ -1678,7 +1678,7 @@ class BaseProprietaire(BaseClasseCrans): return self._an('paiement', action) def delete(self, comment=''): - u"""Destruction du propriétaire""" + """Destruction du propriétaire""" for m in self.machines(): # Destruction machines @@ -1700,7 +1700,7 @@ class BaseProprietaire(BaseClasseCrans): pass def save(self): - u""" + """ Enregistre l'adhérent ou le club courant dans la base LDAP Ajoute le mail de bienvenue à la liste des services à redémarrer Retourne une chaîne indiquant les opération effectuées. @@ -1806,7 +1806,7 @@ class BaseProprietaire(BaseClasseCrans): return ret def _an(self, champ, action): - u""" + """ Champ est un champ contenant une liste d'entiers Action est un entier représentant une année si positif ajoute l'année à la liste @@ -1841,7 +1841,7 @@ class BaseProprietaire(BaseClasseCrans): ############################################################################# class Adherent(BaseProprietaire): - u""" Classe de définition d'un adhérent """ + """ Classe de définition d'un adhérent """ objectClass = 'adherent' idn = 'aid' filtre_idn = '(objectClass=adherent)' @@ -1849,7 +1849,7 @@ class Adherent(BaseProprietaire): ### Méthodes Nom utilisée lors de l'affichage des propriétés ### (commune avec les classes AssociationCrans et Club) def Nom(self): - u""" Retourne prenom nom """ + """ Retourne prenom nom """ return "%s %s" % ( self.prenom() , self.nom() ) def nom(self, new=None): @@ -1891,7 +1891,7 @@ class Adherent(BaseProprietaire): return new def chbre(self, new=None): - u""" + """ Définit la chambre d'un adhérent, EXT pour personne extérieure au campus """ if new == None: @@ -1960,7 +1960,7 @@ class Adherent(BaseProprietaire): return new def adresse(self, new=None): - u""" Défini l'adresse pour les personnes extérieures (dont la chambre = EXT) + """ Défini l'adresse pour les personnes extérieures (dont la chambre = EXT) L'adresse est une liste de 4 éléments : numero, rue, code postal, ville """ if new == None: @@ -2031,7 +2031,7 @@ class Adherent(BaseProprietaire): return new def email(self, new=None): - u""" Retourne l'adresse mail, ajoute le @crans.org si nécessaire """ + """ Retourne l'adresse mail, ajoute le @crans.org si nécessaire """ # pour la compatibilité entre les fonctions if new: self.mail(new) @@ -2043,7 +2043,7 @@ class Adherent(BaseProprietaire): return mail def mail_invalide(self, valeur=None): - u""" + """ L'adresse est invalide. Au niveau de la base, on considère l'absence ou la présence d'une blackliste mail_invalide. @@ -2077,7 +2077,7 @@ class Adherent(BaseProprietaire): raise ValueError, u'mail_invalide ne peut prendre que None ou False en argument' def charteMA(self, valeur=None): - u""" + """ La charte des membres actifs est signee. False par defaut. """ @@ -2093,7 +2093,7 @@ class Adherent(BaseProprietaire): return bool(self._data.get('charteMA', [])) def adherentPayant(self, valeur = None): - u""" + """ L'adhérent paie sa cotisation (a droit au WiFi, à un compte Crans, ... True par défaut """ @@ -2110,7 +2110,7 @@ class Adherent(BaseProprietaire): return not bool(self._data.get('adherentPayant', [])) def supprimer_compte(self): - u""" + """ Supprime le compte sur zamok. Penser à définir l'adresse mail après. """ self._set('mail', ['']) @@ -2126,7 +2126,7 @@ class Adherent(BaseProprietaire): except: pass def etudes(self, index_or_new): - u""" + """ Retourne l'un des 3 champs études (selon index_or_new si entier) """ if type(index_or_new) == int: @@ -2157,7 +2157,7 @@ class Adherent(BaseProprietaire): return new def carteEtudiant(self, action=None): - u""" + """ Action est un entier représentant une année si positif ajoute l'année à la liste si négatif le supprime @@ -2165,7 +2165,7 @@ class Adherent(BaseProprietaire): return self._an('carteEtudiant', action) def checkPassword(self, password): - u"""Vérifie le mot de passe de l'adhérent""" + """Vérifie le mot de passe de l'adhérent""" anon = ldap.initialize(uri) try: r = anon.simple_bind(self.dn, password) @@ -2178,7 +2178,7 @@ class Adherent(BaseProprietaire): def compte(self, login=None, uidNumber=0, hash_pass='', shell=config.login_shell): - u""" + """ Création d'un compte à un adhérent (la création se fait après l'écriture dans la base par la méthode save) Si login = None, retourne le compte de l'adhérent @@ -2279,7 +2279,7 @@ class Adherent(BaseProprietaire): return decode(login) def canonical_alias(self, new=None): - u""" Retourne ou défini l'alias canonique""" + """ Retourne ou défini l'alias canonique""" if new == None: try: return decode(self._data['canonicalAlias'][0]) except: return '' @@ -2298,7 +2298,7 @@ class Adherent(BaseProprietaire): return a def droits(self, droits=None, light=False): - u"""Modifie les droits d'un compte. + """Modifie les droits d'un compte. droits est la liste des droits à donner à l'utilisateur, light permet de modifier les droits non critiques sans être Nounou.""" @@ -2358,7 +2358,7 @@ class Adherent(BaseProprietaire): return reponse def rewriteMailHeaders(self, rewrite=None): - u""" + """ Réécriture des entêtes mail avec l'alias canonique * True : réécrit les en-têtes * False : ne réécrit pas les en-têtes @@ -2382,7 +2382,7 @@ class Adherent(BaseProprietaire): return bool(self._data.get('rewriteMailHeaders', [])) def derniereConnexion(self, new=False): - u""" + """ Date de dernière connexion. Le format est le nombre de secondes écoulées depuis Epoch. Si new est donné, met à jour la valeur si elle est plus récente. @@ -2404,7 +2404,7 @@ class Adherent(BaseProprietaire): return current def dateInscription(self): - u"""Renvoie la date d'inscription.""" + """Renvoie la date d'inscription.""" # En théorie, c'est la date de la première entrée dans l'historique if self.historique(): h = self.historique()[0] @@ -2420,13 +2420,13 @@ class Adherent(BaseProprietaire): class Club(BaseProprietaire): - u""" Classe de définition d'un club """ + """ Classe de définition d'un club """ idn = 'cid' filtre_idn = '(objectClass=club)' objectClass = 'club' def Nom(self, new=None): - u""" Définit ou retourne le nom du club """ + """ Définit ou retourne le nom du club """ if new == None: return decode(self._data.get('nom', [''])[0]) @@ -2439,18 +2439,18 @@ class Club(BaseProprietaire): return new def etudes(*args): - u""" Etudes bidon pour club """ + """ Etudes bidon pour club """ return u'N/A' def nom(self): - u""" Retourne le nom du club, utilisé lors de la destruction """ + """ Retourne le nom du club, utilisé lors de la destruction """ return strip_accents(self.Nom()) def carteEtudiant(self, pd=None): return [ ann_scol ] def responsable(self, adher=None): - u""" Responsable du club, adher doit être une instance de la classe adhérent """ + """ Responsable du club, adher doit être une instance de la classe adhérent """ if adher == None: aid = decode(self._data.get('responsable', [''])[0]) if aid: @@ -2467,7 +2467,7 @@ class Club(BaseProprietaire): return adher def imprimeurs(self, ajouter=None, retirer=None): - u"""Retourne la liste des aid des personnes autorisees a imprimer avec + """Retourne la liste des aid des personnes autorisees a imprimer avec le compte *@club-*, ou ajoute/retire un aid a cette liste.""" if self._data.has_key('imprimeurClub'): liste = list(self._data['imprimeurClub']) @@ -2491,7 +2491,7 @@ class Club(BaseProprietaire): return liste def chbre(self, new=None): - u""" Définit le local du club + """ Définit le local du club new doit être une des clefs de l'annuaire locaux_clubs""" if new == None: return decode(self._data.get('chbre', [''])[0]) @@ -2504,13 +2504,13 @@ class Club(BaseProprietaire): return new def local(self): - u""" Retourne le local à partir de la chambre enregistrée et + """ Retourne le local à partir de la chambre enregistrée et de la conversion avec l'annuaire locaux_clubs """ annu = annuaires.locaux_clubs() return decode(annu.get(self.chbre(), '')) def compte(self, login=None): - u""" Créé un compte au club sur vert""" + """ Créé un compte au club sur vert""" if login == None: return self._data.get('uid', [''])[0] @@ -2568,17 +2568,17 @@ class Club(BaseProprietaire): return decode(login) def email(self): - u""" Retourne l'adresse mail du responsable """ + """ Retourne l'adresse mail du responsable """ return self.responsable().email() class Machine(BaseClasseCrans): - u""" Classe de définition d'une machine """ + """ Classe de définition d'une machine """ idn = 'mid' filtre_idn = '(|(objectClass=machineFixe)(objectClass=machineWifi)' filtre_idn += '(objectClass=machineCrans)(objectClass=borneWifi))' def __init__(self, parent_or_tuple, mode='', conn=None): - u""" + """ parent_or_tuple est : * soit une instance d'une classe pouvant posséder une machine (Adherent, Club ou AssociationCrans), la nouvelle machine lui @@ -2641,11 +2641,11 @@ class Machine(BaseClasseCrans): raise TypeError(u'Arguments invalides') def Nom(self): - u""" Retourne le nom de la machine """ + """ Retourne le nom de la machine """ return self.nom() def mac(self, mac=None, multi_ok=0): - u""" + """ Défini ou retourne l'adresse mac de la machine Adresse valide si: 12 caractères hexa avec - ou : comme séparateurs @@ -2683,7 +2683,7 @@ class Machine(BaseClasseCrans): if not multi_ok and not vendor: raise ValueError( - u"""Le constructeur correspondant à cette adresse MAC ne peut être trouvé. + """Le constructeur correspondant à cette adresse MAC ne peut être trouvé. L'adresse MAC correspond peut-être à un pont réseau, désactivez ce pont réseau. Contactez nounou si la MAC est bien celle d'une carte.""", 3) @@ -2694,7 +2694,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) return mac def __host_alias(self, champ, new): - u""" Vérification de la validité d'un nom de machine """ + """ Vérification de la validité d'un nom de machine """ # Supression des accents new = strip_accents(unicode(new, 'iso-8859-15')) @@ -2737,7 +2737,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) return new def nom(self, new=None): - u""" + """ Défini ou retourne le nom de machine. Un nom de machine valide ne comporte que des caractères alphabétiques minuscules et le - @@ -2750,7 +2750,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) return new.split('.')[0] def prise(self, new=None): - u""" Retourne ou défini la prise associée à la machine + """ Retourne ou défini la prise associée à la machine La définition n'est possible que si la machine est une machine de l'assoce. Si la prise est inconne retourne N/A @@ -2780,7 +2780,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) return new def alias(self, new=None): - u""" + """ Création ou visualisation des alias d'une machine. Même sytème d'argument que la méthode info. """ @@ -2813,7 +2813,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) return liste def ip(self, ip=None): - u""" + """ Défini ou retourne l'IP de la machine. Les IP sont stoquées sous forme xxx.xxx.xxx.xxx et doivent être fournies ainsi. Si l'IP n'est pas définie retourne . @@ -2888,7 +2888,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) return ip def exempt(self, new=None): - u""" + """ Liste des réseaux vers lesquels on ne compte pas l'upload Cette liste est transférée dans la base postgres de komaz Pour ajouter un réseau new doit être la chaîne @@ -2927,7 +2927,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) return liste def proprietaire(self): - u""" + """ retroune le propriétaire de la machine (classe Adherent, Club ou AssociationCrans) """ if not self.__proprietaire: @@ -2942,7 +2942,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) return self.__proprietaire def save(self): - u""" + """ Enregistre la machine courante dans la base LDAP Retourne une chaîne indiquant les opération effectuées. """ @@ -3034,7 +3034,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) return ret def delete(self, comment=''): - u""" Destruction de la machine""" + """ Destruction de la machine""" from user_tests import isadm if self.proprietaire().__class__ == AssociationCrans and not isadm(): raise EnvironmentError(u'Il faut être administrateur pour effectuer cette opération.') @@ -3063,19 +3063,19 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) self.services_to_restart('classify', [self.ip()]) def portTCPin(self, ports=None): - u""" Ports TCP ouverts depuis l'extérieur pour la machine """ + """ Ports TCP ouverts depuis l'extérieur pour la machine """ return self.__port(ports, 'portTCPin') def portTCPout(self, ports=None): - u""" Ports TCP ouverts vers l'extérieur pour la machine """ + """ Ports TCP ouverts vers l'extérieur pour la machine """ return self.__port(ports, 'portTCPout') def portUDPin(self, ports=None): - u""" Ports UDP ouverts vers l'extérieur pour la machine """ + """ Ports UDP ouverts vers l'extérieur pour la machine """ return self.__port(ports, 'portUDPin') def portUDPout(self, ports=None): - u""" Ports UDP ouverts vers l'extérieur pour la machine """ + """ Ports UDP ouverts vers l'extérieur pour la machine """ return self.__port(ports, 'portUDPout') def __port(self, ports, champ): @@ -3097,18 +3097,18 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3) self._set(champ, map(lambda x: ':'.join(map(str, x)), ports)) def __hash__(self): - u"""Retourne un hash de l'objet Machine""" + """Retourne un hash de l'objet Machine""" return hash(self.nom()) class MachineFixe(Machine): - u""" Classe de définition d'une machine fixe """ + """ Classe de définition d'une machine fixe """ def __init__(self, parent_or_tuple, typ='fixe', conn=None): Machine.__init__(self, parent_or_tuple, typ, conn) class MachineWifi(Machine): - u""" Classe de définition d'une machine wifi """ + """ Classe de définition d'une machine wifi """ def __init__(self, parent_or_tuple, typ='wifi', conn=None): Machine.__init__(self, parent_or_tuple, typ, conn) @@ -3117,7 +3117,7 @@ class MachineWifi(Machine): self.ipsec(True) def ipsec(self, clef=None): - u""" + """ Affichage (clef=None), génération (clef=True) ou définition de la clef IPsec de la machine. Si clef différent de True et None: prend la clef fournie. """ @@ -3137,13 +3137,13 @@ class MachineWifi(Machine): class MachineCrans(Machine): - u""" Classe de définition d'une machine du Crans """ + """ Classe de définition d'une machine du Crans """ def __init__(self, parent_or_tuple, typ='fixe', conn=None): Machine.__init__(self, parent_or_tuple, typ, conn) def nombrePrises(self, new=None): - u""" Nombre de prises, pour les switchs """ + """ Nombre de prises, pour les switchs """ if not new: return int(self._data.get('nombrePrises', [-1])[0]) @@ -3161,7 +3161,7 @@ class MachineCrans(Machine): return new class BorneWifi(Machine): - u"""Classe de définition d'une borne wifi""" + """Classe de définition d'une borne wifi""" def __init__(self, parent_or_tuple, typ='borne', conn=None): Machine.__init__(self, parent_or_tuple, typ, conn) @@ -3172,13 +3172,13 @@ class BorneWifi(Machine): self._data['hotspot'] = ['FALSE'] def mac2(self): - u"""Retourne l'adresse MAC + 2""" + """Retourne l'adresse MAC + 2""" mac = self.mac().split(":") mac[-1] = "%0.2x" % (int(mac[-1], 16) + 2) return ":".join(mac) def hotspot(self, new=None): - u"""Cette borne est-elle partagée avec l'ENS ?""" + """Cette borne est-elle partagée avec l'ENS ?""" if new == None: # Le schéma nous assure que ce champ existe toujours return self._data['hotspot'][0] == "TRUE" @@ -3189,7 +3189,7 @@ class BorneWifi(Machine): self._set('hotspot', ['FALSE']) def canal(self, new=None, raw=False): - u"""Attribution ou visualisation du canal d'une borne wifi""" + """Attribution ou visualisation du canal d'une borne wifi""" if not new: canaux = self._data.get('canal', [''])[0] if raw: @@ -3249,7 +3249,7 @@ class BorneWifi(Machine): return new def puissance(self, new=None): - u"""Attribution ou visualisation de la puissance d'une borne wifi""" + """Attribution ou visualisation de la puissance d'une borne wifi""" if not new: return self._data.get('puissance', [''])[0] @@ -3263,7 +3263,7 @@ class BorneWifi(Machine): return new def position(self, new=False): - u""" + """ Attribution ou visualisation de la position d'une borne wifi. Renvoie un couple de coordonnées (en strings) si elles existent, None sinon. new doit être un couple de coordonnées (en strings), @@ -3287,7 +3287,7 @@ class BorneWifi(Machine): return new def nvram(self, champ=None, new=False): - u""" + """ Définit et renvoie un champ nvram d'une borne wifi. Si champ=None, renvoie sous forme de liste key=value tous les champs. On peut aussi définir tous les champs en @@ -3334,13 +3334,13 @@ class BorneWifi(Machine): return new class Facture(BaseClasseCrans): - u""" Classe de définition d'une facture """ + """ Classe de définition d'une facture """ objectClass = 'facture' idn = 'fid' filtre_idn = '(objectClass=facture)' def __init__(self, parent_or_tuple, mode='', conn=None): - u""" + """ parent_or_tuple est : * soit une instance d'une classe pouvant posséder une facture (Adherent, Club), la nouvelle facture lui sera alors associée. @@ -3392,20 +3392,20 @@ class Facture(BaseClasseCrans): raise TypeError(u'Arguments invalides') def numero(self): - u""" Retourne le numéro de facture """ + """ Retourne le numéro de facture """ fid = self._data.get('fid', [None])[0] if fid == None: raise NotImplementedError, u'Il faut enregistrer une facture pour connaitre son numero' return fid def nom(self): - u""" Utilisé pour la fonction delete() """ + """ Utilisé pour la fonction delete() """ return "Facture%s" % self.numero() Nom = nom def proprietaire(self): - u""" + """ retroune le propriétaire de la facture (classe Adherent ou Club) """ # si la facture est en mode w mais pas le proprio, on tente de prendre @@ -3426,7 +3426,7 @@ class Facture(BaseClasseCrans): return self.__proprietaire def modePaiement(self, new=None): - u""" + """ Définit ou retourne le mode de paiement. Le mode de paiement doit être une chaine de caractère """ @@ -3447,7 +3447,7 @@ class Facture(BaseClasseCrans): return decode(self._data.get('modePaiement', [None])[0]) def recuPaiement(self, new=None): - u""" + """ Définit ou retourne qui a recu le paiement """ @@ -3475,11 +3475,11 @@ class Facture(BaseClasseCrans): return self._data.get("recuPaiement", [None])[0] def _del_recu_paiement(self): - u""" Pour test """ + """ Pour test """ self._set("recuPaiement", []) def _crediter(self): - u""" + """ Crédite les articles à son propriétaire """ @@ -3500,7 +3500,7 @@ class Facture(BaseClasseCrans): proprio.save() def _frais(self): - u""" + """ Retourne une liste d'articles correspondants aux divers frais """ @@ -3528,7 +3528,7 @@ class Facture(BaseClasseCrans): return arts def _articles(self, arts = None): - u"""Retourne ou modifie la liste des articles de la base""" + """Retourne ou modifie la liste des articles de la base""" # modifie la liste des articles if arts != None: @@ -3550,7 +3550,7 @@ class Facture(BaseClasseCrans): return arts def ajoute(self, ajoute): - u"""Ajoute un/des article(s) à la facture + """Ajoute un/des article(s) à la facture ajoute est un article ou une liste d'articles """ # on ne eut pas modifier une facture payée @@ -3578,7 +3578,7 @@ class Facture(BaseClasseCrans): self._articles(arts) def supprime(self, supprime): - u"""Supprime un/des article(s) à la facture + """Supprime un/des article(s) à la facture arts est un article ou une liste d'articles """ # on ne eut pas modifier une facture payée @@ -3599,7 +3599,7 @@ class Facture(BaseClasseCrans): self._articles(arts) def articles(self): - u""" + """ Retourne la liste des articles. Un article est un dictionnaire de la forme : { 'code' : string, @@ -3610,7 +3610,7 @@ class Facture(BaseClasseCrans): return self._articles() + self._frais() def total(self): - u""" + """ Calcule le total de la facture, frais compris """ s = 0 @@ -3620,7 +3620,7 @@ class Facture(BaseClasseCrans): def urlPaypal(self, useSandbox = False, businessMail = "paypal@crans.org", return_page=None, cancel_return_page=None): - u""" + """ Retourne l'url paypal pour le paiement de cette facture """ if useSandbox: @@ -3648,7 +3648,7 @@ class Facture(BaseClasseCrans): return url def save(self): - u""" + """ Enregistre la facture dans la base LDAP Retourne une chaîne indiquant les opération effectuées. """ @@ -3660,12 +3660,12 @@ class Facture(BaseClasseCrans): return coul(u"Facture n°%s enregistrée avec succès." % self.numero(), 'vert') def delete(self, comment=''): - u"""Suppression de la facture""" + """Suppression de la facture""" self.__proprietaire = None self._delete(self.dn, comment) class _FakeProprio(CransLdap): - u"""Définitions de base d'un propriétaire virtuel""" + """Définitions de base d'un propriétaire virtuel""" idn = '' def __init__(self, conn=None): self.conn = conn @@ -3692,7 +3692,7 @@ class _FakeProprio(CransLdap): return m class AssociationCrans(_FakeProprio): - u""" Classe définissant l'assoce (pour affichage de ses machines) """ + """ Classe définissant l'assoce (pour affichage de ses machines) """ def __init__(self, conn=None): _FakeProprio.__init__(self, conn) def Nom(self): @@ -3705,7 +3705,7 @@ class AssociationCrans(_FakeProprio): db = None def crans_ldap(readonly=False): - u""" Renvoie un objet CransLdap """ + """ Renvoie un objet CransLdap """ global db if readonly: return CransLdap(readonly)