#!/usr/bin/env python3 import xml.etree.ElementTree as ET from pathlib import Path from scribe.eoleldap import get_etabs 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)) 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 else: result = [] print("\n".join(sorted(result)))