From cb0147fe27accf38cae10dc10870f8bd34885f89 Mon Sep 17 00:00:00 2001 From: Benedikt Hock <benedikt.hock@stud.tu-darmstadt.de> Date: Wed, 1 Mar 2023 17:11:14 +0100 Subject: [PATCH] add check for correct hierarchy --- functions/classes.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/functions/classes.py b/functions/classes.py index abc3eee..81d0f8b 100644 --- a/functions/classes.py +++ b/functions/classes.py @@ -7,6 +7,7 @@ import uuid from typing import List, Dict import json import copy +import operator # TODO @@ -184,6 +185,11 @@ class LegoAssembly: return clone def print_assembly_tree(root, level=0, is_last=False): + if not isinstance(root, LegoAssembly): + raise TypeError( + f"Argument should be of type {LegoAssembly.__name__}, " + f"got {type(root).__name__} instead." + ) # print component assembly_padding = "" if level > 0: @@ -204,8 +210,24 @@ def print_assembly_tree(root, level=0, is_last=False): print(f"{component_padding}{item}") -def check_aggregation_hierarchy(root): - pass +def correct_aggregation_hierarchy(root: LegoAssembly, strict: bool = False): + if not isinstance(root, LegoAssembly): + raise TypeError( + f"Argument should be of type {LegoAssembly.__name__}, " + f"got {type(root).__name__} instead." + ) + higher_level = operator.le + if strict: + higher_level = operator.lt + for component in root.components: + if not higher_level(root.layer.value, component.layer.value): + return False + for assembly in root.assemblies: + if not higher_level(root.layer.value, assembly.layer.value): + return False + if not correct_aggregation_hierarchy(assembly, strict): + return False + return True class KPIEncoder(json.JSONEncoder): -- GitLab