Swisslinux.org

− Le carrefour GNU/Linux en Suisse −

 

Langue

 

Le Forum

Vous n'êtes pas identifié.

#1 15 Jun 2010 18:52:58

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

[Python] récursions avec les dossiers IMAP

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 :

Code:

[
  {'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


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

#2 15 Jun 2010 21:33:42

BOFH
Admin
Lieu: Ecublens, VD
Date d'inscription: 03 Feb 2005
Messages: 862
Site web

Re: [Python] récursions avec les dossiers IMAP

Disclaimer: je fais du python depuis moins de 24h big_smile

Code:

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

 

#3 15 Jun 2010 22:03:04

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: [Python] récursions avec les dossiers IMAP

didjiu. magique! et rapide en plus. Vais voir ce que ça donne avec mes "quelques" dossiers smile


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

#4 15 Jun 2010 22:30:51

Tengu
Gourou(e) du libre
Lieu: La Tour-de-Peilz
Date d'inscription: 17 Nov 2004
Messages: 493
Site web

Re: [Python] récursions avec les dossiers IMAP

Sans changer le fonctionnement du code, voici ce que je fais maintenant :

Code:

    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 smile


Science sans conscience n'est que ruine de l'âme

https://twitter.com/swisstengu (compte twitter)
https://blog.tengu.ch/ (un blog parmis tant d'autres)

Hors ligne

 

Pied de page des forums

Powered by FluxBB