99 lines
3.7 KiB
Python
99 lines
3.7 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
|
|
members = []
|
|
for etab in etabs:
|
|
etab_group = connexion._search('(&(objectclass=eolegroupe)(type=etablissement)(cn={etab}))'.format(etab=etab),
|
|
['memberUid'])
|
|
if etab_group:
|
|
enseignants = [enseignant
|
|
for enseignant in etab_group[0][1].get('memberUid', [])
|
|
if user._is_enseignant(enseignant)]
|
|
members.extend(enseignants)
|
|
members = sorted(list(set(members)))
|
|
result = []
|
|
for member, ind in [(member, user.get_attr(member, 'intid')) for member in members]:
|
|
user_etabs = set(repartition.get(ind[0], []) + user.get_etab(member, multi_etabs=True))
|
|
if len(user_etabs) > 1:
|
|
partial_result = (member, ind[0], *sorted(user_etabs))
|
|
result.append(partial_result)
|
|
result.sort(key=lambda x: x[2:])
|
|
result = [f"{el[0]}\t\t{el[1]}\t{' '.join(el[2:])}" for el in result]
|
|
else:
|
|
result = []
|
|
print("\n".join(sorted(result)))
|
|
|