Ajout d'un peu de doc string
This commit is contained in:
parent
7505dd3d6b
commit
96705403a2
1 changed files with 41 additions and 20 deletions
61
lc_ldap.py
61
lc_ldap.py
|
@ -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):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue