You are not logged in.
Hello,
Je suis en train de me prendre la tête un peu méchament avec une récursions des plus sympatiques.
Le contexte : je tente de me faire un webmail à base de python (via le framework pylons) et la lib JS ukijs. Tout va presque bien (les encodings explosent joyeusement et tout - détail), sauf que je me pète les dents sur l'affichage des dossiers IMAP.
Utilisant imaplib[1], je me retrouve avec un array de ce genre :
['Inbox.archive', 'Inbox.archive.2007', 'Inbox.entreprise', 'Inbox', 'Inbox.prive', 'Inbox.prive.parents', 'Inbox.archive.2007.entreprise']
Or, ukijs s'attend à avoir un beau JSON de ce type :
[ {'Inbox', 'children': [ {'archive', 'children': [ {'2007', 'children': [ {'entreprise'} ]} ]}, {'entrprise'}, {'prive', 'children': [ {'parents'} ]} ]} ]
(bon le json réel est un poil plus compliqué, mais dans l'ensemble, c'est ça... le json en question : http://ukijs.org/mail/mailbox/?callback … 6620862358 )
J'avoue ne pas savoir par quel bout empoigner le problème. J'ai passé pas mal de temps à chercher, mais rien trouvé... Si quelqu'un a déjà eu ce genre de petit délice...
Merci d'avance.
++
T.
1. http://docs.python.org/library/imaplib.html
Offline
Disclaimer: je fais du python depuis moins de 24h
def deepset(l,ks): found = False node = {} for folder in l: if folder["name"] == ks[0]: found = True node = folder if not found: node = {"name": ks[0]} l.append(node) if (len(ks) > 1): if "children" not in node: node["children"] = [] deepset(node["children"], ks[1:]) def parse(data): l = [] for s in data: deepset(l,s.split(".")) return l data = ['Inbox.archive', 'Inbox.archive.2007', 'Inbox.entreprise', 'Inbox', 'Inbox.prive', 'Inbox.prive.parents', 'Inbox.archive.2007.entreprise'] >>> parse(data) [{'name': 'Inbox', 'children': [{'name': 'archive', 'children': [{'name': '2007', 'children': [{'name': 'entreprise'}]}]}, {'name': 'entreprise'}, {'name': 'prive', 'children': [{'name': 'parents'}]}]}]
Offline
didjiu. magique! et rapide en plus. Vais voir ce que ça donne avec mes "quelques" dossiers
Offline
Sans changer le fonctionnement du code, voici ce que je fais maintenant :
rsp, data = self.connection.list() test = map(self.__parse_list_response, data) self.json_dir = parse(test)
self.connection est en fait un imaplib.IMAP4_SSL connecté
Merci, B0FH
Offline