08:16 <cyp> plop
        09:40 <jpcw> matin café
        09:41 <gawel> matin
        09:49 <feth> Bonjour
        09:51 <morgan`> hello
        11:05 <NelleV_> Bonjour
        11:05 <gawel> coucou
        15:31 <tarek> haypo: ping
        15:31 <haypo> tarek: pong
        15:31 <tarek> haypo: je test pysandbox et j'ai des questions
        15:32 <tarek> j'ai besoin de loader un module puis de lister les elements qu'il contient, puis eventuellement de les executer
        15:32 <tarek> pysandbox permet l'execution directe
        15:32 <tarek> mais est ce qu'il permet de renvoyer un objet module
        15:34 <haypo> "import module"" est autorisé dans pysandbox, ça renvoie un faux module
        15:35 <haypo> dir(module) ne liste que les symboles autorisés par ta politique de sécurité
        15:35 <tarek> mmm
        15:36 <haypo> il me semble que dir() marche bien mieux avec Python 2.6 pour pysandbox ;:)
        15:37 <tarek> et compile() existe ?
        15:37 <tarek> car j'ai un fichier
        15:37 <haypo> tarek: tu peux autoriser compile() oui
        15:38 <tarek> haypo: bon je vais essayer
        15:38 <tarek> en fait il me faut un boostrap si j'ai bien compris
        15:39 <tarek> un bout de python qui renvoie un module avec un appel a compile() dans la sandbox
        15:39 <haypo> euh
        15:39 <haypo> le code non sûr doit être exécuté dans la sandbox
        15:40 <tarek> je vais faire un snippet pour te montrer
        15:40 <haypo> tarek: c'est la feature 'code' qui autorise compile()
        15:41 <haypo> je reboote et je reviens de suite
        15:51 <haypo> tarek: pysandbox est encore un projet expérimental, qui manque de doc
        15:51 <haypo> je ne comprends pas moi même exactement comment il fonctionne :)
        15:51 <haypo> mais avec un exemple de code, je devrais pouvoir t'en dire plus ;)
        16:13 <tarek> haypo: ouai j'ecris ca
        16:14 <tarek> j'essaye de me rappeler comment passer d'un objet code a un objet module
        16:14 <haypo> un objet code n'est pas dangeureux
        16:15 <haypo> par contre, pysandbox interdit de crée un objet code arbitraire :-p
        16:17 <tarek> j'essaye de passer d'une string qui represente le contenu d'un fichier, vers un module
        16:19 <haypo> tarek: et ça marche ou pas ?
        16:19 <tarek> ben j'essaye deja en python pur
        16:19 <tarek> j;ai oublie comment faire
        16:19 <haypo> je ne vois pas ce que tu veux dire par "passer une chaîne à un module"
        16:20 <tarek> j'ai dis ca moi ?
        16:21 <haypo> "j'essaye de passer d'une string qui represente le contenu d'un fichier, vers un module" je n'ai pas compris ça
        16:21 <tarek> s = "def hello(): return 'hello'"
        16:21 <tarek> ca c'est une chaine
        16:21 <tarek> qui represente du code
        16:22 <tarek> je veux creer un oject module avec
        16:22 <tarek> j'essaye imp.load_source
        16:23 <haypo> import sys; mod=type(sys)('name'); compile(code, '<string>', 'exec') in mod.__dict__ # gruik
        16:23 <tarek> gni
        16:25 <tarek> compile(code, '<string>', 'exec')  ca renvoie un objec code
        16:25 <tarek> apres je sais pas comment creer un objet module avec
        16:28 <tarek> ah j'ai trouve
        16:28 <tarek> module 'new'
        16:28 <gawel> m = types.ModuleType()
        16:29 <tarek> par contre, mmm comment le remplir
        16:29 <tarek> gawel: ouai ou types. tiens new est plus dans py3
        16:29 <gawel> setattr
        16:29 <tarek> gawel: mmm, j'ai le contenu dans un object 'code'
        16:29 <gawel> ou exec in mod.__dict__ comme disait haypo 
        16:30 <tarek> mmm
        16:30 <tarek> non ca colle pas ca
        16:31 <tarek> exec in mod.__dict__ ca renvoie un boolean
        16:31 <tarek> compile(code, '<string>', 'exec')   ca renvoie un objet code
        16:31 <tarek> ce qui me manque c'est letape ou l'objet module est remplie avec l'objet code
        16:32 <tarek> j'ai l'impression que je me prends la tete pour rien
        16:32 <gawel> je crois aussi
        16:32 <tarek> module = load_module_from_string(string)  !!
        16:32 <tarek> c'est cette fonction que je cherche
        16:32 <tarek> module = load_module_from_string(module_name, string)  
        16:33 <tarek> dans imp il y a tout mais avec les fichiers
        16:35 <tarek> Ah!
        16:35 <tarek> http://code.activestate.com/recipes/82234-importing-a-dynamically-generated-module/
        16:35 <tarek> en fait c'est presque ce que haypo disais
        16:36 <tarek> sauf que compile(code, '<string>', 'exec')  !=   code = compile(code, '<string>', 'exec'); exec code in mod.__dict__
        16:37 <haypo> tarek: arg, j'ai loupé "exec "dans mon copier-coller
        16:37 <haypo> import sys; mod=type(sys)('name'); exec compile(code, '<string>', 'exec') in mod.__dict__ # gruik
        16:38 <tarek> bon ca marche
        16:38 <haypo> mod=type(sys)('name') <=> mod = types.ModuleType('name')
        16:39 <tarek> http://tarek.pastebin.mozilla.org/1333926
        16:39 <tarek> etape 1: done
        16:39 <tarek> etape 2: haypo, comment passer a pysandbox dans cet exemple ?
        16:39 <haypo> tarek: c'est quoi que tu veux exécuter dans pysandbox ?N
        16:40 <tarek> l'exec
        16:40 <tarek> de maniere a loader le module dans la sandbox
        16:40 <tarek> puis par la suite l'execution de ses elements
        16:40 <haypo> tarek: hum. pysandbox ne protège que le code exécuté dans pysandbox
        16:41 <tarek> ok. donc, comment executer ce code dans pysandbox ?
        16:41 <haypo> tu peux pas charger une module dangeureux dans pysandbox puis l'exécuter en dehors de pysandbox
        16:41 <tarek> j'ai pas l'intention de l'executer en dehors
        16:42 <haypo> tarek: à la fin, que fais-tu de ton module ? tu exécutés quoi ? une fonction porécise ?
        16:42 <haypo> précise*
        16:42 <tarek> peut etre qu'il manque une abstraction
        16:42 <tarek> n'importe quelle fonction dedans
        16:42 <tarek> e.g.
        16:42 <tarek> module = SandBoxedModule(name, code)
        16:42 <tarek> module.la_func()
        16:43 <tarek> tu connais zope ?
        16:43 <tarek> ou alors:
        16:43 <haypo> non :)
        16:43 <tarek> sandbox.run(module, function, args)
        16:43 <tarek> dans zope il ya RestrictedPython
        16:43 <tarek> qui permet d'utiliser des objets "Python"
        16:43 <tarek> c'est un peu l'idee
        16:44 <tarek> je veux pouvoir loader dynamiquenent des "modules" virtuels
        16:44 <tarek> contenant des fonctions
        16:44 <tarek> et appeler ces fonctions
        16:46 <tarek> c'est pour ca que je parlais de bootstraping tout a l'heure
        16:46 <tarek> e.g. la creation de modules dans la sandbox, puis leurs appels
        16:47 <haypo> tar	 http://tarek.pastebin.mozilla.org/1333930
        16:47 <haypo> tarek: http://tarek.pastebin.mozilla.org/1333930
        16:48 <haypo> ça pête car écrire dans stdout est dangeureux ! (interdit par la politique par dfaut)
        16:48 <haypo> utilise config = SandboxConfig('stdout', 'code') pour autoriser print
        16:49 <tarek> ah cool, extra !
        16:49 <haypo> pas besoin de créer un module
        16:49 <haypo> il te faut juste un espace de nom (dico namespace ici)
        16:49 <tarek> au final j'ai une classe qui publie call(nom_fonction, args)
        16:50 <tarek> ouai c parfait ca
        16:50 <tarek> nickel
        16:50 <tarek> j'implemente
        16:50 <tarek> thx
        16:51 <haypo> normalement, .execute() est safe si tu ne passes rien de dangeureux dans locals
        16:51 <haypo> il utilise globals={} pour n'avoir aucune variable glboale
        16:51 <haypo> tarek: je suis impressioné que ça marche, je pensais que ton use case n'était pas géré :)
        16:51 <haypo> si ça marche bien, faudrait que je l'ajoute en exemple
        16:51 <tarek> je suis ravi alors
        16:52 <tarek> mon use case final:
        16:52 <tarek> creation de web services avec redbarrel,
        16:52 <tarek> definition avec le dsl du service
        16:52 <tarek> et upload de "libs" python (modules)
        16:52 <haypo> bon, je vais pouvoir rajouter des portes dérobées pour rooter mozilla alors
        16:52 <tarek> puis link des libs dans le dsl
        16:52 <tarek> bah, ca va tourner dans des VMs
        16:52 <tarek> mais il me faut une sandbox pour l'UI surtout
        16:53 <tarek> pour pouvoir prevenir le user etc
        16:53 <haypo> tarek: le fichier README de pysandbox liste les limitations (et failles possibles)
        16:53 <tarek> ok, je vais voir
        16:53 <tarek> la c du prototypage mais
        16:53 <tarek> a terme, j'aimerais supporter JS aussi
        16:54 <haypo> je pense qu'il y a des outils plus élaborés (simples?) pour sandboxer javascript
        16:54 <tarek> vla le proto: http://ziade.org/redbarrel.mpeg
        16:54 <tarek> aucune idee
        16:54 <tarek> dans le proto tout est fonctionel. me manque juste l'upload de code pour creer des libs 
        16:56 <haypo> attention ! parfois les proto partent en prod :)
        16:56 <haypo> une conf en a parlé à pycon fr
        16:56 <tarek> ahaha
        16:56 <tarek> bah
        16:57 <tarek> ca me derangerais oas
        16:57 <tarek> du moment que c'est une VM
        16:59 <tarek> haypo: call() peut passer des arguments ?
        17:03 <tarek> oui
        17:03 <tarek> bon bah ca marche nickel
        17:07 <tarek> haypo: vala: http://tarek.pastebin.mozilla.org/1333933
        17:28 <haypo> tarek: tu peux éviter __text en écrivant le texte directement dans l'argument passé à sandbox.execute()
        17:28 <haypo> 'exec compile(%r, "<string>", "exec")' % code # encore plus gruik !
        17:34 <encolpe> miam
        17:34 <encolpe> ça marche avec eval ?
        17:35 <haypo> encolpe: pysandbox autorise eval(), mais eval() ne permet pas de définir une fonction (hello)
        17:38 <haypo> je lis douvent qu'eval est dangeureux, mais en fait non
        17:38 <haypo> eval() n'autorise pas import, def, ou autre
        17:39 <haypo> exec+compile() est bien plus dangeureux :)
        17:39 <encolpe> :)
        17:39 <haypo> >>> eval('import os')
        17:39 <haypo> SyntaxError: invalid syntax
        17:39 <haypo> >>> eval('1+1')
        17:39 <haypo> 2
        22:13 <No`> .o/
        22:36 <tarek> benoitc: ping
        22:39 <benoitc> pong
        23:02 <tarek> benoitc: c'est 1.5 millions actives, 4 millions registered
        23:03 <benoitc> tarek: k je vais remplacer
        23:03 <benoitc> ya d'autres trucs à revoir aussi
        23:03 <tarek> ok
        23:04 <tarek> je fini un truc et je suis a toi
        23:04 <benoitc> enfonin là je re dans 4h
        23:04 <benoitc> mmm
        23:04 <benoitc> je vais dormir un peu ..
        23:18 <tarek> benoitc: http://ziade.org/redbarrel2.mpeg
        23:21 <haypo> bonjour gevent ! bonjour <cookie en clair> !
        23:22 <haypo> ah ah, ça me rappelle une conférence avec une clé en clair :)
        23:24 <tarek> gni ?
        23:24 <haypo> tarek: ton webservice affiche potentiellement des infos sensibles, non ?
        23:24 <haypo> dumoins, dans ta vidéo :)
        23:24 <tarek> a oui c juste une demo
        23:25 <haypo> en tout cas, on dirait que ça marche
        23:25 <tarek> c pour montrer que la fonction recoit la rquete
        23:25 <misc> amusant, mplayer boucle sur la video 
        23:25 <tarek> a oui moi auissi
        23:27 <tarek> haypo: oui nickel la sandbox :D
        23:27 <tarek> l;etape d'apres c la meme en js
        23:27 <haypo> misc: pas ici