示例#1
0
    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"))
示例#2
0
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