Skip to content

Commit d76124c

Browse files
committed
Update import_ind.py
1 parent 5201064 commit d76124c

File tree

1 file changed

+47
-10
lines changed

1 file changed

+47
-10
lines changed

src/import_ind.py

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

9196
async 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

95121
async 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

Comments
 (0)