Files
CD73/find_individus.py

88 lines
3.2 KiB
Python

#!/usr/bin/env python3
import xml.etree.ElementTree as ET
from pathlib import Path
from scribe.eoleldap import get_etabs
from scribe.enseignants import Enseignant
from scribe.eoleldap import Ldap
current_etabs = get_etabs()[1]
root = Path('/home/adhomes/admin/perso/comptes')
repartition = {}
etabs = []
individus = {}
for xml in root.glob('**/sts_emp*.xml'):
tree = ET.parse(xml)
tree_root = tree.getroot()
etab = tree_root.find('./PARAMETRES/UAJ').get('CODE')
etabs.append(etab)
for individu in tree_root.iter('INDIVIDU'):
id_ind = individu.get('ID')
nom_ind = individu.find('NOM_USAGE')
try:
nom_ind = nom_ind.text
except:
pass
prenom_ind = individu.find('PRENOM')
try:
prenom_ind = prenom_ind.text
except:
pass
fonction_ind = individu.find('FONCTION')
try:
fonction_ind = fonction_ind.text
except:
pass
key = id_ind
repartition.setdefault(key, [])
repartition[key].append(etab)
individus.setdefault(key, [])
individus[key].append({'nom': nom_ind, 'prenom': prenom_ind, 'fonction': fonction_ind})
etabs = list(set(etabs))
def guess_uid(individu):
nom = individu[0]['nom']
prenom = individu[0]['prenom']
return f"{prenom.lower()}.{nom.lower()}"
if __name__ == '__main__':
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('-t', '--type')
parser.add_argument('-e', '--extended', action='store_true')
args = parser.parse_args()
if args.type == 'individus':
if args.extended:
result = ["{}\t{}".format(individus[ind][0]['nom'], " ".join(sorted(set(e)))) for ind, e in repartition.items() if len(set(e)) > 1]
else:
result = [individus[ind][0]['nom'] for ind, e in repartition.items() if len(set(e)) > 1]
elif args.type == 'presents':
if args.extended:
result = ["{} {}\t\t{}".format(individus[ind][0]['nom'], individus[ind][0]['prenom'], " ".join(set(e))) for ind, e in repartition.items() if len(set(e).intersection(set(current_etabs))) > 1]
else:
result = [individus[ind][0]['nom'] for ind, e in repartition.items() if len(set(e).intersection(set(current_etabs))) > 1]
elif args.type == 'current_etabs':
result = current_etabs
elif args.type == 'etabs':
result = etabs
elif args.type == 'candidates':
connexion = Ldap()
connexion.connect()
user = Enseignant()
user.ldap_admin = connexion
candidates = {user.get_attr(candidate, 'intid')[0]: [etab]
for etab in etabs
for candidate in connexion._search('(&(objectclass=eolegroupe)(type=etablissement)(cn={etab}))'.format(etab=etab),
['memberUid'])[0][1]['memberUid']
if user._is_enseignant(candidate)}
result = ["{}\t{}".format(e[0]['nom'], " ".join(sorted(set(e)) + candidates[candidate])) for candidate in candidates for e in repartition[candidate] if len(set(e)) > 1]
else:
result = []
print("\n".join(sorted(result)))