def test_tree_find(self): """ Test if tree can be found withing VSS tree """ source_root = { "description": "High-level vehicle data.", "type": "branch", "uuid": "f6750f15-ba2f-4eab-adcc-19a500982293" } source_drivetrain = { "description": "Drivetrain branch.", "type": "branch", "uuid": "5fb3f710-ed60-426b-a083-015cc7c7bc1b" } source_drivetrain_element = { "description": "Some Drivetrain element.", "type": "sensor", "datatype": "string", "uuid": "9101bbea-aeb6-4b0e-8cec-d8b126e77898" } node_root = VSSNode("Vehicle", source_root) node_drivetrain = VSSNode("Drivetrain", source_drivetrain, node_root) node_drivetrain_element = VSSNode("SomeElement", source_drivetrain_element, node_drivetrain) self.assertFalse(node_drivetrain_element.is_private()) self.assertTrue( VSSNode.node_exists(node_root, "/Vehicle/Drivetrain/SomeElement"))
def detect_and_merge(tree_root: VSSNode, private_root: VSSNode): r = Resolver() private_element: VSSNode for private_element in LevelOrderIter(private_root): if private_element == private_root: continue if not private_element.is_private(): continue element_name = "/" + private_element.qualified_name() candidate_name = element_name.replace("Private/", "") if not VSSNode.node_exists(tree_root, candidate_name): new_parent_name = "/" + private_element.parent.qualified_name().replace("/Private", "") new_parent = r.get(tree_root, new_parent_name) private_element.parent = new_parent elif private_element.is_leaf: other_node = r.get(tree_root, candidate_name) other_node.merge(private_element) private_element.parent = None