示例#1
0
    def get_directory_tree(directories):
        """
        Turns a directory list into a directory tree
        args: directories
        ret: directory_tree
        """

        root = [
            directory for directory in directories if directory[4] == None
        ][0]
        directories = [
            directory for directory in directories if directory[4] != None
        ]

        tree = {
            'id':
            root[0],
            'name':
            root[1],
            'owner':
            root[2],
            'type':
            'directory',
            'files': [{
                'id': f[0],
                'name': f[2],
                'owner': f[3],
                'type': 'file'
            } for f in Files.get_directory_files(root[0])]
        }

        while len(directories) != 0:
            parent = directories[0][4]
            parent_node = None

            tree_stack = [tree]

            while not parent_node and len(tree_stack) > 0:
                if tree_stack[0]['type'] == 'directory':
                    if tree_stack[0]['id'] == parent:
                        parent_node = tree_stack[0]
                    else:
                        tree_stack += tree_stack[0]['files']

                tree_stack = tree_stack[1:]

            if parent_node:
                parent_node['files'].append({
                    'id':
                    directories[0][0],
                    'name':
                    directories[0][1],
                    'owner':
                    directories[0][2],
                    'type':
                    'directory',
                    'files': [{
                        'id': f[0],
                        'name': f[2],
                        'owner': f[3],
                        'type': 'file'
                    } for f in Files.get_directory_files(directories[0][0])]
                })

            directories = directories[1:]

        return tree