Commit 10f31ff1 authored by Adrien Laporte's avatar Adrien Laporte
Browse files

Converter : structure node + ajout weight

parent 0b81120b
......@@ -21,11 +21,10 @@ output_file = open(json_output_file, "w", encoding="utf8")
with open(json_input_file, "r", encoding="utf8") as input_file:
input = json.loads(input_file.read())
converted_chaton = convert_json.convertValue(input, "chaton")
liste_chatons = convert_json.convertChatons(converted_chaton)
liste_chatons = convert_json.convertSchema(input)
json.dump(
[chaton for chaton in liste_chatons],
liste_chatons,
output_file,
indent=2,
ensure_ascii=False,
......
......@@ -7,6 +7,7 @@ from textwrap import dedent
from data import conversion
# Parser :
def makeParser() -> argparse.ArgumentParser():
"""Permet de créer le argparse initial"""
parser = argparse.ArgumentParser()
......@@ -28,6 +29,7 @@ def makeParser() -> argparse.ArgumentParser():
return parser
# Partie JSON
def convertDegradability(nb: int) -> str:
"""Convertir une durée exprimée en int en un texte explicite"""
if nb == 0:
......@@ -52,7 +54,7 @@ def debug(str):
def convertDict(d: dict, context: str = None) -> dict:
"""Convertir un dictionnaire de notre format en format entraide"""
"""Convertir un dictionnaire de notre format json en format entraide"""
showNode(f"D : {d}, {context}")
return {
ck: cv
......@@ -65,7 +67,7 @@ def convertDict(d: dict, context: str = None) -> dict:
def convertList(l: list, context: str = None) -> list:
"""Convertir une liste de notre format en format entraide"""
"""Convertir une liste de notre format json en format entraide"""
showNode(f"L : {l}, {context}")
return [
cv
......@@ -93,6 +95,8 @@ def convertStr(v: str, context: str = None) -> str:
return v
elif context == "name":
return v
elif context == "consent":
pass # Todo, on ne l'a pas dans le schéma
elif context == "software":
soft = conversion["values"]["software"].get(v, None)
if soft is None:
......@@ -107,11 +111,14 @@ def convertInt(v: int, context: str = None) -> str:
"""Convertir un entier en format entraide"""
if context == "degradability":
return convertDegradability(v)
elif context == "weight":
return v
return None
def convertValue(val, context: str = None):
"""Convertisseur générique, point d'entrée de la conversion"""
"""Convertisseur json générique, point d'entrée de la conversion"""
showNode(f"V : {val}, {context}")
if type(val) is int:
return convertInt(val, context)
......@@ -125,18 +132,21 @@ def convertValue(val, context: str = None):
return None
def convertChatonL(l: list) -> list:
# Partie explosion des Chatons par services
def exploseChatonL(l: list) -> list:
"""Explosion des listes de Chatons"""
return [
chaton
for converted_cs in [ # Une liste par Chaton en théorie
convertChatons(chaton)
exploseChatonServices(chaton)
for chaton in l
]
for chaton in converted_cs # Une seule liste à la fin
]
def convertChatonD(c: dict) -> list:
def exploseChatonD(c: dict) -> list:
"""Explosion des dictionnaires de Chatons"""
services = c['services']
chaton = c.copy()
del chaton['services']
......@@ -146,16 +156,18 @@ def convertChatonD(c: dict) -> list:
]
def convertChatons(d) -> list:
def exploseChatonServices(d) -> list:
"""Explosion des Chatons selon leur type"""
if type(d) is dict:
return convertChatonD(d)
return exploseChatonD(d)
elif type(d) is list:
return convertChatonL(d)
return exploseChatonL(d)
else:
return []
def makeChatonService(c: dict, service: dict) -> dict:
"""Passage des champs du service aux champs du chaton"""
nc = c.copy()
software = service.get('software')
description = conversion['descriptions']['software'].get(
......@@ -170,3 +182,24 @@ def makeChatonService(c: dict, service: dict) -> dict:
nc[k] = v
return nc
# Nodeification du json :
def nodeify(liste_chaton: list) -> dict:
"""Convertir en une structure node la liste de Chatons"""
return {
"nodes": [
{"node": chaton}
for chaton in liste_chaton
]
}
# Synthèse des conversions :
def convertSchema(input) -> dict:
"""Maxi-conversion entre le schéma de la Tx et le schéma entraide"""
return nodeify( # Structure node
exploseChatonServices( # Explosion par service
convertValue(input, "chaton") # Conversion valeur/clé JSON
)
)
......@@ -9,7 +9,7 @@ conversion = {
"software": "software", # list → str
# "": "type", # Ajouté après coup
"public": "open",
"weight": "weight", # Todo
"weight": "weight",
"consent": "consent", # Todo
"degradability": "degradability",
"url": "endpoint",
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment