From 802249b9e0ac56ff25b27ba4390ceebdc12ddcc0 Mon Sep 17 00:00:00 2001 From: Jesus Date: Mon, 30 Dec 2024 19:11:54 +0100 Subject: [PATCH 1/2] Add python test --- backend/cmd/testpython.py | 110 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 backend/cmd/testpython.py diff --git a/backend/cmd/testpython.py b/backend/cmd/testpython.py new file mode 100644 index 000000000..8c199badf --- /dev/null +++ b/backend/cmd/testpython.py @@ -0,0 +1,110 @@ +import os +import json + +def validate_json_structure(data): + errors = [] + + + if "board_id" in data: + if not isinstance(data["board_id"], int): + errors.append(f"'board_id' debe ser un entero, pero se encontró: {type(data['board_id']).__name__}.") + + if "board_ip" in data: + if not isinstance(data["board_ip"], str): + errors.append(f"'board_ip' debe ser una cadena, pero se encontró: {type(data['board_ip']).__name__}.") + + + if "measurements" in data: + if not isinstance(data["measurements"], list): + errors.append("La clave 'measurements' debe ser una lista.") + else: + for measurement in data["measurements"]: + if isinstance(measurement, dict): + required_keys = ["id", "name", "type", "podUnits", "displayUnits"] + for key in required_keys: + if key not in measurement: + errors.append(f"Falta la clave '{key}' en un objeto de 'measurements'.") + if "id" in measurement and not isinstance(measurement["id"], str): + errors.append(f"El 'id' debe ser una cadena en: {measurement}") + if "name" in measurement and not isinstance(measurement["name"], str): + errors.append(f"El 'name' debe ser una cadena en: {measurement}") + if "type" in measurement and not isinstance(measurement["type"], str): + errors.append(f"El 'type' debe ser una cadena en: {measurement}") + if "safeRange" in measurement and not isinstance(measurement.get("safeRange", []), list): + errors.append(f"'safeRange' debe ser una lista en: {measurement}") + if "warningRange" in measurement and not isinstance(measurement.get("warningRange", []), list): + errors.append(f"'warningRange' debe ser una lista en: {measurement}") + if "displayUnits" in measurement and not isinstance(measurement["displayUnits"], str): + errors.append(f"El 'podUnits' debe ser una cadena en: {measurement}") + if "podUnits" in measurement and not isinstance(measurement["podUnits"], str): + errors.append(f"El 'podUnits' debe ser una cadena en: {measurement}") #esto se puede quitar (json 516) + elif not isinstance(measurement, str): + errors.append("Cada elemento en 'measurements' debe ser un objeto o una cadena (nombre de archivo).") + + + if "packets" in data: + if not isinstance(data["packets"], list): + errors.append("La clave 'packets' debe ser una lista.") + else: + for packet in data["packets"]: + if isinstance(packet, dict): + required_keys = ["id", "name", "type","variable"] + for key in required_keys: + if key not in packet: + errors.append(f"Falta la clave '{key}' en un objeto de 'packets'.") + if "id" in packet and not isinstance(packet["id"], str): + errors.append(f"El 'id' debe ser una cadena en: {packet}") + if "name" in packet and not isinstance(packet["name"], str): + errors.append(f"El 'name' debe ser una cadena en: {packet}") + if "type" in packet and not isinstance(packet["type"], str): + errors.append(f"El 'type' debe ser una cadena en: {packet}") + if "variables" in packet: + if not isinstance(packet["variables"], list): + errors.append(f"'variables' debe ser una lista en: {packet}") + else: + for variable in packet["variables"]: + if not isinstance(variable, dict): + errors.append(f"Cada elemento en 'variables' debe ser un objeto en: {packet}") + if "name" not in variable: + errors.append(f"Falta la clave 'name' en un objeto de 'variables' en: {packet}") + elif not isinstance(packet, str): + errors.append("Cada elemento en 'packets' debe ser un objeto o una cadena (nombre de archivo).") + + return errors + +def validate_json_folder(folder_path): + + boards_file_path = os.path.join(folder_path, "boards.json") + + try: + + with open(boards_file_path, 'r') as boards_file: + boards_data = json.load(boards_file) + boards = boards_data.get("boards", {}) + except json.JSONDecodeError as e: + print(f"Error al decodificar JSON en {boards_file_path}: {e}") + return + except Exception as e: + print(f"Error al procesar el archivo {boards_file_path}: {e}") + return + + for board_name, board_file_path in boards.items(): + full_path = os.path.join(folder_path, board_file_path) + try: + with open(full_path, 'r') as board_file: + data = json.load(board_file) + errors = validate_json_structure(data) + if errors: + print(f"Errores encontrados en {full_path} para la placa '{board_name}':") + for error in errors: + print(f"- {error}") + else: + print(f"{full_path} para la placa '{board_name}' está bien estructurado.") + except json.JSONDecodeError as e: + print(f"Error al decodificar JSON en {full_path}: {e}") + except Exception as e: + print(f"Error al procesar el archivo {full_path}: {e}") + + +if __name__ == "__main__": + validate_json_folder("./JSON_ADE/") From df3c690d994cd1af086d0d6daf1b40f3059d353e Mon Sep 17 00:00:00 2001 From: Jesus Date: Mon, 30 Dec 2024 21:15:50 +0100 Subject: [PATCH 2/2] Python test --- backend/cmd/testpython.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/backend/cmd/testpython.py b/backend/cmd/testpython.py index 8c199badf..955e63f6e 100644 --- a/backend/cmd/testpython.py +++ b/backend/cmd/testpython.py @@ -1,5 +1,7 @@ import os import json +from collections import Counter + def validate_json_structure(data): errors = [] @@ -72,15 +74,24 @@ def validate_json_structure(data): return errors + + def validate_json_folder(folder_path): - boards_file_path = os.path.join(folder_path, "boards.json") - + try: - with open(boards_file_path, 'r') as boards_file: boards_data = json.load(boards_file) boards = boards_data.get("boards", {}) + + + board_keys = list(boards.keys()) + duplicate_keys = [key for key in board_keys if board_keys.count(key) > 1] + + if duplicate_keys: + print(f"Error: El archivo boards.json contiene claves duplicadas: {', '.join(duplicate_keys)}") + return + except json.JSONDecodeError as e: print(f"Error al decodificar JSON en {boards_file_path}: {e}") return @@ -88,6 +99,7 @@ def validate_json_folder(folder_path): print(f"Error al procesar el archivo {boards_file_path}: {e}") return + for board_name, board_file_path in boards.items(): full_path = os.path.join(folder_path, board_file_path) try: @@ -103,8 +115,14 @@ def validate_json_folder(folder_path): except json.JSONDecodeError as e: print(f"Error al decodificar JSON en {full_path}: {e}") except Exception as e: - print(f"Error al procesar el archivo {full_path}: {e}") + print(f"Error al procesar el archivo {full_path}: {e}") + + +if os.path.exists('./JSON_ADE/'): + print("La carpeta JSON_ADE existe") +else: + print("La carpeta JSON_ADE no existe") if __name__ == "__main__": validate_json_folder("./JSON_ADE/")