I am receiving a response from imap server like below. Which contains all the folders for particular user account.
imap.list_folders()
outputs :
[((b'\\HasChildren',), b'.', 'welcome'), ((b'\\HasChildren',), b'.', 'welcome.welcomeqqqqq'), ((b'\\HasNoChildren',), b'.', 'welcome.welcomeqqqqq.downunder'), ((b'\\HasNoChildren',), b'.', 'test2'), ((b'\\HasNoChildren',), b'.', 'Arunnnnnnnnn')]
Here welcome
is the folder name.
And HasChildren
means the folder has a child. welcome.welcomeqqqqq
is the children of welcome
. Parent and Child are separated by dot.
I want to form a treeview format from the folder list recursively.
Expected output :
[
{
"folder": "Top",
"parent": "None",
"children": [
{
"folder": "Folder 1",
"parent": "Top",
"children": [
{
"folder": "Sub Folder 1",
"parent": "Folder 1",
"children": []
},
{
"folder": "Sub Folder 2",
"parent": "Folder 1",
"children": [
{
"folder": "Sub Folder Sub Folder 1",
"parent": "Sub Folder 2",
"children": []
},
{
"folder": "Sub Folder Sub Folder 2",
"parent": "Sub Folder 2",
"children": []
}
]
}
]
},
{
"folder": "Folder 2",
"parent": "Top",
"children": []
}
]
}
]
Any help would be appreciated.
You can do this with a recursive function:
folders = [
((b'\\HasChildren',), b'.', 'welcome'),
((b'\\HasChildren',), b'.', 'welcome.welcomeqqqqq'),
((b'\\HasNoChildren',), b'.', 'welcome.welcomeqqqqq.downunder'),
((b'\\HasNoChildren',), b'.', 'test2'),
((b'\\HasNoChildren',), b'.', 'Arunnnnnnnnn')
]
def make_my_list_of_dict(my_list_of_folders, check_parent = None):
my_list = []
for e in my_list_of_folders:
split_char = e[1].decode()
parent = e[2].split(split_char)[-2] if split_char in e[2] else None
folder = e[2].split(split_char)[-1]
if parent == check_parent:
if e[0][0] == b'\\HasChildren':
children = make_my_list_of_dict(my_list_of_folders, folder)
my_list.append({'folder':folder, 'parent':parent, 'children':children})
else:
my_list.append({'folder':folder, 'parent':parent, 'children':[]})
return my_list
result = make_my_list_of_dict(folders)
print(result)
output:
[
{'folder': 'welcome',
'parent': None,
'children': [
{'folder': 'welcomeqqqqq',
'parent': 'welcome',
'children': [
{'folder': 'downunder',
'parent': 'welcomeqqqqq',
'children': []
}
]
}
]
},
{'folder': 'test2',
'parent': None,
'children': []
},
{'folder': 'Arunnnnnnnnn',
'parent': None,
'children': []
}
]