Ajout d'un peu de doc string

This commit is contained in:
Daniel STAN 2012-06-27 21:35:40 +02:00
parent 7505dd3d6b
commit 96705403a2

View file

@ -79,6 +79,8 @@ def lc_ldap_test():
return lc_ldap(dn='cn=admin,dc=crans,dc=org', cred='75bdb64f32') return lc_ldap(dn='cn=admin,dc=crans,dc=org', cred='75bdb64f32')
class lc_ldap(ldap.ldapobject.LDAPObject): class lc_ldap(ldap.ldapobject.LDAPObject):
"""Connexion à la base ldap crans, chaque instance représente une connexion
"""
def __init__(self, dn=None, user=None, cred=None, uri=uri): def __init__(self, dn=None, user=None, cred=None, uri=uri):
"""Initialise la connexion ldap, """Initialise la connexion ldap,
- En authentifiant avec dn et cred s'ils sont précisés - En authentifiant avec dn et cred s'ils sont précisés
@ -163,12 +165,10 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
_,adherents=self.allMachinesAdherents() _,adherents=self.allMachinesAdherents()
return adherents return adherents
def newMachine(self, parent, realm, uldif): def newMachine(self, parent, realm, uldif):
"""Crée une nouvelle machine: realm peut être: """Crée une nouvelle machine: realm peut être:
fil, fil-v6, wifi, wifi-v6, adm, gratuit, personnel-ens, special""" fil, fil-v6, wifi, wifi-v6, adm, gratuit, personnel-ens, special
--Partiellement implémenté"""
#adm, serveurs, bornes, wifi, adherents, gratuit ou personnel-ens""" #adm, serveurs, bornes, wifi, adherents, gratuit ou personnel-ens"""
owner = self.search('objectClass=*', dn=parent, scope=0)[0] owner = self.search('objectClass=*', dn=parent, scope=0)[0]
@ -218,7 +218,8 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
return self._create_entity('cid=%s,%s' % (cid[0], base_dn), uldif) return self._create_entity('cid=%s,%s' % (cid[0], base_dn), uldif)
def newFacture(self, uldif): def newFacture(self, uldif):
"""Crée une nouvelle facture""" """Crée une nouvelle facture
--Non implémenté !"""
raise NotImplementedError() raise NotImplementedError()
def _create_entity(self, dn, uldif): def _create_entity(self, dn, uldif):
@ -256,7 +257,8 @@ class lc_ldap(ldap.ldapobject.LDAPObject):
def new_cransldapobject(conn, dn, mode='ro', ldif = None): def new_cransldapobject(conn, dn, mode='ro', ldif = None):
"""Crée un objet CransLdap en utilisant la classe correspondant à """Crée un objet CransLdap en utilisant la classe correspondant à
l'objectClass du ldif""" l'objectClass du ldif
--pour usage interne à la libraire uniquement !"""
classe = None classe = None
@ -274,7 +276,8 @@ def new_cransldapobject(conn, dn, mode='ro', ldif = None):
return classe(conn, dn, mode, ldif) return classe(conn, dn, mode, ldif)
class CransLdapObject(object): class CransLdapObject(object):
"""Classe de base des objets CransLdap""" """Classe de base des objets CransLdap.
Cette classe ne devrait pas être utilisée directement."""
def __init__(self, conn, dn, mode='ro', ldif = None): def __init__(self, conn, dn, mode='ro', ldif = None):
''' '''
Créée une instance d'un objet Crans (machine, adhérent, Créée une instance d'un objet Crans (machine, adhérent,
@ -325,7 +328,9 @@ class CransLdapObject(object):
self._modifs = ldif_to_cldif(ldif_to_uldif(res[0][1]), conn, check_ctxt = False) self._modifs = ldif_to_cldif(ldif_to_uldif(res[0][1]), conn, check_ctxt = False)
def save(self): def save(self):
"Vérifie que self._modifs contient des valeurs correctes et enregistre les modifications" """Sauvegarde dans la base les modifications apportées à l'objet.
Interne: Vérifie que self._modifs contient des valeurs correctes et
enregistre les modifications."""
if self.mode not in ['w', 'rw']: if self.mode not in ['w', 'rw']:
raise EnvironmentError("Objet en lecture seule, réessayer en lecture/écriture") raise EnvironmentError("Objet en lecture seule, réessayer en lecture/écriture")
@ -347,7 +352,7 @@ class CransLdapObject(object):
raise EnvironmentError("Les modifications apportées à l'objet %s n'ont pas été correctement sauvegardées\n%s" % (self.dn, differences)) raise EnvironmentError("Les modifications apportées à l'objet %s n'ont pas été correctement sauvegardées\n%s" % (self.dn, differences))
def get_modlist(self): def get_modlist(self):
"""Renvoie le dico des modifs""" """Renvoie un dictionnaire des modifications apportées à l'objet"""
# unicode -> utf-8 # unicode -> utf-8
ldif = cldif_to_ldif(self._modifs) ldif = cldif_to_ldif(self._modifs)
orig_ldif = cldif_to_ldif(self.attrs) orig_ldif = cldif_to_ldif(self.attrs)
@ -355,6 +360,7 @@ class CransLdapObject(object):
return modifyModlist(orig_ldif, ldif) return modifyModlist(orig_ldif, ldif)
def get(self, attr, default): def get(self, attr, default):
"""Renvoie l'attribut demandé ou default si introuvable"""
try: try:
return self[attr] return self[attr]
except KeyError: except KeyError:
@ -370,6 +376,7 @@ class CransLdapObject(object):
raise KeyError(attr) raise KeyError(attr)
def has_key(self,attr): def has_key(self,attr):
"""Est-ce que notre objet a l'attribut en question ?"""
return attr in self.ofields or attr in self.xfields or\ return attr in self.ofields or attr in self.xfields or\
attr in self.ufields or attr in self.mfields attr in self.ufields or attr in self.mfields
@ -420,9 +427,11 @@ class CransLdapObject(object):
return out return out
def blacklist_actif(self): def blacklist_actif(self):
"""Renvoie la liste des blacklistes actives sur l'entité""" """Renvoie la liste des blacklistes actives sur l'entité
# XXX - Proposer de filtrer les blacklistes avec un arg supplémentaire ? Améliorations possibles:
# XXX - Vérifier les blacklistes des machines pour les adhérents ? - Proposer de filtrer les blacklistes avec un arg supplémentaire ?
- Vérifier les blacklistes des machines pour les adhérents ?
"""
attrs = (self.attrs if self.mode not in ["w", "rw"] else self._modifs) attrs = (self.attrs if self.mode not in ["w", "rw"] else self._modifs)
return filter((lambda bl: bl.is_actif()), attrs.get("blacklist",[])) return filter((lambda bl: bl.is_actif()), attrs.get("blacklist",[]))
@ -445,6 +454,7 @@ class CransLdapObject(object):
class proprio(CransLdapObject): class proprio(CransLdapObject):
u""" Un propriétaire de machine (adhérent, club…) """
ufields = [ 'nom', 'chbre' ] ufields = [ 'nom', 'chbre' ]
mfields = [ 'paiement', 'info', 'blacklist', 'controle'] mfields = [ 'paiement', 'info', 'blacklist', 'controle']
ofields = [] ofields = []
@ -455,7 +465,7 @@ class proprio(CransLdapObject):
self._machines = machines self._machines = machines
def paiement_ok(self): def paiement_ok(self):
"""Renvoie si le propriétaire à payé pour l'année en cours""" u"""Renvoie si le propriétaire a payé pour l'année en cours"""
if self.dn == base_dn: if self.dn == base_dn:
return True return True
bool_paiement = False bool_paiement = False
@ -479,6 +489,7 @@ class proprio(CransLdapObject):
def machines(self): def machines(self):
"""Renvoie la liste des machines"""
if not self._machines: if not self._machines:
self._machines = self.conn.search('mid=*', dn = self.dn, scope = 1) self._machines = self.conn.search('mid=*', dn = self.dn, scope = 1)
for m in self._machines: for m in self._machines:
@ -486,6 +497,7 @@ class proprio(CransLdapObject):
return self._machines return self._machines
class machine(CransLdapObject): class machine(CransLdapObject):
u""" Une machine """
ufields = ['mid', 'macAddress', 'host', 'midType'] ufields = ['mid', 'macAddress', 'host', 'midType']
ofields = [] ofields = []
mfields = ['info', 'blacklist', 'hostAlias', 'exempt', mfields = ['info', 'blacklist', 'hostAlias', 'exempt',
@ -497,24 +509,29 @@ class machine(CransLdapObject):
self._proprio = None self._proprio = None
def proprio(self): def proprio(self):
u"""Renvoie le propriétaire de la machine"""
parent_dn = self.dn.split(',', 1)[1] parent_dn = self.dn.split(',', 1)[1]
if not self._proprio: if not self._proprio:
self._proprio = new_cransldapobject(self.conn, parent_dn, self.mode) self._proprio = new_cransldapobject(self.conn, parent_dn, self.mode)
return self._proprio return self._proprio
def blacklist_actif(self): def blacklist_actif(self):
"""Renvoie la liste des blacklistes actives sur la machine et le proprio""" u"""Renvoie la liste des blacklistes actives sur la machine et le proprio
# XXX - Proposer de filtrer les blacklistes avec un arg supplémentaire ? Améliorations possibles:
# XXX - Vérifier les blacklistes des machines pour les adhérents ? - Proposer de filtrer les blacklistes avec un arg supplémentaire ?
- Vérifier les blacklistes des machines pour les adhérents ?"""
black=self.proprio().blacklist_actif() black=self.proprio().blacklist_actif()
attrs = (self.attrs if self.mode not in ["w", "rw"] else self._modifs) attrs = (self.attrs if self.mode not in ["w", "rw"] else self._modifs)
black.extend(filter((lambda bl: bl.is_actif()), attrs.get("blacklist",[]))) black.extend(filter((lambda bl: bl.is_actif()), attrs.get("blacklist",[])))
return black return black
class AssociationCrans(proprio): pass class AssociationCrans(proprio):
u""" Association crans (propriétaire particulier)."""
pass
class adherent(proprio): class adherent(proprio):
u"""Adhérent crans."""
ufields = proprio.ufields + ['aid', 'prenom', 'tel', 'mail', 'mailInvalide'] ufields = proprio.ufields + ['aid', 'prenom', 'tel', 'mail', 'mailInvalide']
ofields = proprio.ofields + ['charteMA', 'adherentPayant', 'typeAdhesion', ofields = proprio.ofields + ['charteMA', 'adherentPayant', 'typeAdhesion',
'canonicalAlias', 'solde', 'contourneGreylist', 'canonicalAlias', 'solde', 'contourneGreylist',
@ -524,8 +541,8 @@ class adherent(proprio):
xfields = ['etudes', 'postalAddress'] xfields = ['etudes', 'postalAddress']
def compte(self,login = None, uidNumber=0, hash_pass = '', shell=config.login_shell): def compte(self,login = None, uidNumber=0, hash_pass = '', shell=config.login_shell):
"""Renvoie le nom du compte crans, s'il n'existe pas, et que uid u"""Renvoie le nom du compte crans. S'il n'existe pas, et que uid
est précisé, le crée""" est précisé, le crée."""
if u'posixAccount' in self.attrs['objectClass']: if u'posixAccount' in self.attrs['objectClass']:
return self.attrs['uid'][0] return self.attrs['uid'][0]
@ -590,12 +607,16 @@ class adherent(proprio):
class club(proprio): class club(proprio):
u"""Club crans"""
ufields = ['cid', 'responsable'] ufields = ['cid', 'responsable']
mfields = ['imprimeurClub'] mfields = ['imprimeurClub']
class machineFixe(machine): pass class machineFixe(machine):
u"""Machine fixe"""
pass
class machineWifi(machine): class machineWifi(machine):
u"""Machine wifi"""
ufields = machine.ufields + ['ipsec'] ufields = machine.ufields + ['ipsec']
class machineCrans(machine): class machineCrans(machine):