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