From 93a99ef0400a9fbe7b7377b40028402f183c55e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Fugmann?= <andre.fugmann@rwth-aachen.de> Date: Thu, 14 Nov 2024 14:02:13 +0100 Subject: [PATCH] Add semantic definitions to the translation process --- src/main.py | 1 + src/translate.py | 18 ++++++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/main.py b/src/main.py index f3ef87c..2f9278c 100644 --- a/src/main.py +++ b/src/main.py @@ -88,6 +88,7 @@ async def validate(model: str, files: list[UploadFile], semantic: bool = False): if files[0].filename.endswith('json'): json_files = {file.filename[:-5]: json.loads((await file.read()).decode('utf-8')) for file in files} translated_files = translate.translate_files_to_text(json_files) + # TODO: Mapping for filename in translated_files: with open(os.path.join(in_path, f'{filename}.soil'), 'wb') as outfile: outfile.write(translated_files[filename].encode('utf-8')) diff --git a/src/translate.py b/src/translate.py index 4c3d39b..748b0f6 100644 --- a/src/translate.py +++ b/src/translate.py @@ -80,7 +80,14 @@ def element_to_text(element: Dict[str, any], filename: str, files: dict[str, any custom_descriptions = {} temp_output = element["elementType"] + " " + element["name"].replace(" ", "") + " " if element['elementType'] == 'component' and 'baseComponent' in element: - temp_output += "extends " + get_element_type_name(element["baseComponent"], filename, files) + " " + temp_output += "extends " + element['baseComponent']['name'] + " " + + if (element["elementType"] == "component" or + element["elementType"] == "function" or + element["elementType"] == "variable"): + if element['semanticDefinition'] is not None: + temp_output += f"defines <{element['semanticDefinition']}> " + temp_output += "{\n" if element["elementType"] == "interface": @@ -94,7 +101,7 @@ def element_to_text(element: Dict[str, any], filename: str, files: dict[str, any return temp_output + "}\n\n" for key in element: - if key in ["uuid", "cardOpen", "elementType", "constant"]: + if key in ["baseComponent", "uuid", "cardOpen", "elementType", "constant", "semanticDefinition"]: continue elif key in ["arguments", "returns", "components", "parameters", "functions", "measurements"]: if len(element[key]): @@ -109,6 +116,13 @@ def element_to_text(element: Dict[str, any], filename: str, files: dict[str, any elif key == "streams": if len(element[key]) > 0: temp_output += " streams:\n" + streams_to_text(element[key]) + elif key == "unit": + # Probably too hacky to just check if the unit string contains ':' + # to determine if it is a semantic unit or not + if ':' in element['unit']: + temp_output += f" unit: <{element['unit']}>\n" + else: + temp_output += f" unit: {element['unit']}\n" elif key == "range": if element["datatype"] != "enum": minimum = '' if element["range"][0] is None else str(element["range"][0]) -- GitLab