Automatiser ses workflows vidéo avec les APIs
Session du 06 juillet 2023 à 20h00
Structures de Données
Développement Web & Frameworks
Veille & Discussions
Qualité & Architecture
DevOps & Environnement
Deviens membre Premium
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- +100h de formations
- +180 exercices de code
- +100h de mentorats en rediffusion
- 20 projets
- Mentorats groupés hebdomadaires
- Support individuel avec nos mentors
Automatiser ses workflows vidéo avec les APIs
Dans cette session, on va voir comment sauvegarder et partager des morceaux de code (snippets) avec gists. On verra également comment manipuler ces snippets avec les dictionnaires. Pour finir, on verra ensemble comment créer un système d'authentification robuste pour une app Streamlit avec Django et Django Rest Framework (DRF).
00:00:00 :pour ceux qui sont là depuis un petit moment et qui ont vu un petit peu tout ce qu'on a essayécomme outils entre Whereby, Meet, Livestorm, enfin tout ça. Il y avait pas mal de tests et
00:00:14 :finalement celui-là c'est celui qui marche le mieux je trouve au niveau de comment tout çac'est vraiment bien fait. On a même réussi, ça c'est un truc énorme parce que là vous voyez pas
00:00:26 :le backstage des sessions de mentorat et de l'histoire des uploads. C'est pour ça qu'à unmoment ils étaient uploadés le lendemain, après ça a un moment ça a metté une semaine parce qu'onessayait d'automatiser les choses finalement ça marchait pas et du coup on perdait du temps.
00:00:44 :Mais là j'ai finalement, grâce à ChatGPT justement, pour ceux qui me suivent un petitpeu sur twitter vous avez peut-être vu un petit peu quand je parle de ça notamment avec tout cequi est API parce que j'avais déjà essayé d'utiliser des API de google donc tout ce qui
00:01:02 :est google drive, gmail etc et je déteste leurs API, elles sont absolument horribles parce qu'enfait il y a tellement de trucs déjà de services dans tous les sens. Dès que tu cherches un service
00:01:13 :tu tapes drive, t'as pas juste google drive, t'as drive, t'as drive cloud, t'as drive meta, t'as drive2, t'as 10 000 trucs de drive, les trois quarts doivent ne plus servir à rien et des vieux trucsabandonnés ou je sais pas mais et après au niveau de l'authentification c'est super chiant, il faut
00:01:31 :générer un fichier de token etc. J'ai découvert finalement justement grâce à chat.jpt quel'on pouvait créer des service accounts ils appellent ça, donc des genres de comptes qui ontdes permissions très précises qui du coup n'ont pas besoin d'avoir un jeton qui est régénéré toutle temps parce que sinon en fait à chaque fois il faut repasser par un processus d'auth qui te
00:01:50 :sauve un json qui va utiliser pour authentifier etc donc juste pour l'authentification tu as déjàtrois fonctions à faire, c'est super chiant mais finalement avec chat.jpt en une heure j'ai réussi
00:02:02 :à le faire alors qu'avant j'avais même pas réussi en fait je butais souvent soit sur lesautorisations soit après sur des trucs chiants parce qu'il y avait toujours des trucs dans tousles sens et tu finis par y passer cinq ou six heures une après-midi et ça sur deux trois jours
00:02:16 :et un bout d'un moment tu abandonnes. Et c'est pour ça qu'à un moment on parle aussi beaucoupsouvent de no code etc en fait pour tout vous dire à un moment justement j'utilisais make pourceux qui connaissent, le nouveau nom de integromat qui est un outil no code assez cool et c'est un
00:02:33 :des trucs que j'utilisais pendant un bon moment en fait donc avec trois quatre nodes c'était supersimple, dès qu'il y avait en fait une nouvelle vidéo qui était uploadée il allait avec un webhookuploader la vidéo sur vimeo etc et après appeler un webhook sur docstring pour remettre l'uri du
00:02:53 :vimeo sur docstring donc c'était un petit peu un justement c'était un très bon exemple d'alliageentre no code et code qui permettait de justement pas avoir à s'emmerder avec toute l'autorisationparce qu'on avait juste à faire une autorisation une fois et puis justement c'est make qui géraittout ça derrière et oui c'est bien ça Gab. Salvatore je vais regarder ça si t'as pas reçu le
00:03:18 :mail, check dans tes spams au cas où mais je vais regarder ça sinon une petite note et du coup doncje sais pas s'il ya des gens est-ce qu'il ya des gens ce soir Simon, non Simon t'es... parce que je
00:03:31 :crois qu'il ya un Simon qui nous a rejoint, oui c'est bien moi, c'est toi oui c'est ça oui ok jeme disais bien que j'avais vu passer un Simon donc c'est bien toi qui... oui oui je me rappelle je
00:03:40 :t'ai vu sur twitter aussi oui c'est ça si je me trompe pas j'ai ton avatar twitter dans la têteje le vois je le visualise donc c'est bien la bonne personne que j'ai que je visualise okdonc ouais je voulais sinon je pense que les autres s'est déshabitué pas mal je crois que
00:03:58 :t'es le seul non est-ce qu'il y en a d'autres qui nous ont rejoint récemment n'hésitez pas à le diredans le chat ouais et oui donc parce que je voulais donc voilà je voulais faire un petitpoint par rapport à pas mal de choses justement niveau onboarding j'en ai un petit peu parlé
00:04:19 :dans le mail en fait j'avais tendance à beaucoup dire voilà n'hésitez pas si vous avez des questionsetc demandez nous justement on est assez réactif en support on peut voir justement quand est ce quevous avez souscrit etc donc on est super réactif mais voilà je trouve qu'il y a il manque pas mal
00:04:42 :de choses pour vous guider au début pour vous dire justement comme par exemple les sessionsde mentorat comment ça se passe au niveau du lien je l'ai rajouté vous voyez c'est le genre de trucon est tellement habitué on le fait toutes les semaines etc que bon voilà au bout d'un moment
00:04:53 :les gens aussi Gabriel, Céline tout ça Sébastien enfin vous êtes habitués vous savez comment çamarche mais c'est vrai quand on arrive c'est pas forcément évident que le lien va être sur le siteest ce qu'on reçoit un mail avant tout ça donc voilà c'est tous ces petits trucs là je vais
00:05:07 :faire des vidéos je vais faire des FAQ je vais faire un genre d'onboarding quand vous arrivezpour vous expliquer un peu plus précisément comment tout ça fonctionne pour que vous n'ayezpas à chercher les informations ou les demander quand vous en avez quand vous avez des questionsmême si on est réactif. Donc voilà au niveau ici vous avez probablement vu pas mal de petits
00:05:28 :changements ici et là sur le site notamment avec la formule du coup qui a changé et c'est normaldonc si vous voyez pas mal de petits trucs qui changent ces dernières semaines il y a eu pasmal de petits bugs aussi mais justement et je vais en profiter pour faire des formations là
00:05:46 :dessus j'ai ajouté un truc que je repoussais depuis longtemps des tests d'intégration quifont en fait que ça va tester le site en live et pas juste des tests unitaires donc petiteparenthèse test unitaire je sais que Gab en a fait pas mal il avait des questions sur les tests
00:06:00 :unitaires donc ça me permet de faire un lien entre à la fois ce qui se passe sur le siteet faire un peu de pédagogie en même temps donc les tests unitaires qui vont juste tester untruc très précis du chemin communauté. Ah c'est toi qui viens de le soumettre j'ai reçu une alerte
00:06:15 :là bug nouveau rapport de bug ok je vais regarder ça j'ai reçu un c'est pas forcément un bug maisune fonctionnalité en plus ok je vais regarder ça non ok c'est pas ton cas ok je vais regarderet n'hésite pas à soumettre le bug Céline vous en parlez dans le chat je regarderai. Oui donc en
00:06:35 :fait des tests unitaires c'est bien et mais comme leur nom l'indique c'est unitaires c'est petitça teste un truc ça teste aussi en fait votre code donc en fait ça va le tester ça va testerune fonction ça va vérifier par exemple qu'une fonction retombe bien ce qui est censé être
00:06:51 :testé mais le problème c'est que ça va pas forcément faire des tests sur votre site et destests en chaîne qu'on pourrait avoir par exemple là mes tests unitaires les tests d'intégrationpardon que j'ai fait ils vont vraiment faire le parcours qu'on ferait que ferait un utilisateurdonc c'est à dire que il va arriver sur le site sans être connecté il va cliquer sur le bouton
00:07:11 :login il va rentrer ses informations il va se connecter parce que par exemple il y a eu pasmal de petits bugs sur l'inscription et le login récemment j'ai rajouté en fait des fonctionnalitésqui font quand vous faites une action ça affiche un petit spinner vous l'avez peut-être vu vu que
00:07:28 :j'utilise beaucoup htmx qui fait des requêtes ajax pour avoir un petit peu d'interactivité avantquand vous appuyez sur un bouton et qu'il y avait une requête ajax vous aviez pas trop de feedbacksur qu'est ce qui se passait donc vous attendiez et quand il y avait des processus des fois un petit
00:07:39 :peu long c'était pénible quand on ne savait pas ce qui se passait donc là maintenant en fait il y ace processus où quand il y a une requête ajax qui est envoyée vous avez un petit spinner qui vousindique que voilà qu'il y a quelque chose qui se passe et que c'est pas juste en train de buguer
00:07:53 :et donc en rajoutant ça ça a créé pas mal de problèmes sur les logins et le problème c'est çac'est quand en fait on fait on teste la vue de login en termes de code bah ça fonctionne maisquand on la teste avec tout le problème parce que là c'est un problème de captcha en fait il y a un
00:08:08 :captcha sur le sign up login pour éviter que j'ai eu des problèmes avec des bots qui des foiss'inscrivait au site ça c'est le genre de petit truc auquel on pense pas au début et puis à unmoment un beau jour on se réveille un matin et là il y a 450 comptes qui ont été créés avec des
00:08:22 :emails complètement foirés etc et là on se dit oh merde et donc on rajoute un captcha je crois quesi Gabriel t'avais fait ça récemment et donc voilà il y avait là c'était purement un problème enfront avec google et avec des trucs de captcha qui n'étaient pas des trucs qu'on détecte au
00:08:42 :niveau du code avec un test unitaire et donc j'ai eu le problème moins de 3-4 fois c'estclairement le genre de truc où j'ai implémenté quelque chose ça l'a fait planter au bout dedeux jours il ya quelqu'un qui me dit tiens au fait on peut plus se loguer donc je suis comme
00:08:56 :ah oui merde effectivement plus personne ne peut se loguer donc les gens qui étaient déjà loguésc'était bon mais il n'y avait plus personne qui pouvait se loguer pareil pour les inscriptionsil ya eu un gros un gros creux dans les inscriptions et donc avec un test d'intégrationon peut tester ça on peut vraiment avoir comme si vous étiez sur le site j'utilise d'ailleurs
00:09:13 :selenium base je sais pas si Vincent est là on en a pas mal parlé récemment il faisait pour uncontrat freelance donc Vincent qui est un étudiant qui commence à faire des contrats freelance c'estsuper cool et qui faisait des tests justement avec selenium lui et je lui parlais de selenium
00:09:28 :base donc c'est en fait selenium base je vais vous l'écrire dans le chat c'est super cool c'estassez assez génial en fait à voir ces outils là parce que du coup vous avez vous voyez vraimentnavigateur qui s'ouvre et puis en fait il va il va se connecter en fait votre site comme vous le
00:09:44 :feriez donc on a vraiment l'impression de voir un robot qui fait le truc à votre place et après enfait vous pouvez le faire sans navigateur bien sûr et mettre ça donc comme je l'ai fait dans un gitune action git c'est à dire qu'à chaque fois que je pousse le code il va faire ses étapes en fait
00:09:59 :pour s'assurer que tout fonctionne bien donc ça devrait quand même beaucoup limiter les bugs làmaintenant il faut que je continue de déployer et de créer tous ces tests là pour plein de chosesmais voilà maintenant ça va vraiment m'avertir en amont ça va même pas en fait permettre de
00:10:14 :déployer le code s'il y a un bug donc voilà ça devrait quand même limiter pas mal les petitsbugs qui apparaissent ici et là à l'avenir voilà donc je vais pas faire un trop long speech j'espèreque ça vous a donné quand même quelques petits trucs intéressants à aller voir entre Selenium
00:10:28 :les tests d'intégration etc et voilà je sais pas si vous avez des questions sur tout ça et sinon jevais laisser PA pour suivre. Du coup t'es repassé en light mode là? Oui oui il y a eu un bug aussi entre
00:10:48 :la fonction enfin la version light et parce que j'ai rajouté en fait c'était un peu chiant aussiun truc qui bug un petit peu là au niveau des annonces avant j'avais qu'un module en fait popupet donc à chaque fois que je faisais une annonce globale vous aviez un gros popup et il fallait
00:11:03 :vraiment aller lire l'annonce pour l'enlever c'était un peu chiant donc là j'ai mis une petitebannière en haut quand il y a des nouveautés ça fait partie des trucs que j'ai un petit peuimplémenté récemment et comme c'est un fonds uni je n'avais pas à gérer dark mode light mode sauf
00:11:16 :que le texte lui par contre il foirait et effectivement je suis passé en light mode çac'est vraiment un truc il ya quelques vidéos qui sont sorties sur le sujet récemment entremi code d'autres chaînes etc et c'est vrai que maintenant ça passe en dark mode automatiquementavec le soir avec le thème automatique un autre truc que j'ai rajouté d'ailleurs récemment parce
00:11:39 :que du coup toutes mes applications le soir se met en dark mode sauf docstring qui restait enlight mode et donc j'ai rajouté ça c'est un des derniers trucs que j'ai rajouté dans lespréférences vous pouvez aller choisir pour que ça suive vos préférences système du coup ça enlève
00:11:51 :le petit switch et ça va juste switcher en fonction de votre de vos préférences système et c'est vraique maintenant je suis genre c'est marrant à quel point il ya deux trois mois je mettais un lightmode j'étais là genre ah c'est horrible comment les gens font ça et puis maintenant en fait quand
00:12:06 :je mets un dark mode j'ai l'impression ça fait mal aux yeux et le soir quand ça switch des foisj'ai envie de dire ah non en fait j'étais bien en light c'est assez drôle je vous conseilled'essayer effectivement c'est assez sympa. Et dernier petit point aussi juste avant que je
00:12:22 :rende la parole à PA enfin je donne la parole à PA sur le serveur discord donc on a bougé lacommunauté ça fait deux trois jours d'ailleurs que je vais pas retourner voir sur le rocket chat jevais faire une annonce une autre annonce j'ai déjà annoncé plusieurs fois etc mais je vais probablement
00:12:40 :dans quelques jours ou quelques semaines au plus en fait supprimer tout simplement le serveurrocket chat parce que c'est sûr pas mal de frais quand même pour faire tourner le truc donc doncvoilà je suis pas retourné voir s'il y avait encore des gens qui étaient un peu dessus mais il ne me
00:12:57 :semble pas effectivement il n'y a plus personne qui a posté depuis le 25 juin ouais donc çacommence à être rentré donc voilà. Ah ok c'est ça Céline d'accord oui c'était ça ta question
00:13:09 :c'est effectivement pas un bug je l'ai mis sur le tableau de bord je sais pas si t'as vu queeffectivement donc la communauté avait bougé et toi en fait Céline du coup tu étais déjà sur lediscord je me rappelle qu'on en avait parlé on avait parlé au début sur sur discord ouais je
00:13:24 :l'ai mis dans le coin là la communauté migre sur discord donc on a fait le on a fait le switcheffectivement il y a une semaine deux semaines et je trouve que c'est cool effectivement il y adéjà un peu plus de un peu plus d'interaction finalement entre tout le monde puisque on a
00:13:41 :fusionné en fait la communauté gratuite et payante donc voilà juste donc si vous avez des questionslà dessus n'hésitez pas en chat je vais laisser PA reprendre la main et n'hésitez pas si vous avezdes questions par rapport à ce changement à nous envoyer un mail ou à écrire dans le chat et puis
00:13:58 :je pourrais vous expliquer un peu plus. Voilà je vous laisse continuer du coup avec le programme.Merci Thibault. Ok du coup je sais pas si il y a sur le programme vous avez peut-être vu le
00:14:19 :programme attendez je vais couper ma caméra. Ouais vous avez vu sur le programme en faitl'idée je pense que je vais me tenir au programme j'allais orienter un petit peu plus débutant c'estpas du tout péjoratif comme comme mot mais a priori là vu les gens qu'il y a je vois que c'est
00:14:41 :quand même plutôt pas mal d'habitués en fait on pensait ce soir qu'il y aurait les nouveauxinscrits qui viendraient au mentorat donc peut-être qu'ils suivront directement la rediffusion mais ducoup je vais y aller au rythme qu'on fait d'habitude et puis n'hésitez pas à arrêtertout ça et à poser des questions il n'y a aucune question con ou bête et personne juge personne
00:15:08 :ici donc vraiment n'hésitez pas à poser des questions. Du coup avant de commencer donc leprogramme c'était quoi c'était vous présentez d'abord les gits est-ce que dites moi dans lechat un peu si vous connaissez déjà les gits juste comme ça sans que je dise rien d'autredites moi un peu dans le chat si vous connaissez Gabriel qui est non ok bah c'est bien que vous
00:15:40 :connaissiez pas comme ça vous pouvez comme ça vous allez je vais avoir l'honneur de vous fairedécouvrir quelque chose du coup je vais vous montrer un exemple avec avec PyCharm mais c'estapplicable à beaucoup d'éditeurs de code que ce soit vs code PyCharm je suis sûr même queImax ou Vim tout ça ils ont des plugins exprès pour directement enregistrer un gits donc ça on
00:16:12 :dit gits je vais vous l'écrire dans le chat gits en fait quand vous quand vous créez du code àlongueur de journée si vous même si vous êtes en formation etc vous êtes en train d'apprendrevous allez bouffer du code quoi vous avez bouffé pas mal de lignes de code etc et vous allez
00:16:32 :parfois dire ah tiens ça c'est un truc que j'aimerais bien retenir et parfois bah on oublieon oublie soit de le noter ou voilà il ya plein d'applications qui existent les notions et toutça pour enregistrer donc après chacun sa méthode vous faites comme vous voulez mais ce qui est
00:16:49 :super avec gits c'est qu'en fait c'est directement associé à votre compte github et en fait du coupça veut dire que vous avez tout ce qui va avec git et github donc je reprends à zéro imaginezque vous écriviez un code et vous dites ah tiens ça c'est pas mal j'aimerais bien le retenir donc
00:17:07 :avec Pycharm vous pouvez sélectionner votre code vous faites clic droit et vous faites create gistici là vous allez dire une description bah là je sais pas c'est je vais écrire fonction pourgérer l'import avant pour gérer l'import pour ceux qui étaient déjà là c'était vous voussouvenez quand on faisait l'import des fichiers excel pour directement aller attaquer dans la base
00:17:38 :des données donc là vous sélectionnez le donc ça s'appelle un snippet en fait un snippet c'estun morceau de code qui que vous voulez retenir enfin snippet c'est un morceau de code et donclà un gist ça va être un morceau de code que vous voulez retenir donc là vous dites ok donc
00:17:54 :vous créez votre gist machin voilà donc là j'ai une fenêtre qui s'est ouverte je vais l'afficherici j'ai une fenêtre qui s'est ouverte dans mon directement dans sur mon compte github je vaiszoomer un peu sur mon compte github et en fait je sais pas si vous avez déjà vu un peu sur des
00:18:14 :blogs sur medium et tout ça vous avez souvent des morceaux de code avec un petit truc en dessouslà hosted with love by github ou un truc comme ça et en fait tout ça c'est des gist donc en faitlà vous voyez c'est juste c'est vraiment le morceau de code que j'ai sélectionné et que j'ai dit bah
00:18:30 :tiens je veux le retenir et en fait ce qui est vraiment super avec ça il ya plusieurs chosesqui sont vraiment génial c'est que vous êtes sur github donc vous êtes sur git et du coup ça veutdire que vous avez toute la puissance de gestion de version etc d'update si par exemple donc là
00:18:50 :vous avez vous avez votre git vous dites ah bah tiens en fait je veux le changer ici je sais pasj'ai fait une connerie ou même voilà par exemple mon indentation elle est pas bonne donc je mets labonne indentation et donc là vous dites update secret bits vous pouvez même laisser un commentaire
00:19:16 :vous dites l'indentation était mauvaise comment voilà donc là vous avez votre gist vous voyezqu'il ya deux révisions et voilà donc ça veut dire que si par exemple en fait vous avez retenuce morceau de code là et qu'un jour vous voulez alors vous voulez venir le revoir et que vous
00:19:36 :vous rendez compte qu'il y a une connerie bah vous pouvez en fait le modifier vous mettez votrecommentaire etc et en plus du coup vous avez toujours votre morceau de code mais avec toutl'historique de révision que vous avez fait dessus donc ça c'est une première chose qui est vraiment
00:19:50 :super avec avec les gis parce que c'est hébergé sur votre compte github donc et d'un vous avezle versionning de deux c'est hébergé sur les serveurs de github donc vous allez si jamaisvotre ordinateur y crash ou vous faites cambrioler ou j'en sais rien je vous le souhaite pas mais ça
00:20:10 :peut arriver et bah vous allez perdre tout ce qu'il y a sur votre local mais bon vous serezcontent de retrouver un peu les morceaux de code que vous avez déjà créé que vous voulez retrouverjuste via sur internet sur votre compte github donc ça c'est déjà un point qui est intéressant à
00:20:25 :retenir ensuite il y a d'autres choses qui sont intéressantes là vous voyez vous avez un peugithub c'est une plateforme qui permet de collaborer c'est pour montrer son code open source etc doncça permet de collaborer donc vous pouvez ici partager votre code vous pouvez dire donc làattendez est-ce que ça va marcher parce que je pense que c'est un je pense qu'il est en mode
00:20:49 :secret est-ce que je peux changer quelque part ici parce qu'il est en fait ici si je vous lepartage dans le chat je pense pas que vous pourrez aller le voir parce qu'il est secretattendez je vais vérifier si je fais share ici et que je vous le mets là dites moi si vous
00:21:16 :cliquez dessus et que vous allez le voir même si vous n'êtes pas connecté parce que du coup vousn'êtes pas connecté avec mon compte dites moi si vous voyez le code ok donc là vous voyez déjàc'est quand même super vous pouvez partager avec un collègue un ami votre morceau de code sans
00:21:30 :voilà devoir copier coller il a la coloration syntaxique du code et tout ça c'est beaucoupplus clair pour lui et c'est plus simple donc ça c'est aussi quelque chose qui est vraimentsuper avec l'aegis c'est que vous pouvez partager facilement et voilà et imaginez par exemple aussique vous avez un blog vous avez un blog vous écrivez des articles etc et vous écrivez des
00:21:51 :morceaux de code dans votre dans votre dans vos articles bah vous pouvez vous pouvez ici fairece qu'on appelle un embed donc en fait embed c'est juste pour donc il est un petit peu différent lelien c'est au lieu d'avoir un lien directement à https vous avez une balise script et vous allez
00:22:08 :pouvoir le copier et l'intégrer directement dans votre dans le html de votre de votre site webimaginez vous avez un blog avec vous avez fait avec django ou je sais pas quoi et vous avez untemplate html et bien si vous insérez ce morceau de code là embed avec le script vous allez juste
00:22:25 :avoir une ligne dans votre html mais quand vous allez avoir le rendu quand vous allez avoir votrevous allez aller sur le sur la page web de votre site vous allez voir le code apparaître sous ceformat là et donc ce qui est super aussi c'est que votre votre article il est décorrélé du code que
00:22:44 :vous avez mis parce qu'imaginez que vous vous rendez compte dans votre projet je sais pas quevotre morceau de code que vous avez mis en fait il y a une erreur et vous voulez le modifiersi jamais vous modifiez votre code au sein du gist vu que c'est juste un lien ici embed dans
00:22:58 :votre article et bien ça va se mettre automatiquement à jour dans votre article votre le morceau de codeil va se mettre automatiquement à jour vous n'allez pas les avoir besoin de modifier votrearticle html pour mettre à jour votre code parce qu'en fait ça va juste ils sont vraiment
00:23:11 :décorrélés l'un et l'autre donc ça c'est un peu les différents trucs que vous pouvez faire avecgist donc là en fait vous avez automatiquement accès à gist quand vous faites quand vous avezun compte github donc là si vous allez sur votre petit profil là votre petite tête vous mettez
00:23:30 :your gist et du coup vous avez un peu la liste donc là c'est mon compte github c'est un peu groslà vous avez tous les gist en fait que j'ai déjà enregistré vous pouvez descendre il y a unepagination holder voilà donc il ya un petit descriptif etc vous pouvez retourner dessus les
00:23:51 :modifier vous pouvez regarder s'il ya des gens qui ont commenté parce qu'en fait des fois il y ena ils sont secret et il y en a qui sont publics donc vous pouvez trier etc donc c'est quand mêmeassez intéressant. Voilà donc ouais Gabriel je sais que tu m'en as parlé sur twitter le fait
00:24:15 :que tu puisses pas l'utiliser sur Wagtail quand tu mets le lien script embed là ça donne quoi?En fait si on entend si c'est activé. Sur Wagtail je passe soit par un rich text field,
00:24:33 :ou un lien embed en fait et tu dois que les liens embed tu colles une url et j'ai essayé les urlsde gist et ça fonctionne pas et apparemment je suis pas le seul du coup j'ai dû créer un peu monsystème de bloc de code. C'est un truc lié à Wagtail quoi? Je pense oui apparemment ouais.
00:24:55 :Ouais mais en fait à mon avis le problème c'est que si tu me dis que Wagtail c'est déjà lesmorses, quand tu écris ton article c'est déjà un embed c'est comme si tu faisais un embed dansun embed je pense c'est un peu une tu vois un peu l'inception du truc quoi c'est que tu dois faire
00:25:14 :un embed dans un embed parce que ton article Wagtail c'est déjà un lien embed. Vu que jeconnais pas Wagtail pour l'instant je peux pas t'aider là dessus. Ouais je trouve une solution
00:25:27 :alternative pour l'instant. Ok bon bah très bien. Voilà donc franchement je vous conseille vraimentde penser à ça à GIST pour retenir un peu tous les morceaux de code que vous voulez pas oublieretc. Ça marche bien voilà comme vous pouvez le voir moi j'en ai plusieurs je m'en sers souvent
00:25:47 :et pour partager pour les mettre à jour etc puis même si vous voulez ça vous fait une petite basede données en plus si jamais vous écrivez un dingue, un dingue qu'est ce que je raconte, unblog, ça vous fait une base de données en fait de petits morceaux voilà vous pouvez écrire un
00:26:04 :article sur un morceau de code et puis le mettre. Donc ça c'était un peu pour GIST pour le contexteça marche avec PyChar mais comme je vous dis ça peut marcher avec VS Code et plein d'autres choses.
00:26:19 :Ce qui est pas mal avec donc là ce que je vous propose c'est qu'en fait on se fasse une petiteapplication Streamlit. Vous savez que j'affectionne tout particulièrement ce framework. Pour les gens
00:26:36 :qui débutent et qui ne savent pas ce que c'est qu'un framework, donc la traduction bourrine defrançais framework c'est un cadre de travail, en fait un framework c'est tout un ensemble de moduleset de fonctions qui sont déjà créés pour vous faciliter la vie dans une tâche spécifique. Donc
00:26:56 :en l'occurrence sur DockStream il y a le framework Django qui est mis en avant et Django en faitc'est un framework web qui permet de faire des applications web en utilisant le langage Python.
00:27:08 :Donc en fait pourquoi c'est un framework parce que c'est un framework on code autour de la basequi nous est proposée. Vous avez tout ce qui est gestion, serveurs, requêtes, requêtes postes,
00:27:24 :requêtes get etc. Tout ça c'est le framework qui s'en charge et du coup vous vous avez plusqu'à vous concentrer sur la logique Python. Après Django il y a autre chose, il n'y a pas que ça,
00:27:33 :mais si par exemple vous vous êtes un data scientist etc et que vous faites de la statistiqueavec Python, vous pouvez dire bah moi je peux faire, j'arrive facilement à interfacer mesfonctions statistiques que j'ai développées en Python sur le web grâce à Django qui est unframework. Donc en fait comme disait-il dans le chat on code autour donc ça peut être vu comme
00:28:00 :soit un pont entre, donc là en l'occurrence Django ce serait un pont entre Python et le web,mais ça peut ça peut être aussi vu comme, je sais pas comment dire, enfin bref vous avez compris,un peu comme une extension de, là l'exemple qui me vient c'est vous savez dans Spiderman,
00:28:27 :là le docteur Octopus, il a son propre corps et puis il a des tentacules robotiques pour faired'autres choses, donc c'est pour faire ce qu'il fait d'habitude mais en plus évoluer, donc c'estun peu ça le framework. Désolé pour l'exemple un peu bidon mais c'est ce truc que j'ai trouvé.
00:28:47 :Du coup ce que je vous propose c'est que on se dise, imaginez la liste des GIST que jevous ai montré, ça reste sur mon profil GitHub etc, bon j'ai quand même, elle est sympa l'interface,mais imaginez que moi je veux ma propre interface pour présenter tous mes GIST. Donc ce qu'il
00:29:11 :faudrait faire en fait ce serait un moyen de récupérer via je ne sais quel moyen, récupérerla liste de tous mes GIST, les récupérer dans un format bien particulier et pouvoir les présenterde la manière que je veux sur une interface, sur un dashboard. Donc ce dashboard je vous propose
00:29:33 :qu'on le fasse avec Streamlit et on va utiliser l'API que propose GIST pour récupérer la listed'abord de tous les URL et après nous on s'amusera un peu à la présenter un petit peu autrement.
00:29:46 :J'avais prévu aussi comment on peut faire pour créer une authentification parce qu'en faitvous verrez que Streamlit, c'est un autre framework qui permet de faire des dashboardsun peu interactifs avec Python. Par contre il n'y a pas de système d'authentification
00:30:04 :built-in dans Streamlit. Donc en fait ce qu'on peut faire c'est on peut se créer une petiteapplication Django qui elle, parce que Django il a un modèle user qui est déjà implémenté quipermet de gérer très facilement des users, leur username, les passwords etc, d'en créer,d'en ajouter. Donc on va pas se priver, on va utiliser Django juste pour son application user
00:30:29 :qui est déjà implémentée pour faire l'authentification de Streamlit. Donc j'arrêtede parler et on y va. On va se créer un projet donc on va l'appeler my-list-board. Ok on y va.
00:30:55 :Et donc PyCharm il crée automatiquement un environnement virtuel. Donc je ne sais pasdans le chat, dites moi si quelqu'un a besoin d'une petite introduction aux environnementsvirtuels parce que bon là on peut avoir différents niveaux dans la session doncn'hésitez pas si quelqu'un est perdu et qu'il a besoin d'une explication sur les
00:31:25 :environnements. Attendez je regarde dans le chat. Ok bon. Donc l'environnement virtuelest déjà créé donc on va installer Streamlit. Est-ce qu'on a besoin d'autre chose? Non
00:31:51 :pour l'instant on va juste faire ça. Le système d'authentification avec Django je l'ai déjàprogrammé juste avant la session. On verra si on a le temps de le faire en live ou sinon
00:32:03 :je vous montrerai comment j'ai fait. Parce que sinon j'ai peur que ça soit un peu short.Ok on va créer notre dashboard. On va dire dashboard. Ok donc là vous commencez un peu
00:32:24 :à connaître pour ceux qui suivent les mentorats. Import Streamlit as ST et ST.Write. On vadire Gist dashboard. Ok donc là si je fais Streamlit run dashboard. Ok donc là il m'a
00:33:02 :créé juste une page web avec Gist dashboard. J'ai rien mis pour l'instant. Donc nous cequ'on veut faire c'est qu'on va vouloir récupérer la liste de tous nos Gist. Donc
00:33:16 :je vais créer une fonction ici à part pour séparer un peu. On va dire Utils. Ok. ImportRequest. Donc en fait Request c'est un module Python qui permet de faire des requêtes HTTP.
00:33:44 :Donc là on va utiliser l'URL de l'API GitHub. On va faire, attendez je vais récupérerparce que je l'ai écrit juste tout à l'heure, ça sert à rien que je me galère à le refaire.
00:34:01 :Ok donc en fait là ce qu'on fait, il me manque quelque chose. File. Ok ici il va me falloirinstaller un nouveau module. Donc en fait ce module, et dites moi dans le chat parce
00:34:35 :que moi j'avance et si jamais vous êtes perdu il faut me le dire parce que je ne sais pas,comme je n'ai pas de retour je ne sais pas si vous voyez bien ce que je fais pour ceuxqui ne connaissent pas ou pas. Donc vraiment s'il vous plaît ça m'aide si vous ne croyez
00:34:51 :pas que vous allez me déranger si vous posez une question. Donc là j'installe le modulequi va permettre d'aller lire les variables d'environnement que je vais mettre dans unfichier ici. Parce qu'en fait moi je ne veux pas faire apparaître dans mon code en dur
00:35:10 :mes clés d'API etc qui me servent à accéder à mes requêtes HTTP. Donc on crée toujoursun fichier.ang qui est un fichier, salut Sébastien, qui est un fichier qui ne va jamais
00:35:24 :apparaître dans les répos git etc et ça permet de cacher un peu les mots de passe.Donc là on va dire git gist i et donc là je vais aller mettre la clé, donc en faitc'est une clé d'API que vous pouvez générer directement dans votre compte github, je ne
00:35:44 :le fais pas ici mais en fait c'est un truc qui ressemble à ça. Ici cette clé là vouspouvez, enfin ça ne me pose pas de soucis de vous la montrer parce qu'en fait j'ai crééun token qui expire demain et puis même de toute façon il ne donne accès qu'à mes
00:36:02 :gist en lecture seule donc vous ne pourrez pas faire grand chose avec ce token là mêmesi j'ai confiance en vous mais c'est pas grave si je vous montre ça. Ok donc là ce
00:36:17 :qu'on fait, je récapitule, on importe le module request qui permet de faire des requêtesAPI depuis un script python. Ici import os, bon ça c'est juste pour import os et dot
00:36:26 :env, c'est les deux modules qui vont permettre d'aller chercher toutes les variables d'environnementqui figurent dans ce fichier là. Et ici donc headers, là je suis un peu en train de, là
00:36:36 :je prépare ma requête. Donc ici c'est ce qui permet de faire les requêtes sur l'APIgist qui est déjà développé. Ici c'est l'authorization, donc ça en fait c'est la
00:36:47 :clé de l'API dont j'ai besoin pour faire ma requête sinon ça voudrait dire que toutle monde peut accéder à mes gist et les modifier donc c'est pas ce que je veux. Et ici c'est
00:36:56 :la version de l'API qu'on utilise. Là c'est l'URL qui est utilisée pour aller récupérerles gist et là c'est la requête. Donc ce que je fais c'est que je balance dans une
00:37:07 :liste la réponse de ma requête. Je vais installer, j'aime bien installer Hypythondans tous mes environnements virtuels parce que c'est plus interactif. Il faut à chaque
00:37:23 :fois... Ah ok, désolé j'ai pas vu ta question, je vais te dire ce que c'est qu'un token etje vais te montrer comment on fait pour le générer. Donc ça je quitte et je vais rouvrir
00:37:38 :un autre et je réponds à ta question. Alors en fait un token, je vais aller sur le comptegithub. Donc je vais sur mon github. En fait quand tu vas dans github, c'est pas que sur
00:38:04 :github mais là c'est un exemple. Donc si tu vas dans settings, je vais zoomer un peu,tu vas dans settings de ton compte github mais ça peut être n'importe quoi, n'importequelle application web. Développeur settings, là je te montre juste un exemple pour github.
00:38:21 :Ici tu as personal access token, token classique, je vais vite mais c'est juste que voilà,de toute façon si jamais un jour tu veux le faire tu poses la question etc. Là c'est
00:38:31 :juste pour te montrer le concept, t'inquiète pas si là tu captes pas tout ce que je fais.Et là tu fais generate new token. Donc en gros ici il va te dire, bah décris un peu
00:38:40 :le token, donc là je dis token test, je crois qu'il faut pas mettre d'espace. Et ici tupeux un peu définir les différentes propriétés de ton token, tu veux que ton token il aitaccès à quoi. Je vais t'expliquer après ce que c'est que le token mais là je te
00:38:56 :montre juste comment on le génère. Donc en gros là tu vois moi par exemple pour l'exemplej'ai dit bah je veux juste les gists et tu peux dire je veux que soit dans 7 jours ilexpire donc ça veut dire que si quelqu'un il me vole le token, bah il peut faire tout
00:39:10 :ce qu'il veut pendant 7 jours mais si jamais il fait rien en 7 jours, au bout de 8 joursil sera inutilisable, même moi je pourrais pas l'utiliser. Donc ça c'est un petit peu
00:39:18 :de la sécurité quand tu fais des développements etc. Je te conseille de mettre des expirationsdonc là custom moi j'ai mis demain, comme ça si jamais vous me le volez là ce soirvous pouvez faire tout ce que vous voulez jusque demain matin. Et donc là vous faites
00:39:35 :générer le token et en fait quand tu génères un token t'as un espèce de truc, c'est uneclé comme ça et cette clé là elle te permet de faire, c'est un peu une espèce de, c'estcomme un, c'est comme si ça, t'avais ton username et ton mot de passe dedans mais c'est
00:39:57 :quelque chose qui est propre à tes identifiants à toi. Tu vois par exemple dans ce tokenlà il y a l'information de ton username et de ton mot de passe et en fait avec çatu peux accéder aux données dont tu as besoin qui sont protégées par mot de passe et utilisateur
00:40:17 :parce qu'en fait comme on fait des appels d'API, bah les API ce sont des scripts, t'aspas, c'est pas un humain qui peut taper username et password dans les champs, dans les champsd'un formulaire web par exemple. Du coup c'est pour ça que tout ce qui est API, script etc,
00:40:35 :elle discute avec les applications, les comptes etc via des tokens qui sont des clés, commele dit Céline, des clés d'accès temporaires ou non parce que tu peux dire qu'elles ontpas d'expiration mais là en l'occurrence elle a une expiration et là dedans donc commeje me répète t'as l'information de ton username et de ton mot de passe pour accéder
00:40:58 :justement à tout ce que tu veux. Donc là moi j'avais généré, est-ce que ça répondà ta question? Ok, hésite pas si c'est pas clair. Donc là en fait ici c'est mon
00:41:14 :token spécifique que j'ai défini pour accéder à mes GIST et donc là je vais faire larequête. Donc maintenant si je fais, je vais zoomer ici, je fais hupiton, ouais ouais
00:41:35 :ça marche Gabriel, bah tu peux la poser maintenant si tu veux. Donc si je fais run, attends jelance juste ça, je montre le résultat et après on en discute. Ici qu'est-ce qui s'est
00:41:48 :passé? Ah oui c'est utile ce qui a pas marché, je vais même ici mettre une fonction.Je vais relancer. Ce truc là je l'ai toujours. Je résous juste ce problème là, il faut
00:42:47 :installer, il faudrait que je finisse par le retenir celui-là parce que. Ok donc làj'ai lancé utile et donc maintenant si je vais visiter la liste des GIST que j'ai récupéré,si je fais liste, liste, ouais j'ai écrit comme un plouc, liste, ok je rerun, rerunn'importe quoi. Et j'ai encore mis un S, bon c'est pas grave mais j'aime pas, c'est bon.
00:43:44 :Et donc là vous voyez je récupère la liste entière de tous mes GIST qui étaient surle web, donc c'est beaucoup moins joli vous allez le voir mais en gros j'ai toutes lesinformations et ce qui est bien c'est que c'est sous forme JSON. Du coup, j'ai vu ta
00:44:00 :question Simon je vais y répondre. C'est sous forme JSON parce qu'en fait quand vousfaites des appels d'API vous avez toujours un résultat sous forme de JSON. Donc JSON
00:44:10 :c'est quoi? Ici en l'occurrence c'est une liste de dictionnaires. Donc après pour manipulerc'est un objet Python, c'est assez simple à manipuler. Voilà. Donc ok, là c'était
00:44:19 :juste pour vous montrer le résultat. Il y a deux questions donc par ordre chronologique,vas-y Gabriel. Le code que tu as mis avec ton headers URL, tu l'as eu dans la doc de
00:44:34 :GitHub? En fait tu peux la trouver dans la doc de GitHub parce qu'en fait il te dit làpar exemple si tu fais juste, c'est un peu de la recherche, tu fais API list, tu vasvoir là dedans, ils te disent, en fait normalement quand tu as une API qui est développée,
00:44:57 :là surtout avec GitHub tu sais qu'ils font pas n'importe quoi, tu as toujours un usermanual, une documentation tu vois. Donc en gros tu vas voir, et donc là ils te disent
00:45:09 :c'est comme ça qu'on fait les appels d'API, donc là avec le curl, et en fait moi j'aijuste transformé le curl ici qui est en invite de commande, ça c'est quelque chose quetu tapes dans un terminal, moi j'ai juste transformé en requête Python parce que jereconnais un peu les différents paramètres mais tu vois c'est assez simple. Et puis
00:45:28 :s'il y a mieux tu demander à ChatsGPT par exemple de transformer ça en requête Pythonils te le feraient. Ah ok cool. Mais ils vont pas te prendre du coup les bases? Non, ça
00:45:38 :dépend, tu vois, peut-être même tu vois si tu rentrais ça dans Postman ou quelquechose comme ça je pense qu'ils te le mettraient, ils te transformeraient le truc tu vois. Là
00:45:48 :imagine j'ai fait une requête, si je dis je veux le curl, bah tu vois il est commeça et du coup tu peux faire, tu fais le lien tu vois, tu fais les connexions aussi, tuvois que en curl c'est ça, enfin bref tu vois ce que je veux dire, tu peux facilement
00:46:03 :transformer une requête curl en requête Python. C'est bon pour ta question? Ouaisje te remercie nickel. Ouais je t'en prie. Et du coup Simon à quoi sert IPython? En
00:46:16 :fait je dirais pas, c'est pas que ça sert à quelque chose d'autre que ça reste uninterpréteur Python, c'est juste que IPython le i c'est pour interactive donc moi je préfèrele IPython plutôt que Python parce que tu vois ici si je tape juste Python ok je suiscontent mais import os, tu vois j'ai pas de, je trouve que c'est pas ouf tu vois c'est
00:46:47 :pas hyper joli et en plus là ça va je suis dans un terminal shell mais genre sur Windowset tout c'est horrible d'utiliser Python donc moi j'utilise, et en plus tu vois parexemple si je retape Python, que je fais for i in range 10 print, tu vois je suis obligé
00:47:06 :de me taper les 1 2 3 4 print genre le carré de tous les i, ok là je suis content maispar exemple si je te fais exactement la même chose avec IPython tu vas me dire lequel desdeux tu préfères, for i in range 10 print, carré, voilà, dis moi lequel des deux tu
00:47:29 :préfères entre Python et IPython, je crois que la question est vite répondue.Et voilà donc en fait moi je prends IPython c'est juste un interpréteur Python mais unpeu plus costaud parce que t'as la coloration syntaxique et puis t'as plein de choses enplus et ça vient de des Jupyter Notebook, je sais pas si t'as déjà entendu parler
00:47:56 :de ça, des Jupyter Notebook, ouais tu connais?Ouais ouais.Ok bah voilà ça ça vient avec en fait.Ok mais c'est pas dispo sur Mac seulement.
00:48:07 :De quoi?Je dis c'est pas dispo sur Mac seulement.Ah non non non IPython c'est dispo sur Windows, Linux et Mac.Et en fait il suffit juste, bah là il y a une question de Salvatore, tu fais juste pipinstall IPython et du coup tu vas avoir IPython qui s'installe, bon là il va pas me le faire
00:48:31 :parce que j'ai déjà fait, mais c'est juste ça, pip install IPython, par contre si vousavez PyCharm ou VS Code et que vous installez IPython dans votre environnement virtuel,oubliez pas de quitter l'éditeur de code et de revenir parce qu'en fait il a, j'airemarqué ça, il arrive pas à recharger l'interpréteur IPython quand vous l'avez
00:48:52 :lancé depuis l'interpréteur, enfin dans votre éditeur.Donc si je reviens un peu à ce qu'on faisait, donc là qu'est ce qu'on a, on a une fonctionqui permet de récupérer tous mes gist sous forme de Json grâce à mon token qui estici.
00:49:16 :Ok, ça va pour tout le monde? Moi ce que j'aimerais c'est que dans mon dashboardj'ai un truc un peu plus sexy pour afficher mes gist.
00:49:29 :Donc ce que je vais faire ici, je vais dire from utils import la fonction parce que commeje vous l'avais déjà dit, moi j'aime bien séparer, de toute façon c'est une habituded'apprendre qu'on fait de la programmation, il faut séparer un maximum votre, tout cequi est front-end etc, votre logique un peu, essayer de séparer au maximum.
00:49:48 :Donc là j'ai vraiment mes fonctions d'appel d'API etc qui sont dans ce module là, utils,utils pourquoi? Parce que j'aime bien faire tout ce qui est fonction utilitaire etc.
00:49:58 :Je les appelle toujours, soit mon dossier s'appelle utils ou le fichier python s'appelleutils.Donc ce qu'on va faire c'est que, on va essayer d'afficher, bon déjà on va voir,on va afficher le bousin et puis on va voir ce que ça nous donne.
00:50:18 :Du coup on va d'abord appeler, on va d'abord créer la liste, gist, égal, get my gistet on va dire st.write, donc là en fait c'est une liste, donc je crois que, non,
00:50:35 :juste st.write gist.Ok, donc là je relance, je vais même écrire, st.write gist, et voici vos gists.Et là je vais lui rajouter un petit, avec Streamlit vous pouvez rajouter des petitsémojis etc, c'est sympa, on se fait plaisir.
00:51:03 :Voilà, je lance, donc là vous voyez il m'affiche tous mes gists que j'ai récupéré,donc on voit vraiment qu'il liste un peu comme un bourrin le résultat du zone, maisbon je trouve que c'est déjà pas mal, vous voyez on a un truc un petit peu interactifetc.
00:51:27 :Donc là maintenant on va servir un peu de la puissance du, un peu de la puissance du,de, pas de la puissance, c'est un objet Python, vous voyez c'est une liste de dictionnaires,donc ce qu'on va faire, on va se dire que nous on veut seulement récupérer, qu'est-cequi nous intéresse là-dedans, on va récupérer juste le lien URL qui va permettre de faire
00:51:52 :de, enfin je sais pas comment on dit en français, d'incorporer le petit gist et on va affichersa description.Le code frontend se trouve où? Bah c'est ça qui est beau dans, du coup c'est Yannick,
00:52:13 :excuse-moi parce que c'est bien Yannick, je peux t'appeler Yannick.Ouais c'est ça qui est beau avec le framework c'est que tu t'occupes pas du frontend, lestreamlit il s'occupe de tout, c'est pour ça que moi j'adore ça parce que je suisune quiche en développement frontend, le CSS etc je fais pas ça, après il y a des
00:52:38 :développeurs back-end, il y a des développeurs frontend et des développeurs full stack,c'est-à-dire qu'ils font et du back-end et du front-end, mais moi je suis uniquementback-end donc je touche pas au... et streamlit il s'occupe de tout.
00:52:53 :Donc ce que je disais c'est qu'on va récupérer le HTML URL et on va récupérer, j'aimeraisbien récupérer ici, savoir le langage du script parce qu'en fait dans les gist vouspouvez stocker du Python mais vous pouvez mettre aussi du Java, du JavaScript, toutce que vous voulez.
00:53:13 :Donc on va récupérer le type de langage comme ça on va les classer comme ça et onva récupérer la description.Ok donc qu'est-ce qu'on va dire, on va dire pour s'y retrouver on va juste faire afficherle premier gist comme ça on va plus voir ce qu'on fait.
00:53:32 :Donc là je vais dire gist, donc comme c'est une liste je peux dire juste affiche moi lepremier, donc 0.Donc là il m'a affiché vous voyez juste le premier, donc moi je vais vouloir le HTMLURL, vous voyez ici déjà que si par exemple je faisais juste HTML URL, là il va juste
00:53:54 :me sortir l'URL donc déjà c'est pas mal et après on va dire que je veux, en faitje vais me recréer un nouveau data display par exemple et on va dire que le data displayc'est un dictionnaire qui va contenir du coup le HTML URL ça va être le, attendez j'ai
00:54:36 :réfléchi comment je peux le mettre, donc là j'ai tous mes gist, je vais le mettrelà, on veut juste afficher le premier donc on va dire que mon gist c'est le premier uniquementet on va créer un data display et on va dire du coup que c'est HTML URL ça va être gist
00:55:11 :HTML URL, on va déjà vérifier qu'il ne nous affiche pas de bêtises, st.writeDataDisplay,ok après qu'est-ce qu'on avait dit, on a dit qu'on voulait la description, donc làon va aller récupérer gist description, ok donc là ça s'affiche, fonction pour gérerl'import et qu'est-ce qu'on va rajouter, on va rajouter le type, on va dire c'est,
00:55:52 :non moi je vais récupérer, langage, et ça je ne vais pas dire que ça va marcher parcequ'il me semble qu'il faut aller chercher, c'est un dictionnaire imbriqué, c'est dansfiles je crois. C'est pas tout à fait ça, attendez je vais juste aller à réafficher,
00:56:36 :alors il faut que j'aille dans files, et dans files c'est un dictionnaire et je vais chercherlangage, ok donc files, pourquoi ça marche pas ça, je comprends pas pourquoi il veutpas me l'afficher, admin, ah super bien vu. Ouais mais du coup il y a un truc qui va pas
00:57:23 :aller, ah oui en fait, parce qu'en fait dans un gist on peut mettre plusieurs langages,donc en fait ce qu'on va dire c'est qu'en fait le langage ça va être une liste, mercic'est bien vu, ça va être une liste, ah putain pourquoi il veut pas me le faire, on
00:57:44 :va dire l for, non ça va être dico, donc ici c'est bien langage, for dico in gistfiles, parce qu'en fait on peut avoir plusieurs files. Alors pourquoi il m'emmerde, je vais
00:58:29 :l'écrire ici, juste après files, dico language, dico in gist files, non ça devrait marcherça, je vais essayer, for d in gist files, et on va voir déjà ce qu'il donne avec ça.
00:59:09 :Ok donc ça normalement c'est bon, admin, et si je fais admin.py, ok, et après je faislanguage, donc ça normalement, point write, ok, et normalement si je fais for gd in, pointwrite, ok, pourquoi ça marche pas, excusez moi j'ai juste un petit souci, je vais justeafficher, on va voir ce qu'il dit quand vous êtes en pleine session de débugage. Donc
01:00:32 :là normalement je ne comprends pas pourquoi je ne peux pas accéder, ah d'accord, ok,c'est parce que c'est pas le bon niveau de liste, il faut encore que j'aille encore plusloin, du coup, ouais, comment je vais récupérer, files list, en fait là dedans, admin, ouaisok, ah oui d'accord, mais pourquoi il me fait ça, admin, bon je vais pas perdre de temps
01:02:01 :là dessus parce que c'est un peu chiant, on va dire qu'on veut juste le html url et puisla prochaine fois je vous ferai si je peux vous faire un truc plus sympa, je voulaisjuste qu'on puisse afficher le type de langage pour que j'affichais, mais là c'est juste
01:02:17 :un problème de niveau de liste et de dictionnaire, je vais pas passer mon temps à faire ça,c'est pas intéressant. Donc là on en était où, on va dire qu'on a juste le html et la
01:02:29 :direction, ok, maintenant si je fais st.write data display, ok, on est là, donc ce queje vous propose maintenant c'est qu'en fait on dit, au lieu d'en parcourir un seul onva parcourir tous les listes, donc on va dire for list in list, et donc là en fait la data
01:02:57 :to display elle va être comme ça, et nous ce qu'on va faire c'est qu'au lieu d'afficherça on va dire st.with, je vais faire un expander en fait, qui va dire, vous allez voir ce que
01:03:11 :c'est que l'expander, l'expander je vais lui dire c'est, j'ai même pas besoin je penseje vais mettre data display, du coup j'ai dit quoi, on va mettre la description, eton va dire st.write, on va afficher l'url, donc là vous voyez, bon il y en a pour lesquels
01:03:47 :j'ai pas de description, donc on va dire, on va le remplacer ici directement, if datadisplay description, si y'a pas de description on va dire, pas de description, voilà pasde description, bon c'est pas grave faudra le changer en fait, ce qu'il faudrait mettreici c'est le nom du sujet, donc là vous voyez quand j'ai mis st.expander il m'a créé
01:04:23 :automatiquement un petit bouton qui va me permettre de descendre ou pas le script, doncça permet juste d'afficher ce qu'on veut et si on clique on a le lien vers le github,et moi ce que je voudrais faire c'est vraiment avoir le embedded, donc si je vais voir sur
01:04:42 :streamlits embed code, y'a un truc qui existe, c'est un streamlits embeddist, en fait c'estjuste pour que au lieu qu'il m'affiche, parce que moi j'ai pas envie qu'il m'affiche juste,où est-ce qu'il y a mon truc, là je m'en fous en fait qu'il m'affiche le lien url,moi ce que je veux c'est vraiment qu'il m'affiche le code qui correspond à mon gist, donc ce
01:05:14 :que je peux faire c'est ici y'a une bibliothèque qui permet justement de faire carrément d'embedderle code comme on veut. Donc ici je vais installer la bibliothèque, et ça installe, je relance,
01:05:31 :maintenant je vais suivre streamlits dans le code, il suffit juste de faire d'importerça, je vais le mettre là, et puis ça je vais virer, et du coup vous avez compris,ici à la place de mettre st.white machin, je vais mettre, ok, on est bon, et donc normalement
01:06:02 :on rerun, super, git hub qui se tue, pourquoi il marche pas, super. Voilà donc maintenantsi je vais voir, vous voyez, y'a un petit problème de mise en page, mais faudrait lerégler en fait, sinon on n'est pas obligé de mettre le petit expander, je vais l'enleverici, et on va juste mettre un titre, on va dire st.white, donc là je vais mettre mon
01:06:40 :data display. Voilà donc vous voyez en fait il m'a sorti la liste, ce qu'on a fait, justepour résumer, on a extrait la liste de tous nos gists grâce à l'API, ensuite on a crééune interface streamlits pour afficher tous nos gists, donc là en fait ici on a mis la
01:07:19 :description parce que moi je l'ai mise comme ça, mais vous voyez qu'on pouvait le mettrecomme je l'ai mis avant avec un expander, c'est juste qu'il faudrait travailler un petitpeu, pourquoi il ne me l'affiche pas en assis, je crois savoir pourquoi, il me l'affichaitmoche comme ça. Il faut que j'utilise en gros la largeur de l'expander il me semble.
01:07:44 :Est-ce qu'on peut faire ça? Je vais mettre ici, use, then with true, et puis on va mettrela page st.setpageconfig et on va dire qu'on veut du layout wide pour large, donc si je
01:08:27 :relance, voilà. Donc là c'est une autre manière, mais après moi ce que je voulaisfaire et que j'ai passé du temps c'est, vous voyez ici si on avait mis par exemplele type de fichier que c'est, donc là c'est des fichiers python, mais par exemple, est-ceque j'en ai un, ça c'est du python, voilà là par exemple c'est du html, on aurait pu
01:09:01 :dire si j'avais réussi à faire ce que je voulais avec le filtre, on aurait pu rajouterdes filtres ici grâce à streamlit, on aurait dit, là tu me filtres, tu me dis je veuxque les fichiers html, on aurait créé le filtre et on aurait pu afficher uniquementles fichiers html. Donc voilà c'était un moyen de se faire notre propre dashboard avec
01:09:22 :nos propres gist sans passer par l'interface de GitHub. Par exemple je sais pas, vous faitestourner l'application chez vous sur un local ou quoi et vous n'avez pas besoin de vousconnecter au site GitHub, vous pouvez directement la voir avec votre dashboard un peu customisé.
01:09:38 :Ouais, je t'écoute Simon. Ouais, tout à l'heure tu disais qu'il y avait moyen d'utiliserle mécanisme d'authentification de Django pour pouvoir le rajouter dans streamlit, est-ceque d'une manière générale ça pourrait être envisageable d'avoir tout le backendqui est géré par Django et toute la partie frontale graphique simple qui est gérée
01:10:04 :par streamlit en reliant les deux? Ou c'est pas un truc trop conseillé? Bah si si, moic'est exactement ce que je fais sur la majorité de mes applications en fait. Toute ma logique
01:10:18 :je la fais toujours avec Django, en fait typiquement là j'ai fini une mission pour un clientqui voulait faire une gestion de base de données de joueurs de foot, donc en fait toute lalogique de création de joueurs, les clés étrangères etc avec les clubs de foot, lesmercato etc donc j'ai tout fait en Django et l'interface utilisateur pour juste visualiser
01:10:47 :les joueurs, filtrer etc je fais avec streamlit. Donc oui tout à fait c'est carrément envisageablemais par contre ce que tu devras faire si tu fais Django c'est que tu devras passerd'abord par une API Django REST framework. Si tu veux interfacer en fait ton streamlit
01:11:10 :avec Django tu vas devoir passer par l'API. Et du coup c'est un peu aussi ce que je voulaisvous montrer, c'est un truc que j'ai fait juste avant, est-ce que c'est celui-là? Moi
01:11:22 :je crois que c'est celui-là. Donc juste pour bien comprendre on passe par l'API parceque d'un côté tu as fait l'installation Django, de l'autre côté tu fais l'installationstreamlit et tu lis les deux via les API en fait. Exactement c'est ça, en fait tu vois
01:11:36 :ici sur ce projet que j'ai fait juste avant, donc là j'ai mon backend, en gros il fautque tu vois, tu peux voir la chose comme ça, ici j'ai le backend qui est fait en Django,donc là tu vois c'est un projet Django avec la base de données etc. Dans Django j'ai
01:11:54 :créé une API qui permet de faire, donc une API tu vois ce que c'est, si tu me posesla question ça permet de faire le lien entre la base de données et l'application etc.
01:12:04 :Et ici dans mon frontend j'ai juste mon API qui va, en fait ici moi je me suis servi deDjango juste pour me créer une application d'authentification d'utilisateur, il n'ya rien d'autre et je m'en sers juste pour ça. Donc je vais vous montrer, et moi ce
01:12:19 :que je fais dans un projet comme ça c'est que je me crée deux consoles, une frontendet une backend, donc là je lance mon projet backend, manage server, donc en fait là-dessusj'ai rien, en fait j'ai juste mon interface administrateur de Django, si je fais adminj'ai créé juste avant, j'ai vraiment juste mes users, j'ai rajouté donc admin et j'avais
01:12:42 :créé un user Michel. Et ici si je reviens et que je lance mon frontend, streamit run,comment j'avais appelé, streamit app, ça va se lancer, et donc en fait tu vois je m'ensuis servi, donc c'est ce que je voulais vous montrer pour l'authentification robuste.
01:13:06 :En gros ici, si je tape, je sais pas, Jean, et en password je tape Jean, ça va me direlogin fail, vous n'êtes pas autorisé, mais par contre si je tape Michel avec ceque j'ai rentré comme mot de passe pour Michel, donc il faut que je me souvienne,
01:13:25 :donc là login successful, et du coup là j'ai bien mon giste. Donc en gros ça permet,comme streamit c'est juste une interface utilisateur dashboard, il n'y a pas de systèmed'authentification qui existe. Donc souvent, c'est ce que les gens me conseillent, c'est
01:13:40 :de passer par une API pour faire l'authentification dans la base de données. Et donc ici dansstreamit, où est-ce que je suis? Donc streamit c'est pareil, j'ai dû lui renseigner,
01:13:51 :mais ça c'était pour l'exercice, j'ai renseigné le token qui permet d'accéderau giste, et ici tu vois que j'ai créé une fonction dans mon dashboard streamit quis'appelle login, et là tu vois ici je mets mon URL de l'API que j'ai créé. Donc
01:14:10 :ici je ne sais pas si il me faut, ouais celui-là je n'en ai pas besoin. Donc ici tu vois,j'ai créé un user quantitative et un password quantitative, en gros ici je check si usernameet password quand je fais ma requête, donc ici c'est bien l'URL de mon backend que
01:14:26 :j'ai lancé à côté, tu vois ici backend, c'était celui-là, il tourne sur ce serveur-là,donc c'est ce que j'ai mis là, et ici c'est le lien vers mon API parce qu'en fait làj'ai mon interface, mais j'ai créé aussi une API directement, donc ici tu vois je suisdans mon interface API, je vais zoomer un peu, où je peux voir, je peux accéder à
01:14:50 :mes users, mais j'accède uniquement aux users qui est authentifié là, tu vois j'accèdeà ID, Username, Admin, si je fais logout et que je me log en tant que Michel, ici j'aiaccès uniquement à mon propre username, c'est normal je ne suis pas un user admin.
01:15:15 :Et donc en gros ce qu'on fait ici c'est qu'on fait une requête en mettant le tentativeusername et le tentative password, et si on a une réponse de type 200, donc en faitune réponse de type 200 en API ça veut dire que c'est succès, et ben on affiche ce
01:15:35 :qu'on veut.Donc là en fait mon interface Streamlit elle me permet de définir des text inputsqui sont en fait ces petits machins là, la sidebar et tout ça je la définis grâceà Streamlit, et ici je récupère du coup une tentative de username et une tentativede password, et je vais checker avec ma fonction qui elle va faire un appel à mon API d'authentification.
01:16:00 :Donc en gros on voit que, et du coup si le login status est true, ben on met ok je suiscontent je suis logué, et ici si je suis logué, ben je fais apparaître ce que jeveux dans mon application.
01:16:12 :Ok ok, super. Moi je t'en prie, j'ai un petit peu dépassé le timing parce que bonil y avait Thibault au début qui a fait des annonces, mais voilà si vous avez des questionsdites moi si ça vous a intéressé, si vous pouvez retenir des choses de cette session,
01:16:41 :et puis voilà tout ce que vous voulez. Je vais arrêter de partager mon écran, est-ceque je peux arrêter de partager mon écran ou vous avez des questions?
01:16:50 :Alors j'en aurais encore une du coup, comme je suis nouveau sur la plateforme, si jamaison a des idées pour justement pour les sessions de mon Torah à soumettre, ça se fait ou? Bien sûr, ça se fait, c'est même recommandé
01:17:09 :parce qu'en fait, merci Salvator, bonne soirée, parce qu'en fait pour les sessions de monTorah, que ce soit moi ou Thibault, moi je fais le jeudi soir, je crois que Thibaultil continue, je sais pas, Gabriel Thibault il continue à faire les, il en fait aussile samedi des sessions? Il y a un moment qu'on a pas fait le samedi
01:17:29 :là, je ne sais plus quand ça va finir, mais il y a un moment.Ok, mais sinon oui en gros, moi j'essaie toujours de venir avec un ou deux sujets,parce que s'il y a zéro question et pas de remarques, bah j'ai peur qu'on se regardedans le blanc des yeux, du coup moi je prépare toujours un ou deux sujets, comme ça j'ai
01:17:45 :quelque chose à montrer, mais s'il y a des questions au début et que je peux y répondreparce que je suis pas non plus, j'ai pas de soucis à dire des fois que je sais pasou que je connais pas, donc voilà, si je peux répondre aux questions au début c'est
01:17:59 :bien, et s'il y a des sujets qui sont proposés parfois à l'avance, peut-être comme çamoi je peux regarder de mon côté, trouver une idée, un exemple, ou des trucs commeça.
01:18:08 :Mais ça se fait, et il me semble que sur le Discord, parce que le Discord il est làen place depuis deux trois jours, je le connais pas très bien, mais sur le Rocketchat ily avait un canal exprès question Montora, donc je crois que sur le Discord il doit y
01:18:19 :avoir, je sais pas là, les aficionados du Discord, est-ce que vous savez s'il y a déjàles canaux qu'il y avait sur le Rocketchat là?
01:18:27 :J'ai pas vu, attends, à quelle présentation ça, annonce, suggestion peut-être?Pour moi annonce, suggestion, pour moi c'est plutôt ouais sur, par rapport au Addoxtring,mais du coup faudrait, bah dans les suggestions faudrait peut-être proposer à Thibault derajouter un canal question Montora.
01:18:47 :Ok, super.Yes.Ouais, bah pas de soucis.Bon bah on va s'arrêter là si vous avez pas d'autres questions.Merci à tous pour votre retour, ouais d'accord Yannick je ferai un truc plus simple la prochainefois sur Streamlit, un exemple de base.
01:19:28 :Une fois on pourra voir un peu ce que t'as montré là à la fin avec ton utilisateurque t'as relié à Streamlit, ton truc d'ango Streamlit.
01:19:53 :Ouais bah en fait je voulais le coder en live avec vous mais là j'ai pas eu le temps.Mais en gros ouais on peut le faire la prochaine fois.
01:20:03 :Et même tes core reset, tout ça tu peux les relier même tes core reset, tout ce quiest dans l'API en fait tu peux le relier quoi.
01:20:13 :Ouais bah en fait, attends je te montre vite fait.Je suis pas à l'aise avec tes API en fait, je me rends compte c'est un truc où Yannickest pas super à l'aise.
01:20:28 :En fait tu vois ici sur, où est-ce que j'ai mis, ouais.Donc j'avais créé une application, mais en fait y'a pas d'application à créer parceque le user model il existe déjà dans Django donc t'as pas à le recréer.
01:20:43 :Et donc en fait j'avais créé juste une API mais je le montrerai la prochaine foison le fera en live ça peut être intéressant.Et dans mon serializer ici tu vois j'ai un peu, j'ai, non c'est pas dans le serializerpardon c'est dans le viewset.
01:20:57 :Donc là ton core reset, par contre t'es pas trouvé, parce qu'en fait tu vois moncore reset ici ça tu connais, je le filtre parce que je veux afficher uniquement lesdonnées du user qui est connecté parce que sinon c'est, tu vois j'ai pas envie quepar exemple Michel il voit les datas de l'admin ou autre.
01:21:18 :Donc c'est pour ça ici que tu fais, tu filtres uniquement celui qui est authentifié,comme ça tu vois Michel il voit que les données de Michel.
01:21:28 :Par contre ici tu vois il y a peut-être un petit truc qu'il faut que je règle, sije mets pas ça je peux pas filtrer mon core reset, j'ai l'impression qu'en faitil a besoin d'avoir un base, enfin j'avais essayé avec un base name, tu vois définirun base name mais ça a pas fonctionné.
01:21:46 :Donc je suis obligé de faire d'abord un appel core reset à tous les objets et aprèsde le filtrer tu vois, mais bon ça je pense qu'il y a un truc plus propre à faire.
Aucune occurrence trouvée pour « ».
Bravo, tu es prêt à passer à la suite