@@ -33,8 +33,11 @@ async def send_request(session, url,exclusions, json):
3333 "Authorization" : f"Bearer { sesame_api_token } " ,
3434 "Content-Type" : "application/json; charset=utf-8" ,
3535 }
36+ employee_number_key = json .get ('inetOrgPerson' , {}).get ('employeeNumber' )
37+ if employee_number_key is None :
38+ employee_number_key = json .get ('$setOnInsert' ,{}).get ('inetOrgPerson' , {}).get ('employeeNumber' )
3639 params = {
37- "filters[inetOrgPerson.employeeNumber]" : f" { json . get ( 'inetOrgPerson' , {}). get ( 'employeeNumber' ) } " ,
40+ "filters[inetOrgPerson.employeeNumber]" : employee_number_key ,
3841 "filters[inetOrgPerson.employeeType]" : "TAIGA" ,
3942 }
4043 for regex in exclusions :
@@ -43,22 +46,24 @@ async def send_request(session, url,exclusions, json):
4346 if value :
4447 result = re .search (regex [r ],value )
4548 if result != None :
46- print (f"EXCLUDED { json . get ( 'inetOrgPerson' , {}). get ( 'employeeNumber' ) } { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
49+ print (f"EXCLUDED { employee_number_key [ 0 ] } { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
4750 return
4851 try :
4952
5053 async with session .post (url , json = json , headers = headers , params = params ) as response :
5154 #print(f"Request to {url} successful: {response.status}")
5255 if response .status == 304 :
53- print (f"{ response .status } UNMODIFIED { json .get ('inetOrgPerson' , {}).get ('employeeNumber' )} { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
56+ print (f"{ response .status } UNMODIFIED { employee_number_key [0 ]} { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
57+ elif response .status == 303 :
58+ print (f"{ response .status } NOT CONCERNED FUSIONNED { employee_number_key [0 ]} { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
5459 elif response .status == 200 :
55- print (f"{ response .status } MODIFIED { json . get ( 'inetOrgPerson' , {}). get ( 'employeeNumber' ) } { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
60+ print (f"{ response .status } MODIFIED { employee_number_key [ 0 ] } { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
5661 elif response .status == 201 :
57- print (f"{ response .status } ADDED { json . get ( 'inetOrgPerson' , {}). get ( 'employeeNumber' ) } { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
62+ print (f"{ response .status } ADDED { employee_number_key [ 0 ] } { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
5863 elif response .status == 202 :
59- print (f"{ response .status } ADDED WiTH WARNiNG { json . get ( 'inetOrgPerson' , {}). get ( 'employeeNumber' ) } { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
64+ print (f"{ response .status } ADDED WiTH WARNiNG { employee_number_key [ 0 ] } { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
6065 else :
61- print (f"{ response .status } -- { json . get ( 'inetOrgPerson' , {}). get ( 'employeeNumber' ) } { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
66+ print (f"{ response .status } -- { employee_number_key [ 0 ] } { json .get ('inetOrgPerson' , {}).get ('cn' )} " )
6267 await read_response (response )
6368 response .raise_for_status () # Raises error for 4xx/5xx responses
6469 except aiohttp .ClientResponseError as e :
@@ -84,13 +89,34 @@ async def process_data(data, config, file, session):
8489 with open (f'./data/{ file } ' , 'w' , encoding = 'utf-8' ) as fichier :
8590 json .dump (result , fichier , ensure_ascii = False , indent = 4 )
8691 exclude = config .get ('exclude' ,[])
87- tasks = [ send_request ( session , f' { sesame_api_baseurl } /management/identities/upsert' , config . get ( 'exclude' ,[]), entry ) for entry in result ]
88- await gather_with_concurrency ( sesame_import_parallels_files , tasks )
92+ for entry in result :
93+ await send_request ( session , f' { sesame_api_baseurl } /management/identities/upsert' , config . get ( 'exclude' ,[]), entry )
8994 print (f"Processed { file } " )
9095
9196async def load_config ():
97+ orchestrator_version = await getVersion ()
98+ print (f"Orchestrator version : { orchestrator_version } " )
9299 with open ('./config.yml' , 'r' , encoding = 'utf-8' ) as fichier :
93- return yaml .load (fichier , Loader = yaml .FullLoader )
100+ config = yaml .load (fichier , Loader = yaml .FullLoader )
101+ if orchestrator_version > 116 :
102+ for f in config .keys ():
103+ test = config .get (f ).get ('mapping' ).get ('inetOrgPerson.employeeNumber' )
104+ if test is None :
105+ test = config .get (f ).get ('mapping' ).get ('$setOnInsert.inetOrgPerson.employeeNumber' )
106+ if test is None :
107+ print ('Erreur: impossible de trouver le champs inetOrgPerson.employeeNumber' )
108+ exit (1 )
109+ if type (test ) != list :
110+ print (f"config.yml incompatible avec la version de l'orchestrator: { orchestrator_version } " )
111+ print ("Le champ inetOrgPerson.employeeNumber doit être de type multi-valeur" )
112+ print ("Exemple : " )
113+ print ("inetOrgPerson.employeeNumber:" )
114+ print ("- id_coord" )
115+ print ("A la place de : " )
116+ print ("inetOrgPerson.employeeNumber: id_coord" )
117+ exit (1 )
118+ return config
119+
94120
95121async def import_ind ():
96122 configs = await load_config ()
@@ -105,3 +131,14 @@ async def import_ind():
105131 async with aiohttp .ClientSession () as session :
106132 tasks = [process_data (datas [file ], configs [file ], file , session ) for file in cache_files if file in configs .keys ()]
107133 await gather_with_concurrency (sesame_import_parallels_files , tasks )
134+
135+
136+ async def getVersion ():
137+ async with aiohttp .ClientSession () as session :
138+ async with session .get (sesame_api_baseurl ) as response :
139+ json = await response .json ()
140+ version_str = json ['version' ].split ('.' )
141+ version = int (version_str [0 ])* 100 + int (version_str [1 ])* 10 + int (version_str [2 ])
142+ return (version )
143+
144+
0 commit comments