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