From 98c92aa9b51b3e34cf41692e1cfa08e6362fc568 Mon Sep 17 00:00:00 2001
From: Benedikt Hock <benedikt.hock@stud.tu-darmstadt.de>
Date: Thu, 9 Feb 2023 19:21:41 +0100
Subject: [PATCH] Add function for printing a component tree

---
 functions/lego_classes.py | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/functions/lego_classes.py b/functions/lego_classes.py
index 92ed684..eae5ee3 100644
--- a/functions/lego_classes.py
+++ b/functions/lego_classes.py
@@ -63,3 +63,23 @@ class LegoComponent:
         return f"Lego Component [{self.id}]"
 
 # TODO: Adjust default output when printing an item or component
+
+def print_component_tree(root, level=0, is_last=False):
+    # print component
+    component_padding = ""
+    if level > 0:
+        component_padding += "│   " * (level - 1)
+        if is_last:
+            component_padding += "└── "
+        else:
+            component_padding += "├── "
+    print(f"{component_padding}{root}")
+    # recursively print child components
+    for i, component in enumerate(root.components):
+        is_last_ = i == len(root.components) - 1 and len(root.items) == 0
+        print_component_tree(component, level + 1, is_last_)
+    # print items
+    for i, item in enumerate(root.items):
+        item_padding = "│   " * level
+        item_padding += "├── " if i < len(root.items) - 1 else "└── "
+        print(f"{item_padding}{item}")
-- 
GitLab