From 325ac41ef166da7184dc4d91adc57e7003409db7 Mon Sep 17 00:00:00 2001 From: Sora Date: Sat, 11 Nov 2023 22:54:49 +0100 Subject: [PATCH] is sorting good? --- main.py | 35 +++++++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/main.py b/main.py index 796087d..673c4d5 100644 --- a/main.py +++ b/main.py @@ -110,17 +110,38 @@ def yaml_to_services_list(filepath: str) -> dict|None: print(f"appending {servicename}") mustbefore = [] if "depends_on" in ycontent["services"][servicename]: - for dependance in ycontent["services"][servicename]["depends_on"]: - mustbefore.append(dependance) + for dependencie in ycontent["services"][servicename]["depends_on"]: + mustbefore.append(dependencie) serviceslist[servicename] = {"must_before": mustbefore, "must_after": [], "backupdone": False} # on reparcourt une seconde fois pour définir de quels services ilssont les dépendances for service in serviceslist: if len(serviceslist[service]["must_before"]): - for dependance in serviceslist[service]["must_before"]: - if service not in serviceslist[dependance]["must_after"]: - serviceslist[dependance]["must_after"].append(service) + for dependencie in serviceslist[service]["must_before"]: + if service not in serviceslist[dependencie]["must_after"]: + serviceslist[dependencie]["must_after"].append(service) + + return serviceslist + + +def order_services_by_dependencies(servicesdict: dict) -> list: + ''' + Génère une liste avec les noms de services pour ordonner leurs coupures par dépendances. + Les containers étant requis seront placés avant ceux les requérant. + :param servicesdict: dict + :return: list + ''' + serviceslist = [] + for service in servicesdict: + if len(servicesdict[service]["must_after"]) and len(serviceslist): + depindex = len(serviceslist) -1 + for dependencieof in servicesdict[service]["must_after"]: + if dependencieof in serviceslist and serviceslist.index(dependencieof) < depindex: + depindex = serviceslist.index(dependencieof) + serviceslist.insert(service, depindex) + else: + serviceslist.append(service) return serviceslist @@ -181,4 +202,6 @@ if __name__ == '__main__': #read_config_file() - print(json.dumps(yaml_to_services_list(composefile), indent=4)) + servicesDict = yaml_to_services_list(composefile) + servicesList = order_services_by_dependencies(servicesDict) + print(servicesList)