Exemple #1
0
    def test_get_node_params(self):
        """Test get node params."""
        db = DB()
        root = db.add_root('val1')
        db.add_to_parent(root, 'val2', is_deleted=True)
        params = db.get_node_params(1)

        assert params.db_id == 1
        assert params.value == 'val2'
        assert params.is_deleted is True
Exemple #2
0
    def load(self, db_id: int, db: DB):
        """Load node from db."""
        # node already loaded
        if db_id in self.db_nodes:
            return

        # create node copy
        new_node_params = db.get_node_params(db_id)
        cache_id = self._cache_index
        self._cache_index += 1
        new_node = CNode(
            cache_id=cache_id,
            node_params=new_node_params,
        )
        self.db_nodes[new_node_params.db_id] = new_node
        self.cache_nodes[cache_id] = new_node

        # restore node connections

        adoptees = []
        for orphan in self.orphans:
            is_child = db.is_child(orphan, db_id)
            if is_child:
                child = self.db_nodes[orphan]
                new_node.append_child(child)
                adoptees.append(orphan)
        self.orphans -= set(adoptees)

        # restore parent and is_deleted attribute
        # if parent deleted node should be deleted to
        parent_id = db.get_parent_id(db_id)
        if parent_id in self.db_nodes:
            parent = self.db_nodes[parent_id]
            parent.append_child(new_node)
            self.orphans.discard(db_id)
            if parent.is_deleted:
                new_node.delete()
        else:
            self.orphans.add(db_id)