Vous n'êtes pas identifié.
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
Hors ligne
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'}]}]}]
Hors ligne
didjiu. magique! et rapide en plus. Vais voir ce que ça donne avec mes "quelques" dossiers
Hors ligne
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
Hors ligne