manatlan a écrit 1590 commentaires

  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 3.

    Et la même application htag, qui fonctionne complètement en client-side/html (car htag et matplotlib sont compatible pyscript)

    https://raw.githack.com/manatlan/htag/main/examples/pyscript_matplotlib.html

    C'est bluffant quand même … merci pyscript !

  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 2.

    Et la même application htag, qui fonctionne complètement en client-side/html (car htag et matplotlib sont compatible pyscript)

    https://raw.githack.com/manatlan/htag/main/examples/pyscript_matplotlib.html

    C'est bluffant quand même … merci pyscript !

  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 1.

    C'est complètement HS.

    Mais quand tu fais du python sous Windows, qui utilise un encoding particulier par défaut pour ses fichiers textes …
    Je peux garantir que ça a du sens, même sous py3.

    Sous nux, tout est utf8.

  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 1.

    Voilà une version de matplotlib+htag, avec un composant TagPlot qui va bien

    # -*- coding: utf-8 -*-
    
    from htag import Tag
    import matplotlib.pyplot as plt
    import io,base64,random
    
    class TagPlot(Tag.span):
        def init(self,plt):
            self["style"]="display:inline-block"
            with io.StringIO() as fid:
                plt.savefig(fid,format='svg',bbox_inches='tight')
                self <= fid.getvalue()
    
    class App(Tag):
        def init(self):
            self.main = Tag.div()
            self.liste=[1, 2, 5, 4]
    
            # create the layout
            self <= Tag.h3("Matplotlib test" + Tag.button("Add",_onclick=self.add_random))
            self <= self.main
    
            self.redraw_svg()
    
        def add_random(self,o):
            self.liste.append( random.randint(1,6))
            self.redraw_svg()
    
        def redraw_svg(self):
            plt.ylabel('some numbers')
            plt.xlabel('size of the liste')
            plt.plot(self.liste)
    
            self.main.clear()
            self.main <= TagPlot(plt)
    
    if __name__=="__main__":
        from htag.runners import BrowserHTTP
        BrowserHTTP(App).run()
  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 1.

    Et comme, le principal intérêt de htag : c'est de pouvoir créer ses composants réutilisables, voilà une version avec un composant TagPlot, qui auto génère un svg à partir d'un objet matplotlib

    # -*- coding: utf-8 -*-
    
    from htag import Tag
    import io,base64,random
    import matplotlib.pyplot as plt
    
    class TagPlot(Tag.svg):
        def init(self,plt):
            self["viewBox"]="0 0 1000 1500"
            with io.StringIO() as fid:
                plt.savefig(fid,format='svg')
                self.set( fid.getvalue() )
    
    class App(Tag):
        def init(self):
            self.main = Tag.div()
            self.liste=[1, 2, 5, 4]
    
            # create the layout
            self <= Tag.h3("Matplotlib test" + Tag.button("Add",_onclick=self.add_random))
            self <= self.main
    
            self.redraw_svg()
    
        def add_random(self,o):
            self.liste.append( random.randint(1,6))
            self.redraw_svg()
    
        def redraw_svg(self):
            plt.plot(self.liste)
            plt.ylabel('some numbers')
            plt.xlabel('size of the liste')
    
            self.main.set( TagPlot(plt) )
    
    if __name__=="__main__":
        from htag.runners import BrowserHTTP
        BrowserHTTP(App).run()
  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 1.

    Fichtre, tu as raison ;-)
    je débute en matplotlib ;-)

    Voilà une version qui génère un vrai SVG, et provoque le raffraichissement de l'image avec du vrai svg ;-) (plus besoin de dataurl !)

    # -*- coding: utf-8 -*-
    
    from htag import Tag
    import io,base64,random
    import matplotlib.pyplot as plt
    
    class App(Tag):
        def init(self):
            self.img = Tag.svg(_viewBox="0 0 1000 1500")
            self.liste=[1, 2, 5, 4]
    
            # create the layout
            self <= Tag.h3("Matplotlib test" + Tag.button("Add",_onclick=self.add_random))
            self <= self.img
    
            self.redraw_svg()
    
        def add_random(self,o):
            self.liste.append( random.randint(1,6))
            self.redraw_svg()
    
        def redraw_svg(self):
            plt.plot(self.liste)
            plt.ylabel('some numbers')
            plt.xlabel('size of the liste')
    
            with io.StringIO() as fid:
                plt.savefig(fid,format='svg')
                self.img.set( fid.getvalue() )
    
    if __name__=="__main__":
        from htag.runners import BrowserHTTP
        BrowserHTTP(App).run()
  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 1.

    je l'ai fait par moi même …. cf plus bas

    google m'a trouvé un exemple simple, et comment récup un svg …. j'ai tout intégré dans un exemple simple d'htag

  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 1.

    J'avais 5min pour me mettre à matplotlib …. voilà un exemple fonctionnel (necessite htag+matplotlib)

    # -*- coding: utf-8 -*-
    
    from htag import Tag
    import matplotlib.pyplot as plt
    import io,base64,random
    
    class App(Tag):
        def init(self):
            self.img = Tag.img()
            self.liste=[1, 2, 5, 4]
    
            # create the layout
            self <= Tag.h3("Matplotlib test") + self.img
            self <= Tag.button("Add",_onclick=self.add_random)
    
            self.redraw_svg()
    
        def add_random(self,o):
            self.liste.append( random.randint(1,6))
            self.redraw_svg()
    
        def redraw_svg(self):
            plt.plot(self.liste)
            plt.ylabel('some numbers')
    
            data=io.BytesIO()
            plt.savefig(data)
            data.seek(0)
    
            self.img["src"]=u'data:image/svg;base64,'+base64.b64encode(data.read()).decode()
    
    
    if __name__=="__main__":
        from htag.runners import BrowserHTTP
        BrowserHTTP(App).run()
  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 1.

    Si vous avez un bout de code simple (genre 10lignes) qui génère un graphique SVG avec matplotlib … je veux bien rajouter un exemple htag qui afficherait le rendu …

    Histoire de rajouter à mes exemples htag. Car tous l'intérêt de htag, c'est de pouvoir combiner des libs python, et des libs js …

  • [^] # Re: Kivy

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 2.

    Je ne connais pas kivy plus que ça …
    Certes, le runner htag qui se lance sous android est basé sur kivy … mais il n'y utilise que la partie "webview" de kivy (et tout le binz autours de p4a/buildozer pour que ça build proprement) …

    D'ailleurs, j'ai réalisé une appli mobile (de démo, mais l'appli est réellement utile (un clone de tricount), avec htag evidemment, et j'ai tout déposé sur github :
    https://github.com/manatlan/TriApp (sources + apk)

    L'appli (le source python) tourne évidemment sur n'importte quel plateforme. Mais le github utilise une action/workflow pour builder l'APK (via buildozer) de manière automatique et transparente. Du coup, difficile de faire plus simple pour passer d'un code source python à un apk qui fonctionne OOTB ;-)

  • [^] # Re: Interfaçage avec autres libs ?

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 3.

    Je ne manip pas du tout matplotlib/numpy, mais il y a aucune raison que ça ne soit pas possible ;-)

    D'après ce que j'ai vu, j'ai l'impression que matplotlib est capable de restituer des ressources de type "Pil.Image" ….

    Et à l'aide d'une méthode python comme celle ci (qui converti une "Pil.Image" en dataurl):

    import io,base64
    
    def img2dataurl(img):
        data = io.BytesIO()
        img.save(data, "PNG")
        data64 = base64.b64encode(data.getvalue())
        return u'data:image/png;base64,'+data64.decode()

    Côté HTAG, tu peux créer une "image" (balise html img) comme ceci :

    self += Tag.img( _src=img2dataurl(my_pil_image) )

    Et le tour est joué ;-)

  • # A working example OO ;-)

    Posté par  (site web personnel) . En réponse au journal htag : realiser des UI en python3 sur web, mobile et desktop.. Évalué à 2.

    Le site officiel : https://github.com/manatlan/htag

    Juste un exemple qui fonctionnera OOTB sur votre poste, après un pip install htag !

    Créer le fichier suivant, et lancer le :

        from htag import Tag
    
        class Stars(Tag.div):
            def init(self,nb):
                self["style"] = "background: #"+hex(nb*666)[2:]
                self <= "⭐" * nb
    
        class MyApp(Tag.body):
            def init(self):
    
                self.main = Tag.div()
    
                # create the layout
                self <= Tag.button("3",nb=3,_onclick=self.click )
                self <= Tag.button("4",nb=4,_onclick=self.click )
                self <= Tag.button("5",nb=5,_onclick=self.click )
                self <= Tag.button("clear",_onclick=lambda o: self.main.clear() )
                self <= self.main
    
            def click(self, o):
                self.main <= Stars(o.nb)
    
        #======================================
        from htag.runners import BrowserHTTP as Runner # need htag only !
        #~ from htag.runners import DevApp as Runner # need htag+uvicorn+starlette !
    
        app=Runner( MyApp )
        if __name__=="__main__":
            app.run()
  • # On est tous, le con de qqu'un d'autre...

    Posté par  (site web personnel) . En réponse au journal Les cons sur LinuxFR. Évalué à 4.

    Uniquement, pq c'est vendredi…

    On est tous, le con de qqu'un d'autre…

    Mais Je comprends bien tes propos. Et je l'ai vécu …
    Et certes, souvent des vendredis … Où les trolls s'acharnent a être débattus …

  • # parles en sur reddit

    Posté par  (site web personnel) . En réponse à la dépêche Sortie de Cover Thumbnailer v0.10.0. Évalué à 3.

    Tu devrai lancer ton appel sur reddit.com/r/Python …
    Je suis certain que tu trouveras des pythonistas près à mettre la main à la patte

  • [^] # Re: Coquille dans la doc

    Posté par  (site web personnel) . En réponse au journal Reqman(2), un postman GPL qui utilise de simples fichiers YAML. Évalué à 1.

    merci!

  • [^] # Re: « de simples fichiers YAML »

    Posté par  (site web personnel) . En réponse au journal Reqman(2), un postman GPL qui utilise de simples fichiers YAML. Évalué à -1.

    pas le plus agréable à utiliser.

    Avec un bon editeur, avec coloration syntaxique et tutti canti … ça va, au moins pour débuter.
    EN venant du monde python c'est peut être plus naturel d'avoir son éditeur réglé avec l'indentation sur 4 espaces. (pour éviter le mix tab/spaces)

    Après, quand tu as compris … ça va tout seul.

  • [^] # Re: Sympa

    Posté par  (site web personnel) . En réponse au journal Reqman(2), un postman GPL qui utilise de simples fichiers YAML. Évalué à 1.

    cool …

    n'hésite pas à faire du feedback …
    mon equipe et moi même l'utilisons tous les jours (plusieurs fois par jour !). ça réponds carrément à nos besoins, et j'aimerai savoir si ça réponds aux besoins des autres … sachant que j'ai tout fait pour que ça le fasse … (en me basant sur les concepts postman .. de collections (mais avec des folders/fichiers) et sur les environnements (avec le fichier reqman.conf))

    Nous, on a plus de 2000 tests, avec 500 requests … sur environs 100 apis rests, à travers plusieurs ressources, avec oauth2 flow … qu'on peut jouer et comparer sur 4 environnements différents (du local à la prod). J'ai également 500 tests sur diverses api persos …
    ça marche bien … pour nous/moi.

  • [^] # Re: « de simples fichiers YAML »

    Posté par  (site web personnel) . En réponse au journal Reqman(2), un postman GPL qui utilise de simples fichiers YAML. Évalué à 0.

    C'est vendredi … et je me retiens … (pas de trolls .. pas de trolls)

    C'est marrant comme les consciences ont évolué … mais qu'est ce que ça prends du temps !!!

    Il y a 20ans, on disait la même chose du python … patati, patata l'indentation …
    Maintenant, c'est complètement acquis …

    Il y a 10ans, le yaml rencontrait les mêmes rancœurs que le python jadis … patati patata l'indentation …
    Et maintenant, en faisant un peu gaffe; on voit que le yaml est vraiment devenu presque le standard au niveau config un peu partout.

    Du coup, on peut penser que dans 10ans … il sera complètement accepté !
    Bref … c'est une good news !

  • [^] # Re: don't be evil he said...

    Posté par  (site web personnel) . En réponse au journal Reqman(2), un postman GPL qui utilise de simples fichiers YAML. Évalué à 1.

    Tu as raison … Je vais virer ce texte. Ça crée une certaine ambiguïté.

  • [^] # Re: Les cookies

    Posté par  (site web personnel) . En réponse au journal Reqman(2), un postman GPL qui utilise de simples fichiers YAML. Évalué à 1.

    Les cookies créés lors d'une requête sont conservés et transmis dans les requêtes suivantes (dans la mesure où on reste sur le même domaine, path, etc…) … bref, tout comme une classique session http. (c'est ce que j'appel le "cookie handling"). (Techniqement, ils sont stockées dans la mémoire, lors de la session de test)
    Il n'y a pas (encore) de méthodes spécifiques autour des cookies (je n'en ai jamais vraiment ressenti le besoin). Ces derniers circulent par les headers http in/out. Du coup, le cookie est écrasable (via le header set-cookie, pour ne pas le re-transférer) … et récupérable dans les tests (pour tester).
    C'est minimaliste, certes … maintenant, est-ce suffisant ?! … mais effectivement il manquerait peut être qques sucres syntaxiques pour rendre cela plus facile, sans trop complexifier…

  • [^] # Re:

    Posté par  (site web personnel) . En réponse au journal GUY : un module python3 pour créer des GUI multiplateforme (android aussi!). Évalué à 1.

    s/pubs/libs/g

  • [^] # Re:

    Posté par  (site web personnel) . En réponse au journal GUY : un module python3 pour créer des GUI multiplateforme (android aussi!). Évalué à 1.

    Si t'arrives a installer les couches Kivy/bulldozer …

    Le tuto joint ne devrait poser aucun problème … Jusqu'au déploiement sur le play store…

    Chez moi ça marche !

    Maintenant Guy est exactement fait pour les gars comme nous. Python, pk c'est bon … Et HTML/je/CSS pour le front.

    A partir de la tout est possible … Tu peux profiter des 2 eco système et utiliser leurs meilleures pubs.

  • [^] # Re: Petites remarques

    Posté par  (site web personnel) . En réponse au journal GUY : un module python3 pour créer des GUI multiplateforme (android aussi!). Évalué à 3.

    Il faut forcément faire sois même la lecture du fichier ?

    non, ça c'est une feature pour des cas assez particulier où tu aurais besoin de produire du html dynamiquement.

    J'ai une démo, où j'utilise ça pour générer automatiquement des composants/sfc vuejs, à l'aide de vbuild

    a guy's app serving a vuejs/sfc UI (Play with sources)

  • [^] # Re: Petites remarques

    Posté par  (site web personnel) . En réponse au journal GUY : un module python3 pour créer des GUI multiplateforme (android aussi!). Évalué à 3.

    merci pour le retour

    l'utilisation de docstring pour le code html est peut être sympa pour les exemples, mais je pense qu'il peut devenir gênant sur des projets de plus grandes envergure car les classes ne sont plus documentables

    Tout à fait … ça a juste un côté très pratique pour "vite faire".
    Pour les plus gros projets : mieux vaut séparer le contenu du contenant

    mon rapide parcours de la documentation ne fa pas permis de trouver un moyen simple de faire le lien entre un fichier de template html et sa classe associée. Il faut forcément faire sois même la lecture du fichier ?

    Non, il suffit de créer un fichier du nom de la classe dans le répertoire "static".

    si tu as une classe

    class MyApp(Guy):
       ...

    --> il faudra un fichier "static/MyApp.html"

    C'est dans la doc, partie "rendering" … mais ça mérite eclaircissement

    le routeur http me semble vraiment simpliste, on ne peut pas faire de routage sur les verbes ou les entêtes http ?

    Ce dernier ne sert juste qu'à offrir une possibilité, coté back, de retourner du contenu par http. (une sorte de hook dans le serveur http de guy).
    C'est vraiment pour faire du spécifique.

    Mais une application guy communique par websocket principalement.

    Dans ce hook http, tu peux tester le verbe http, et réagir ou non.

    la documentation passe beaucoup de temps à toute que tel ou tel chose est un non-sens. Je pense que ça peut rendre la compréhension difficile pour un débutant

    Fort probable!

    il est question de mode serveur la sécurité est gérée d'une manière ou d'une autre ?

    Il y a le minimum ;-)

    Disons, qu'en "mode app" (app/cef), le serveur http/ws n'écoute que sur le localhost (pas en wide/0.0.0.0). Comme c'est dédié à la partie cliente-forcément en localhost) : c'est suffisant. Du coup, impossible de venir interférer sur le serveur à partir d'une autre machine que localhost.

    En mode serveur : il écoute en wide/0.0.0.0, car c'est plus pratique pour venir s'y connecter d'autres machines ;-). Après, si c'est destiné à être hébergé sur un vrai serveur. Tu peux mettre du nginx en front, avec certificats/ssl et co.

  • [^] # Re:

    Posté par  (site web personnel) . En réponse au journal GUY : un module python3 pour créer des GUI multiplateforme (android aussi!). Évalué à 4.

    Marrant … Je fais aussi du python et du java (jboss/springboot) ;-)
    Mais de là à dire que je fais plus de bug en python qu'en java … non ;-)
    Suffit d'être organiser et d'écrire des tests qui couvrent.

    De grands pouvoirs impliquent de grandes responsabilités.

    Peux-tu développer ?

    Une application guy : c'est en fait une partie serveur (backend), en python … et une partie cliente (frontend), en html/js. Ces 2 là, communiquent ensemble via une websocket. La partie cliente est automatiquement lancé dans un chrome "headless". Le tout, donne l'impression d'une vraie appli. Avec un peu de css/js, tu arrives simplement à donner un look'n'feel d'appli native, et bluffer ton client.

    Bref, c'est du "python pure" (Il faut, evidemment, qques connaissances html/js/css pour faire un GUI décent)

    Ce n'est lié aucunement à java.