Session de mentorat TOSA
Session du 05 septembre 2024 à 21h00
Structures de Données
TOSA & Certifications
Algorithmique & Performance
Outils & IDE
Librairie Standard & Modules
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
Session de mentorat TOSA
Dans cette session nous allons revenir sur différents modules : csv, json, collections, sys, urllib. Nous verrons également comment réaliser l'exercice TOSA parmi les plus difficile qui nécessite de déterminer les relations de parenté dans un graphe
00:00:00 :Avant de commencer, bonsoir tout le monde à ceux que je n'ai pas encore dit bonsoir.Est-ce qu'il y en a qui ont des questions sur Python en général ou sur Django ?
00:00:15 :Même si c'est une session TOSA encore, on peut répondre à des questions Django s'il y a besoin.Dites-moi.Sinon, attention à TOSA.Si c'est bon, c'est bon. Du coup, on peut attaquer.
00:00:34 :Il y a Walid qui doit arriver.Du coup, Jean-Phil, il faudra que je te retrouve le lien.Bonsoir Adam.Salut.Attends, j'essaie de te retrouver le lien.
00:00:53 :Jean-Phil, si je l'ai là maintenant, tout de suite.Informations.Premium événements.Vos diffusions.Ça veut dire que je peux le retrouver dans...Passe-bases-adieux, peut-être ?
00:01:12 :Non, c'était pas celui-là, je crois.Informations d'inscription, login, logout.Hum hum.Je ne sais plus lequel c'était, celui-là.Laissez-moi prendre le lien d'invitage.J'ai regardé le login logout.
00:01:38 :Ouais, stop.Je te retrouverai le lien, Jean-Phil, je te l'enverrai.Alors, salut Salvatore.Bon, on est pas mal.On a encore une personne qui va arriver, c'est bon.
00:01:54 :Salut tout le monde.Salut.Du coup, là, ce que je dis, Salvatore, c'est une session Toza, là.Donc, on ne parle pas forcément de Django.
00:02:07 :Ici, il y a des questions sur Django.Mais on va plus s'intéresser là au Toza.Des petites choses que vous pouvez avoir.Est-ce que je vous mets un truc...
00:02:17 :un peu hard pour commencer ou pas ?Hum.On va revenir sur un exercice.J'en ai parlé il n'y a pas longtemps, mais j'y tiens à cet exercice,parce qu'il peut vous rapporter pas mal de points.
00:02:32 :Il est intéressant à comprendre.Attendez, j'ai ma fille qui...Hop, c'est bon.Hum.Alors.L'exercice, il est où ?Tac.Formation.Exercice.Hop là.Toza.
00:02:54 :Celui-là, je voudrais que vous vous embêtez un peu avec celui-là.Est-ce qu'il y en a qui sont amusés à le faire ou pas ?Hum.
00:03:05 :Alors.Hum.Est-ce qu'il y en a qui sont amusés à le faire ou pas ?Depuis ou pas ?Non, non pour moi.Non.Non ?
00:03:21 :Ouais, alors, il est impressionnant.Il est impressionnant, mais il est jouable.Moi j'ai eu le droit au Toza, je suis tombé dessus.Stéphane, je ne sais plus s'il y a tant que j'ai un doute.
00:03:35 :Je t'ai déjà eu en mentorat ou pas ? Je ne sais plus.Ou t'en as fait que avec Thibaut jusqu'à maintenant ou c'est ton premier ?
00:03:49 :C'est ton premier, ok.T'en es où en Python ?Pour l'instant, t'en as la formation de base ?Je reprends en vocale, c'est un peu plus simple.
00:04:07 :En fait, pour l'instant, je développe en Python de mon côté pour des applis de boulot.Ah cool, ouais.J'ai déjà fait des applis avec VUI, notamment moi je suis dans tout ce qui est forensic et j'ai développé une appli en Python pour faire un environnement de système Linux à partir d'une image E01 pour ça et qui ça cause.
00:04:28 :Génial, ok, vous faites déjà un gros niveau alors.On essaye.Non, c'est bien, c'est bien.Du coup, pour ceux qui débutent avec Python, cet exercice là, pour l'instant, il peut paraître chaud.
00:04:40 :Après, pour ceux qui sont déjà intermédiaires ou avancés, et même en général, on peut le revoir là, rapidement.On va essayer d'expliquer, juste, l'énoncé est impressionnant, ok, c'est normal.
00:04:58 :Mais le but, en fait, c'est à chaque fois, dans votre tuple, c'est...Est-ce que je l'ai par exemple ?Voilà, ça va être de remonter les encérettes à chaque fois.
00:05:10 :Par exemple.Ah, attendez, il y a Wally qui a un petit problème pour se connecter.Bizarre qu'il l'ait pas.Attendez, je vais copier l'adresse.Il est où ?
00:05:25 :Ah ouais, ça c'est bizarre.Tac, allez, le lien c'est celui-là.Voilà.Il va arriver normalement.Du coup, ici, on va avoir un...Hop là, on accepte.
00:05:51 :Dans votre graphe, en fait, le but, ça va être de savoir...Nickel.Donc, par exemple, de savoir, du coup, qui retombe fou, si B est un ancêtre de A.
00:06:02 :Voilà, en gros, on va aller rechercher dans notre graphe, ici,c'est en remontant, si on trouve, par exemple, que...Eh bien, donc, là, ça va être...
00:06:15 :Ici, 5, donc, 5 ça va être B, c'est l'ancêtre.Donc, si 5 va être...Oh, attendez.C'est un ancêtre de A, donc, c'est-à-dire que A, B, c'est ça.
00:06:28 :Je me suis perdu, excusez-moi.Donc, là, si...Je me suis perdu, excusez-moi.Donc, là, si...Attendez.Complétez la fonction.Je me suis perdu dans le tronc fou.
00:06:48 :Si B, c'est ça.Donc, B est un ancêtre de A, c'est ça.Donc, voilà.Donc, le chiffre B, donc, si 1 est un ancêtre de 5, c'est bon.
00:06:56 :C'est bien ça, excusez-moi.Donc, mais moi, je n'ai pas encore, maintenant.Donc, pour 16, je ne peux pas.Mais moi, je n'ai pas encore, maintenant.
00:07:03 :Donc, pour 16, il va falloir remonter ce graphe, ici,qui est représenté par une liste avec des tuples.Donc, là, on voit bien, donc, que...
00:07:14 :que, ici, 1 est un ancêtre de 5.Si vous regardez 1, le 5, il est là.Alors, c'est difficile à visualiser comme ça.On a 0, 1.
00:07:31 :Ici, on a même un 3.On a un 4.Ici, 4, 5.Voilà, donc, en gros, là, vous avez bien, donc, le 1.Même un 4, là.
00:07:47 :Et donc, il est relié au 5.Est-ce que j'ai un...Est-ce qu'il explique bien ici ?C'est facile de voir ça en schéma.Ouais, c'est assez compliqué en schéma.
00:08:00 :Est-ce qu'il n'y a pas un autre schéma ?Est-ce qu'on pourrait le voir, ici ?Est-ce que vous voyez un peu ou pas l'exercice ?
00:08:13 :C'est vrai qu'en prenant cette forme de tuple, ça peut paraître compliqué.Ou pas ?Je vais remettre le message.Par rapport à cet exercice.Est-ce que, comme ça, là, la consigne, vous arrivez à la comprendre ou pas ?
00:08:27 :Si vous tombez sur l'autosat.Allô, allô ? Vous m'entendez ?Allô ?Oui ?Je ne t'entends pas.Ah, ouais, non.Je suis arrivé en retard.
00:08:46 :C'est pour ça que je ne vois pas.T'es arrivé d'un coup ?Non, j'ai eu une espèce de latence.Ça fait bizarre.Ouais, faudrait laisser le...
00:08:53 :Le graph sur l'écran, ouais.Ouais.Comment je peux faire ?Ah, attendez.Comment je vais pouvoir le faire ?Parce que 1 est un ancêtre.
00:09:09 :Moi, les graphes, ça me rappelle les automates d'état fini, des terministes.On a fait ça à l'époque quand j'étais étudiant.Ouais.C'est ce genre de graphes.
00:09:24 :T'as chaque nœud.T'as l'antécédent et le précédent, les suivants, etc.C'est ça.Et en fait, il faut les remonter.C'est un peu ce qu'ils montrent dans le schéma, là.
00:09:33 :Là, vous avez un exemple de graphe que vous pouvez remonter.En gros, le but est que c'exercite...Je me suis perdu au début.Excusez-moi.T'es souvent là-bas.
00:09:49 :En fait, le pattern, ce que je disais, c'est que le but,pour vous-même de l'apprendre, c'est un truc que vous pouvez deviner par cœur.Le but avec le graphe, là, c'est de créer une fonction pour pouvoir le monter.
00:10:05 :Pour ça, vous allez boucler sur vos tuples qui sont à l'intérieur du graphe.Donc là, vos tuples.En fait, ce que vous allez faire...Je reviens dessus.
00:10:22 :De toute façon, je vais le mettre à côté.Mais au pire, je vais laisser l'énoncer.Voilà.Et en fait, ce que vous allez faire,vous allez créer un dictionnaire à partir du grapheet vous allez inverser la relation parent-enfant du graphe original.
00:10:35 :En gros, chaque dictionnaire, ça va être un enfantet la valeur, ça va être son parent.Il faudrait revoir la vidéo plusieurs fois pour comprendre.
00:10:45 :Peut-être au début, mais ce n'est pas facile.Ensuite, ce que vous allez faire...Donc là, on est là.Ce que vous allez faire, on va initialiser la variable current avec la valeur de A.
00:10:56 :Et en fait, la valeur de A,ça sera utilisé pour parcourir les ancêtres, justement, de A.Je commence par ça parce que c'est le plus chaud.
00:11:08 :Je vous explique.Après, vous le revisionnerez et vous réussirez de le faire.Mais franchement, faites-le.Ça rapporte pas mal de points.Et ensuite, quand on arrive dans la boucle, ici,la boucle va continuer tant que current,il a un parent dans le dictionnaire.
00:11:28 :Et après, on va mettre ajout currentpour que ça devienne le parent du noeud actuel.Comme ça, on va remonter d'un niveau dans l'arbre.Si le parent actuel, il est égal à B, c'est ça.
00:11:44 :Ça signifie que B est un ancêtre de A.Donc, on a true.Sinon, c'est false.Voilà.En gros, c'est ce qu'il suffit pour l'exercice.Si je voulais en parler rapidement...
00:12:01 :Si j'ai bien compris, en fait, on crée un dictionnaireoù les clés, c'est les enfants.Et on boucle sur le dictionnaire avec la valeur de Apour savoir si la clé, elle existe.
00:12:11 :Et si ça nous retourne une clé avec une valeur,et que la valeur, c'est bien B,à ce moment-là, on renvoie true.Sinon, on renvoie le false.
00:12:17 :C'est bien ça ?Attends.Le début, tu as dit que la clé du dictionnaire,c'était un enfant.Oui.La valeur, c'est bien le parent, oui.
00:12:26 :Oui.Et donc, en fait, après,on boucle sur le dictionnaire par rapport aux clés.Oui.Et quand la valeur de la clé match avec la valeur A,si j'ai bien suivi,à ce moment-là, le curand devient la clé.
00:12:41 :Et si la clé, elle est égale à B,à ce moment-là, c'est vrai.Et sinon, on retourne un false.En fait, c'est ça.C'est qu'en gros, à la fin, c'est ça.
00:12:49 :Si le parent curand, le parent actuel,il est égal à B,ça veut bien dire que B est un ancêtre de A.Mais il faut avouer que ce qui me persiste là,c'est honnêtement le plus dur que vous pouvez avoir, je pense.
00:13:06 :Moi, quand j'ai fait le Toza,j'étais monté jusqu'au niveau 955,donc je montais vraiment des questions assez chaudes.Ça, je crois que c'est le plus dur que j'ai eu.
00:13:15 :Vraiment.Donc, voilà.C'est vrai qu'elle n'est pas évidente.Donc, au pire, vous pouvez revenir dessus,mais c'est pour ça que ça fait déjà 2 moisque j'insiste dessus.
00:13:24 :Au pire, le pattern, vous l'apprenez.Essayez de le comprendre comme ça.Moi, c'est comme ça que je l'avais décortiqué.Je peux vous le réexpliquer parce que je l'avais décortiqué,je l'avais compris.
00:13:32 :Et après, c'est plus facile à le faire, en fait.Vous vous dites dans votre tête,je vais inverser,je vais avoir l'enfant, le parent,puis après, j'ai une fille avec A,et puis je vais boucler.
00:13:43 :Voilà.Je vous laisse tranquille avec celui-là pour l'instant.Ce n'est pas cool de commencer avec ça.Du coup, il y avait plusieurs chosesque je voulais revoir sur le Toza.
00:13:58 :On va commencer par quoi ?Alors, l'infant, on a vu.Le cartouche, on ne l'a pas vu.La puce, on ne l'a pas vu.Une petite fonction simple en Pythonqui peut être utilisée.
00:14:10 :J'ai déjà eu affaire pour des petits algorithmes.Est-ce que vous connaissez la fonction, ici,ABS ou pas ?Oui.Stéphane, oui.Cécile, non.En plus, ça, c'est une question.
00:14:27 :En plus, ça peut vous être utile.Et en plus, après, ça vous apporte de la culture.S'ils vous posent la question.Oui, c'est ça.En fait, ça va retourner la valeur absolue.
00:14:37 :Qu'est-ce que j'ai fait ?Ah non, c'est normal.C'est mon pytest.Excusez-moi.J'ai du mal quand je suis sur...Voilà.Hop là.Par exemple,le nombre positif,bon, là, on est toujours à...
00:14:52 :Si on fait de 3.14,on est toujours à 3.14.Par contre, le nombre négatif, là,ici, on retourne bien la valeur absolue.On n'a plus notre nombre négatif, en fait.
00:15:02 :Du coup, c'est tout bête.Ouais, c'est ça, j'y classe.C'est exactement ça.Pour avoir une valeur absolue, c'est comme en maths.Bon, je ne pense pas que je vais m'attarder plus longtemps dessus,mais là, on voit bien ici,le nombre négatif,ici, ils ne sont plus négatifs.
00:15:17 :On a bien retourné notre valeur absolue.Donc voilà,c'est bien de l'avoir pour la culture générale de Pythonsi on vous pose la question.Moi, perso, je n'ai pas vu d'exercice dessus,et je ne me souviens pas que quelqu'unait déjà eu un exercice dessus.
00:15:29 :À moins qu'il y en ait qui ait passé le...le tosa blanc, entre guillemets,et l'a eu,n'hésitez pas de me le dire.Il y a un exercice sur Doctitringqui utilise cette fonction,mais c'est la seule fois où je l'ai vu, je crois.
00:15:43 :C'est une fois dans un algorithme.Voilà, rien de...rien de fou.Vous connaissez IterTools ?J'ai déjà entendu parler,mais je ne me souviens plus exactement de la fonction.
00:16:01 :Là, c'est un petit module.Je m'en suis servi pour résoudre des algorithmes.Du coup, ça permet de résoudre des algorithmesassez facilement, on va dire.
00:16:12 :Par exemple,comme ça, ça peut paraître bizarre,mais ici, vous avez la fonction repeat.Là, ça va vous renvoyer X.On va répéter un élément plusieurs fois.
00:16:35 :En gros, IterTools,ça va vous permettre de travailleravec des itérateurs de manière efficace.C'est son but.Là, il y a une fonction qui est très utile.
00:16:47 :On va pouvoir générer des combinaisons.Toutes les combinaisons possibles.Par exemple, vous allez avoirl'itérable qui est ABC.Vous voulez à chaque fois des combinaisons de 2.
00:17:01 :Et ça vous génère toutes les combinaisonsqui sont possibles à chaque fois.Vous voyez, AB, AC, BC.Je ne sais pas, une fois,j'ai eu pour un exercice,pas forcément en taux A,mais je l'ai eu dans un exercice.
00:17:14 :Alors, je pense qu'il pourra peut-êtrele faire en taux A, je ne sais pas.Mais en tout cas, c'est bien de le connaîtresi vous posez la question dessus.
00:17:22 :Vous avez Combination.Tu vas en avoir les conditions possibles.Ensuite, vous pouvez avoirtoutes les permutations possibles.Là, il y a vraiment tout ce qui est possible.
00:17:35 :Ici, vous voyez,on va jusqu'au bout.Je mets les plus connus,parce qu'après, l'itérable,il y a plusieurs choses.Et ensuite, vous pouvez concatenerplusieurs itérables.
00:17:46 :Donc là, ABC, 1, 2, 3.On voit bien que c'est concatené ici.Vous avez ici Repeat.Je sais que j'ai vu plusieurs foisCombination et Permutation.
00:17:56 :J'ai découvert ce que je n'avaisjamais utilisé avant.Voilà, ça permet de concatenerici des itérables.Ça, franchement,pour des petits algorithmes,ces deux-là, je les ai trouvésvraiment très pratiques.
00:18:12 :Je m'étais embêté une fois.Ce que j'ai vu comme exercice,ce n'était pas en taux A,c'était autre part.C'était sur une plateforme.Et je me suis dit,il va falloir que je fasse ça moi-même.
00:18:22 :J'avais réussi à faire un truc,et puis après,j'ai vu que j'en avais parlé.Il m'a fait, tiens,tu ne connais pas Eckhart Tulle.Je lui ai fait, non.
00:18:31 :Il m'a balancé ça comme ça,et il m'a résolu l'algorithme en ligne.Donc, c'est pas mal.Est-ce que ça va pour Eckhart Tulleou pas ?
00:18:41 :OK.Je n'avoue plus le début,mais les sessions que je fais aux A,moi, j'aime bien faire ce genre de trucs,voir plus des choses générales.
00:18:54 :Comme ça, les modules,tout ça, c'est intéressant à voir.Je ne reste pas bloqué sur le même sujetdu début à la fin pour l'instant,mais on voit pas mal de petites choses.
00:19:05 :Eckhart Tulle, on l'a vu.Je pense que Wilp va me le demander,mais je ne t'ai pas oublié la dernière fois, Walid.Le repo de la dernière fois,en fait, je l'ai regroupé avec celui-là.
00:19:15 :Et je le mettrai en ligne ce soir.Ça marche, merci.Unitest, on va commencer avec ça maintenant ou pas ?Non, on va faire ça plus tôt après.
00:19:27 :Vous êtes habitués avec les modules Jison ou pas ?Je ne sais pas comment vous vous dites,vous, Jison, Jison, comme vous voulez.Est-ce que vous les avez déjà utilisés ?
00:19:34 :Beaucoup.Stéphane, je m'en doutais.Normalement, oui.Le nouvel techno, maintenant,les bases, c'est quoi ?Ouais.J'ai plein de noms.Alors, Jika, celui-là,il est important à connaître pour le Tozaparce que je sais qu'il y en a qui ont des questions dessus.
00:19:56 :Moi, je ne sais plus si j'en ai eu.Je ne m'en souviens pas.Je ne me souviens pas d'avoir eu,mais alors, avec Jison, en fait,vous allez pouvoir travailler justementavec des fichiers au format Jison, justement.
00:20:13 :Par exemple, là, ici,j'ai un objet Python.Donc, on a un dictionnaire.Et le petit piège, c'est qu'en fait,vous pouvez tomber sur certaines fonctions.
00:20:28 :J'en ai une, par exemple.Là, j'ai la fonction dumps.Et là, j'ai la fonction dump.Vous connaissez les différencesentre dump, dumps, load et loads ?
00:20:40 :Parce que là, vous avez load.Et le load, je l'ai mis ici.Est-ce que les différences,vous les connaissez ou pas ?Avec le S en plus ou pas ?
00:20:48 :Non.Ok.Ah, il est parlé.J'ai un doute.Ce n'est pas une histoiredu nombre d'occurrences qu'on prend en compte ?C'est une histoire de chaîne de caractère.
00:21:12 :En gros, ici,là, vous avez le dictionnaire Python.Ok, la notion d'objet Python.Avec dumps, ici,en fait, vous le transformezen chaîne de caractère.
00:21:27 :Là, sur le premier.Je le print où ?Là, ici, j'ai transformé en chaîne de caractère.De toute façon, je peux faire un printtype...
00:21:41 :On recommence.Voilà.Là, j'ai bien une chaîne de caractère.Donc, en fait,vous pouvez transformer votre objet iciPython en chaîne de caractère.Ce sera une chaîne de caractèresous forme de JSON,mais ce sera une chaîne de caractère.
00:22:01 :Avec dumps.Avec loads,vous allez convertir justementvotre chaîne JSONen objet Python.Donc, là, ici,je vais reprendre ma chaîne de caractère.Je l'avais là.
00:22:15 :On l'avait transformé en chaîne de caractère.Et avec loads,je vais la reconvertir icien objet Python.Là, s'il retourne dans mon...J'étais où ?
00:22:26 :Objet Python après le loads.Là, j'ai bienretransformé en objet Python.Pour en être sûr,si vous voulez,on va faire quelque chose.Vous allez voir,on a notre objet Python.
00:22:39 :Je le reprint.Il est où ?Là, j'ai transformé en dictionnaire.Après le loads.Donc, bien sûr,après votre objet Python,vu que c'est un dictionnaire,vous pouvez très bien accéder aux clés,changer la valeur avec votre clé.
00:22:58 :Là, je l'ai modifié.Le nom, à la base,c'est le nom du pont.Là, le nom,c'est Patrick.En famille, ce n'est pas grave.On voit bien que là,je l'ai modifiéen Patrick.
00:23:12 :Parce que sur le Toza,je sais que vous êtes amené...Je crois que j'ai vu un exercice.Quelqu'un avait un exercicedans ce sens-làoù il avaitune chaîne de caractèreen JSON,mais en chaîne de caractère.
00:23:30 :Et en fait,il suffisaitla chaîne de caractèrede la transformation d'objet Pythonet ensuite d'accéder aux cléset de modifierune des valeurs.Je ne sais plus comment.
00:23:43 :Je ne sais plus ce qu'il devait faire.Mais je sais qu'il y avait quelqu'unqui en avait parlé.Et puis, c'est tout.Il avait modifié...
00:23:49 :Il avait transforméen objet Python,transformé la clé.Et puis après,si vous voulez la transformeren chaîne de caractère,vous refaites un dump par derrière.
00:24:02 :Ça va pour les dumps et loadsavec un S ou pas ?Là, on est sur la conversionobjet Python,chaîne de caractère,chaîne de caractère,objet Python.
00:24:15 :De toute façon,je vais mettre un lien.Ensuite,j'ai le dump tout court.Là, c'est plus des chosesqu'on al'habitude de voir.Je vais laisser comme ça.
00:24:30 :Ici,avec dump,là, c'est Kiball,le monstre,je ne crois pas tropdans l'information d'ailleurs.Ce que fait dump,là, je vaismes données Pythonqui sont là.
00:24:42 :Ça, j'ai bien enviede le...Non, je vais laisser.Mes données en Pythonqui sont là,mon WPython,mon dictionnaire.En faisant un with open,n'oubliez pasle w.write,
00:24:56 :on reviendra dessussi vous voulez une fois.C'est pour écrire.On utilise le context manager.Est-ce que tout le mondea l'habitude du context managerou pas ?
00:25:08 :Avant que je continue.Pour ne pas s'embêteravec les clauses à la fin.Oui, c'est ça.J.K. en fait,parce qu'en fait,quand vous ouvrez des fichiers,je ne sais pas si il y a un exemple.
00:25:30 :Non, je n'ai pas l'exemple.J'avais fait une question dessus.Pour ouvrir des fichiers texte,par exemple,il faut que vous fassiezdes open pour les fichiers.
00:25:37 :Vous fassiez des open pour l'ouvrir.Close pour le fermer.Pensez à le fermer à la fin.Ici, avec un context manager,ça permet d'ouvrir le fichier.
00:25:45 :Dès que vous êtes sortidu context manager,dès que vous passez à la ligneen dessous,le fichier se ferme tout seul.Il n'y a pas besoinde penser à le fermer.
00:25:53 :Le principe, c'est ça.Ça évite de faire un openet un close.Là, ce que je fais,c'est que j'ouvre mon fichierqui s'appelle données.json
00:26:01 :qui n'existe pas,mais il va me le créervu qu'il n'existe pas.En mode écriture,à ce fichier,c'est pour avoir un alias.Là, je fais un json.dump.
00:26:14 :C'est pour écrire des donnéesdans mon fichier json.Mon objet de python,je vais l'envoyer dans le fichier json.Un dent égale deux,c'est pour le confort.
00:26:26 :Ça permet d'avoir l'indentation.Là, si je le lance,normalement,il s'appelle comment ?Données.json, il est là.J'ai bien mon fichier jsonavec les donnéesqui sont envoyées dedans.
00:26:38 :Il est là.Là, c'est que j'ai eumes données écrites en json.Là, j'ai eu mes donnéesqui sont écrites en json.Ensuite,avec load,je vais pouvoiravec load,ça lit un fichier jsonet ça va le convertiren objet python.
00:27:03 :Avec le dump et le load,on va travailleravec des fichiers.Alors qu'avant,on travaillait avecl'objet pythonet une chaîne de caractères.Là, on travailleavec l'objet pythonet un fichier.
00:27:16 :Ce qu'on va faire,c'est qu'on vanotre fichier jsonqui existe déjà.On l'a créé.Maintenant,notre exemple,on va l'ouvrir ici.R, c'est parce qu'on esten mode lecture.
00:27:29 :Donc là, jk,si tu disais que t'avais pastrop l'habitude,ici on est en mode écriture,là on est en mode lecture.Donc toujours avecun context manager.
00:27:37 :Nos données lues,donc on va faire un loadet on va charger le fichier.Et ici, on va pouvoirfaire un print.Voilà.Données lues,c'est bien celui-là.
00:27:51 :Mon print, il est où ?Donc là, j'ai bien mes donnéesqui sont lues ici.Je vais les...Je les ai printées à la fin,c'est ça.
00:28:00 :Donc on est bien surun dictionnaire,j'ai printé le typeet ici, j'ai bien récupérémes données,elles sont lues.Voilà.A la fin,ce que je fais ici,donc là, j'ai lu mon fichierque j'ai créé juste ici.
00:28:14 :Et à la fin, en fait,vous pouvez carrément chargerou créer un nouveau fichier,peu importe.J'ai chargé...Voilà.Mes données lues,excusez-moi.Les données que j'ai lues ici,donc elles sont dans ma variable,elles sont ici,données lues.
00:28:32 :Et données lues,je récupère,j'utilise la clé AGEqui était à 30.Je la modifie à 40et de nouveau,je refais un dumppour l'envoyerdans mon nouveau fichiernouvelles données JSONqui est là.
00:28:45 :Et on voit bien qu'ici,l'âge, il est bien à 40.Donc,voilà.En fait,vous pouvez, du coup,écrire dans un fichier,un fichier,vous pouvez lire un fichier,récupérer les donnéesque vous avez lues ici,donc dans la variable,données lues.
00:29:01 :Je les ai récupérées.Après, vous pouvez très bienles modifierpuis les renvoyerdans le même fichieroù là,moi,je les ai envoyéesdans un nouveau fichier.
00:29:10 :Voilà.Est-ce que je vais trop viteou est-ce que c'est bon ?Ne vous inquiétez pas,j'ai le repo...Non, pas moi.C'est bon ?
00:29:19 :Bon, s'il y en aqui connaissaient déjà,c'est normal.Ça, du coup,je sais qu'il y en aqui l'ont eu au Toza.Ils l'ont eu droit.
00:29:29 :Je n'ai pas prévude passer beaucoup de temps dessusparce que je ne sais pluss'il y avait des questions dessusmais c'est peut-êtrebon de savoir.
00:29:38 :Le module 6,vous le connaissez ?Ou pas ?Exactement.Exactement.Je ne l'utilise pasénormément, perso.Je ne l'utilise pas énormément.En fait,ça permet d'accéderà des variables,des fonctions du système.
00:29:58 :Je l'ai écrit,d'ailleurs, là-haut,dans mon exemple,les arguments à ligne de commandeet les chemins de recherchede modules.Moi, les seules foisoù je l'utilise,c'est dans...
00:30:09 :Dans Django,je l'utilise.Vous pouvez très bien,d'ailleurs, l'utiliserdans une fonctionavec 6.exitmais on va partirsur la base.Ici, par exemple,je vais avoirma fonction main.
00:30:25 :Ici, je vais printerles argumentsde ma ligne de commande.Là, ce que je vais faire,donc, il s'appellecommand6module,je vais l'appeler test,ici, en argument.
00:30:37 :Il ne fera rien de beau,mais hop.Il me dit bienen argument 0,ça va être le nomdu scriptant qui est chargé.En argument 1,ça veut dire que j'ai mis test.
00:30:49 :Même si ça ne fait rien,on s'en fichait pour l'exemple.C'est pour la culture générale,au cas où,si vous avez des questions dessussur le Toza,mais je ne m'en souviens plussi on avait fait un livre.
00:31:00 :Donc, là, ici,je vérifie biendans 6.argv.Tu peux, d'ailleurs, faire un...Je vais même le faire avant.Je vais vous le relancer.6.argv.Et on va refaireun python.
00:31:21 :J'ai mis test.Et en fait,6.argv,ici, ça va être une liste.Donc, mon premier argument,du coup,à l'index 0,le nom du fichier.
00:31:34 :Ici,le mot testque j'éclaire après.Ici, je peux avoirrécupéré la versionde mon python.Voilà.Je peux avoir la plateforme.Donc, moi, je suis sur Fedora.
00:31:48 :Ici, je peux avoirmes chemins de recherchede mes modules.Voilà.Donc, maintenant,ici, ce que je fais,on va faire un exemple ici.Donc, argv,c'était ma liste d'arguments.
00:32:03 :Elle est inférieure à 2.Eh bien, je peux faire...Alors, ici,ce n'est pas très bien dit,parce qu'il y aura,de toute façon,le nom du fichier.
00:32:12 :Mais, s'il n'y a pasd'argument en plus,on va faire un 6.exit.OK.Et on va printer, justement,le script.Je ne sais pas exécuter avec succès.
00:32:21 :Donc, du coup,python 6.Là, je n'écris rien.Hop.Et là, c'est écrit bien.Veuillez fournir au moinsun argument.Voilà.Donc, ici, je suis...
00:32:34 :Ici, le print, justement,je ne sais pas exécuter avec succès.Il ne s'est pas printé,puisqu'en fait,on est rentrédans cette condition-là.J'avais passé l'argument.
00:32:43 :Du coup, j'ai fait mon 6.exit.Et donc, vous sortez,vous arrêtez, du coup,votre programme.Voilà.Est-ce que, comme ça,ça va ?Ça paraît un peu abstrait ?
00:32:54 :Oui.Juste pour être sûr,dans le 6.exit,normalement,on ne peut pas mettre une valeurpour indiquer le code erreur.Le type d'erreur.Oui, c'est ça.
00:33:02 :Tu peux mettre...Je ne les connais pas par cœur,mais tu peux...genre, tu as le type d'erreur 1,0, je ne sais pas si il est 10,mais je sais qu'il y a le 1,par exemple.
00:33:09 :Donc, j'essaie de retrouversi on peut les avoir,le type d'erreur.Tout le temps, 6.exit.Ah, voilà.On peut peut-être les avoir,là.Est-ce qu'ils en parlent,ici, dans le...
00:33:18 :Il n'y a pas une liste rapide ?Sinon, on ne va pas...Sinon, je peux avoirun truc...Hop, là.Attendez,j'essaie d'ouvrir mon code,là.
00:33:32 :Il y en a un.Il y en a un.Il y en a un.Alors, si j'y connais.C'est des codes de sorties,que ça.
00:33:40 :Hop, là.6.x0.Une terminaison réussie.D'accord.Et il n'y a pasla liste des erreurs.Il y en a un, là.Il y en a un.
00:34:05 :Il n'y en a pas une.Il n'y en a pas une.Il n'y en a pas une.Il n'y en a pas une.Il n'y en a pas une.
00:34:10 :Qu'est-ce que c'est que ce compte ?Est-ce que je ne sais pas la liste de tout ?Je recherche tout avec Cloud.Si quelqu'un a trouvé un lien, là.
00:34:14 :6.x0.Par exemple, le 1, c'est quoi ?Il peut-être qu'il explique.Alors.OK.Donc, là, on sort avec le 0,sans erreur, sans problème.D'accord.
00:34:31 :Donc, une sortie clean.Pas de problème.0 à 7, ici.Donc, là, il y a quelques problèmes.Je crois qu'il n'y a que 0 et 1, finalement.
00:34:37 :Oui, en fait, il n'y a peut-être que 0 et 1.Je vois les trucs que tu montres.Je crois qu'il n'y a que 0 et 1, en fait.
00:34:40 :Je pense, oui.Et là, c'est pour montrer qu'il y a un problème, en fait.OK.Il n'y a que 0 et 1, alors.Moi, j'avoue que je n'ai jamais utilisé.
00:34:45 :La seule fois que j'ai utilisé,je ne l'ai jamais utilisé avec...Je laisse par défaut.Donc, forcément, 0.Du coup, c'est un peu flou.C'est un peu flou.
00:34:51 :Je vais vous montrer un exemple.Mais est-ce que déjà, ça, ça va ?L'utilité de 6.Donc, là, on est bien sur la sortie du programme.
00:34:55 :Mais juste avant,on peut voir les arguments qu'on a passé sous forme de liste.Par exemple, là, je suis en train de faire une application pour une client.
00:34:58 :Donc, le nombre de clients qui n'ont pas été utilisés,c'est à dire que le client n'a pas été utilisé,c'est à dire que le client n'a pas été utilisé,il n'a pas été utilisé depuis le début.
00:35:02 :Donc, on va pouvoir utiliser l'utilité de 6.Donc, là, on a la sortie du programme.Mais juste avant,on peut voir les arguments qu'on a passé sous forme de liste.
00:35:06 :Par exemple, là, je suis en train de faire une application pour une cliente.Bon, là, dans cette partie-là, il n'y a rien de secret.Je l'utilise.
00:35:27 :Je l'ai importé.6.Et qu'est-ce que je fais avec ?Voilà.En gros, ici, testMode,en fait, mon fichier de settings va être appelé quand je vais lancer le lingo.
00:35:43 :Je vérifie si PyTest est dans mon dictionary 6.argv.En gros, quand je fais PyTest,ici, mon testMode va être à true.Et en gros, quand mon testMode est à true,dans le formulaire de contact,si je ne dis pas de bêtises,voilà, c'est ça.
00:36:12 :Ici, donc, if not settings.testMode,c'est-à-dire que si je ne suis pas en mode test,je vais avoir un récapCHA.Par contre, en gros, si testMode est à true,ce champ-là n'existera pas.
00:36:31 :En gros, c'est pour mes tests.Quand je fais des tests sur les formulaires,ça me désactive le champ.Sinon, mes tests ne passent pasparce qu'ils sont bloqués par le champ récapCHA.
00:36:42 :Ça me permet de le désactiver pour les tests.Voilà.Vu que je lance mes tests avec PyTest,Arc-V 0, ici, ça va être PyTest.Du coup, je peux lancer mes tests tranquillessans m'embêter avec le récapCHA.
00:36:59 :Ça va ou c'est assez concret ou pas ?C'est bon.Je reviens ici.En gros, c'est comme ça que j'utilise Sys.Après, je n'ai jamais eu à l'utiliser autrement pour l'instant.
00:37:19 :Est-ce qu'on parle du module CSV,s'il y a des questions dessus ?J'ai écrit beaucoup de choses.Il y en a qui ont utilisé le module CSV ou pas ?
00:37:32 :Vite fait.C'est pareil, c'est un attrif à Python.AbbaWallet, par exemple, tu l'as déjà utilisé.Pourquoi, toi ?Juste pour les fichiers CSV.Manipuler les fichiers CSV juste pour tester.
00:37:50 :C'était un exercice, je pense, si je me rappelle bien.Ouais.Moi, j'ai déjà utilisé, par exemple, dans un...Je ne sais pas si je l'ai encore.
00:38:01 :Ça peut être pour en parler.Si je l'ai, custom user preview,CSV updater.Ici, mon CSV, je l'importe et j'utilise ici.Je fais pas mal de choses.
00:38:14 :En gros, ça me permettait de mettre à jour les données de clientspar rapport à un fichier CSV que je mettais à la base de données.
00:38:22 :En gros, c'est peut-être utile, CSV.Très utile, même.C'est natif à Python.C'est pour ça que j'en parle.Ça pourrait très bien tomber au Tosa.
00:38:32 :Ici, j'ai vraiment mes données.Quand je fais un with open ici,c'est que je vais ouvrir mon fichier SV.En fait, il faut faire un CSV et un writer.
00:38:43 :Là, vous l'avez importé ici.Vous créez votre objet writer ici.Ensuite, avec votre objet,vous faites un write-froze et vous écrivez les données dedans.Toutes mes données sont envoyées dans le fichier.
00:38:58 :C'est mon nouveau CSV.Il est où ?Je l'ai pas lancé.Je vais le lancer.On le crée.Et voilà, j'ai bien mes données dans mon CSV.
00:39:08 :Ici, vous pouvez très bien lirece qu'il y a dans votre fichier CSV.Là, j'étais bien en mode écriture.J'y ai fait tout à l'heure.
00:39:19 :Je me disais que je n'étais pas habitué.Là, c'est un peu pareil.J'ai un context manager pour mes fichiers en mode écriture.Ici, je suis en mode lecture.
00:39:29 :Là, je vais prendre mon fichier.Je vais faire un CSV.reader.Je vais mettre mon fichier dedans.Pour chaque ligne, je vais la printer.Là, si je lance, elle est bien printée.
00:39:41 :C'est celle-là.Celle-là, c'est une autre.Là, je suis là.Je ne sais pas s'il y a des questions qui peuvent tomber,mais ça existe aussi.
00:39:55 :J'en ai déjà eu besoin pour le boulot, je crois.Ici, pareil, je refais un open en lecture.Vous pouvez faire un CSV pour index reader.
00:40:04 :Là, j'ai créé mon objet index reader.Ça va utiliser la première ligne comme en tête.Vous pouvez accéder à chaque fois aux éléments par des clés.
00:40:18 :Je vous remontre l'attaque.Nom, Alice, H30.C'est bien ce que j'ai fait ici.J'accède bien aux éléments par les clés.Juste si je fais un petit print.
00:40:32 :Non, ce sera juste faire un truc.Forcément, si on a besoin d'index reader, mais...Je vais vérifier un truc.C'est bien ce que j'ai fait.
00:40:55 :Je vais juste vérifier un truc.Excusez-moi.Voilà pour CSV.En soi, ce n'est pas très compliqué.Vous avez les données, vous pouvez les écrire, les lire.
00:41:09 :Vous pouvez avoir un object index reader.Ça va, ou vous voulez qu'on voit autre chose avec ?OK.C'est la découverte de module pour ceux qui ne connaissaient pas.
00:41:24 :Est-ce que vous savez de manière...Quelle librairie native à Python est utilisée pour lire des URL ?Personne, du coup ?Je l'ai oublié.Pour lire les URL.
00:41:54 :HTTP parse ou... Non.Alors.J'ai oublié le nom.Ouest ou parse, c'est pour lire les fichiers.Stéphane, c'est ça.En fait, tout le monde utilise Request.
00:42:10 :Mais il faut savoir qu'il existe URL libre.Pour...Qui est native à Python.Donc c'est pareil.Petite question qui peut tomber aux tas.Quelle librairie...
00:42:24 :J'ai un doute, je ne sais plus si je l'ai eue.Quelle librairie native à Python est utilisée pour les URL ?Donc il y a URL libre.
00:42:34 :Mais aujourd'hui, il y a plein de monde qui utilise Request.En gros, avec URL libre.Donc vous avez par exemple...Ici, votre URL.Je l'ai fait sous forme de fonction.
00:42:48 :Je l'ai découpé comme ça.Et on va afficher ce qu'il y a dans notre...Dans le contenu, en fait.Dans notre réponse.Excusez-moi.Donc là, je passe par url.request.urlopen.
00:43:03 :J'ai envoyé mon URL.J'ai mon alias réponse.Et ici...Je vais faire un response.read.Et ici, je vais printer les 500 premiers caractères.Excusez-moi.Donc par exemple, je n'ai pas d'autre print.
00:43:20 :Ça, je ne vais pas le printer.Hop.Donc là, j'ai lu ce qu'il y avait dans mon URL.Donc là, c'était sur le site docstring.
00:43:30 :Voilà.Donc là, dans mon URL, il y a ça.Formation Python français.Maintenant...Hop.Par url, en fait, ici, ça sert à...Je vais vous montrer.
00:43:46 :C'est par url.Euh...Il est là.Vous pouvez avoir, en gros,s'il veut acheter TPS,ici, avoir le domaine.Et quand vous faites un sham et netlock,vous pouvez récupérer ces informations-là.
00:44:05 :Il y a encore d'autres attributs que vous pouvez avoir.Mais je ne pense pas qu'on vous posera des questions là-dessus au Toza.Mais comme ça, vous savez que ça exhibe.
00:44:13 :Voilà.Vous pouvez télécharger des fichiers.Donc là, j'ai le lien vers un...vers une image.Ici,j'utilise request.urlretrieve.J'envoie mon URL,le nom que je vais avoir pour mon fichier.
00:44:36 :Et vous pouvez utiliser, du coup,ici, en parallèle, deux variables.Ça va vous retourner, justement,le nom du fichier et le headers.Et si je fais ça...
00:44:48 :Donc là, je n'ai rien.Si je fais ça...Je ne l'ai pas printé.Excusez-moi, on va recommencer.On va print le...Keyboard.log file.Et là, j'ai mon fichier.
00:45:04 :J'ai des photos de mon visage qui sont apparues.Je peux le supprimer.Donc là, après, vous pouvez vous amuser à...Ah bah, je les ai...
00:45:18 :Excusez-moi, je les ai...Voilà, vous pouvez printer le headers,le nom du fichier.Je ne l'ai pas printé, ça.Je ne sais plus.Je vais télécharger...
00:45:27 :Ah, c'est celui-là, voilà.Je l'ai printé ici.Vous pouvez printer le nom du fichier.Après, vous avez le headers, en fait, dans la requête.Donc, voilà.
00:45:35 :Bon, il n'y a peut-être pas trop à savoir, là-dessus.C'est vraiment pour la...Moi, perso, quand j'ai bossé le Tosa,j'ai appris pas mal de choses comme ça,qui existent à url, machin.
00:45:44 :Et en fait, plus vous apprenez de choses qui sont native à Python,et plus vous avez de chances de répondre à ces questions.Parce qu'il y a 500 questions sur tout Python,ce qui est native à Python.
00:45:52 :Pas de livrairie externe, mais...Mais ça, c'est une question qui me semble que je l'ai eue.Il me semble.Ça va ou pas ?Je n'ai pas vu.
00:46:03 :Si, là. Est-ce que les méthodes POST, GET et PUT ?Eh bien, je ne sais pas.Je vais regarder parce que je n'utilise pas du tout cette livrairie.
00:46:13 :J'imagine que oui.Moi, perso, j'utilise... Je vais vous la montrer.C'est celle-là. Ouais.Moi, avec Python, j'utilise ça.J'aime bien.De toute façon, elle est super connue.
00:46:33 :Je pense que c'est la plus connue pour travailler avec les URL.Cette bibliothèque-là.Ouais, parce qu'il y a BEAUTIFULSOUP.Je crois que tout le monde a l'air fan.
00:46:44 :T'as dit quoi ?BEAUTIFULSOUP.Ah, après BEAUTIFULSOUP, c'est connu aussi.Les deux ensemble, ça marche nickel.Ouais.Je regardais URLlib.Il n'y a pas de méthode spécifique.
00:47:05 :Pour les scrappers.Ouais, pour les scrappers, ouais.OK, ouais.Non, apparemment, pour faire des requests,ça n'a pas l'air super pratique.Celui-là.Bon, moi, je te conseille de rester sur requests si tu connais.
00:47:33 :Oui, oui, oui.Regarde, j'ai fait un request, ouais.Avec sa formation, ouais.C'est plus pour vraiment la voile.Ouais, je comprends, je comprends.Je comprends, merci.
00:47:44 :Je ne sais pas quoi chercher à la base quand tu les fais,le request et le post et le put.Mais ouais.C'est un certain lien générique, apparemment.
00:47:55 :OK.Mais je me demande s'il ne faut pas le combiner à requests.D'ailleurs, ça me paraît bizarre.Je ne sais pas.J'ai lu une réponse, je n'étais pas convaincu.
00:48:03 :Il faudrait que je regarde de plus près.Attends, j'ai un truc.C'est quoi, c'est URLlib, méthode, post.Je vais me regarder ici.Qu'est-ce qu'ils disent ?
00:48:23 :Ouais, si, il y a moyen.Alors, attends.Il y en a qui veulent faire apparemment des...Qui veulent faire une requête post avec URLlib, mais...
00:48:39 :Comment tu devrais faire ?Yoga, c'est comme ça ?Ouais, enfin, je trouve que ça n'a pas l'air...Ouais, si, ça se fait, ça se fait.
00:48:47 :Mais je trouve que ça me paraît moins naturel qu'avec Request, en fait.Ouais, ça me fait compliquer, ça.Ouais, parce que...Ouais.Sur le code, sûrement.
00:48:58 :Ouais, ouais, ça me paraît pas...Ouais, je vois que l'écrit ici pour faire ta requête post, en fait, t'es ici.OK, bon.Il n'y a pas non plus 10 000 lignes, mais ouais, je ne sais pas.
00:49:08 :C'est peut-être que là, j'ai l'habitude d'écrire quoi, c'est que du coup,ça me paraît moins naturel avec celle-là, mais ça se fait.OK, merci.Bon, voilà, comme ça...
00:49:16 :Même moi, URLlib, je ne l'ai jamais vraiment utilisé.Je l'ai plus découvert en détail, là, quand j'ai préparé le mentorat.Alors, on va finir par ça.
00:49:29 :Vous l'utilisez, une e-test ou pas ?C'est un peu malheureux.Oui, moi, beaucoup e-test, hein.Beaucoup e-test.Toi, celui-là, tu l'utilises ?E-test, ouais.Moi, je viens de les connaître en suivant la formation.
00:49:44 :J'ai juste commencé.Je viens de commencer avec.OK.Celui-là, toi, c'est pas e-test ou une test, tu m'as dit ?Une test, une test.Mais j'ai vu pas e-test, mais c'est beau.
00:49:55 :Mais c'est e-test que moi, je...Ouais.Alors, ouais.Et Stéphane, tu m'as dit ?Un peu, je sais qu'il faut que je m'y mette.OK.
00:50:05 :Perso, une e-test, je ne l'utilise pas du tout.Bon, je l'ai utilisée.Attends, je vais chercher un verre d'eau tout de suite.J'arrête tout de suite.
00:50:15 :OK.OK.Excusez-moi.Une e-test, moi, perso, c'est pareil.C'est une hybride qui est native à Python.Donc, il faut la connaître pour le Toza,et même de manière générale.
00:50:32 :Enfin, en général, je dis pour le Toza,mais en fait, c'est bien de connaître les choses.Il faut connaître les choses pour ses compétences en Python.
00:50:41 :Mais quand je dis pour le Toza,vous comprenez que c'est une question de Toza.J'utilise ça à chaque fois.Une e-test, elle est à connaître pour les tests pour le Toza.
00:50:52 :Si vous avez des questions.Perso, par exemple, quand j'utilisais Django,par défaut, avec Django, le framework de tests,j'utilisais une e-test.Mais il faut savoir qu'il existe aussi, pour les tests,avant de rentrer en détail, PyTest,qui est maintenant extrêmement connu.
00:51:13 :Et je sais que moi, par exemple,depuis que j'ai découvert PyTest,je n'utilise plus du tout une e-test.Voilà.Ils ont même créé la version PyTest.
00:51:24 :Django, en plus.Moi, perso, j'utilise PyTest pour mes programmes Django.Mais il faut savoir qu'une e-test existe,et que vous pouvez tester tous vos programmes.
00:51:36 :Là, je parlais de Django,parce que moi, j'utilise surtout PyTest avec Django.Mais sinon, après, vous pouvez l'utiliser pour tout.Là, j'ai des exemples.Ici, j'ai une fonction de base, addNumbers,qui fait juste un a plus b.
00:51:51 :Est-ce que je... Non, je ne vais pas...Non, je ne vais pas le faire comme ça.Du coup, j'ai créé ici une classe de test, addNumbers.
00:52:01 :Donc, j'utilise testCase de l'e-test.Et donc, ici, je vais avoir tous mes tests.Donc là, je vais faire un assertTable.Donc, 2 plus 3, c'est bien égal à 5.
00:52:12 :Moins 1 plus 1, c'est bien égal à 0.Et 0 plus 0, c'est bien égal à 0.Tout ça, c'est bête.Mais si je lance mon test,je peux peut-être commenter le reste.
00:52:24 :Hop là.Je vais commenter le reste.Donc, en gros, après, pour lancer vos tests avec Unitest,excusez-moi, vous faites...Une test, je crois que ça suffit.
00:52:37 :Je ne vous demande jamais que j'ai un doute.C'est ça.Donc là, en faisant Python m.unitest,j'ai lancé ici ma classe de test.Donc, les conventions,c'est de mon fichier de test WishUnitest.
00:52:56 :Je vais vous montrer quelque chose.Le fichier, je vais l'appeler juste WishUnitest.Et je vais recommencer, je vais relancer mon test.Il n'y a pas de test qui se lance.
00:53:11 :Mon test ne s'est pas lancé.Donc, en fait, il faut que votre fichier, qui est où d'ailleurs ?Je ne sais plus où je l'ai mis.
00:53:17 :Oui, c'est quelque chose là.Ici, il faut bien qu'il commence...Par test.Donc là, c'est la première chose.Il faut qu'il commence par test, mon fichier.
00:53:32 :Donc là, on voit que j'ai bien un test qui s'est lancé,qui est OK.Ici, vous allez avoir votre classe,vous allez créer le test.
00:53:41 :Donc, test AddNumbers.Vous commencez par test, ici, votre classe.Et à chaque fois que vous allez avoir vos méthodes,vous allez mettre vos tests.Donc là, ici, j'ai mon test AddNumbers.
00:53:51 :Je commence toujours ici par test.Donc, voilà pour les bases.Ensuite, je vais décommenter tout ça.On voit différentes petites choses avec.J'ai créé une autre classe de test.
00:54:10 :Est-ce que je commence par là ?OK, comme ça, ça permet de voir l'arrière-archer.Bon, là, en gros, je ne fais pas de test d'acertespour vérifier des choses,mais c'est juste pour vous montrercomment les choses vont s'exécuter.
00:54:23 :Donc, je vais pour l'instant commenter ça.Même commenter celui-là, d'ailleurs.Donc là, je vais vous le lancer.Donc, j'ai bien la setupClass, setup.OK, alors, c'est parti.
00:54:44 :Ici, quand vous allez avoir votre classe de test,vous pouvez avoir ici votre classMéthode.Et ensuite, vous allez avoir votre méthode setupClass.Donc là, c'est des conventions à utiliser avec Unitest.
00:54:56 :Ici, en fait, la setupClass, ça va être justementune méthode qui va être exécutée une seule foisavant tous les tests.Ici, vous allez avoir une autre méthode de classequi va être la teardownClass.
00:55:12 :Elle va s'exécuter une fois après tous les tests.Donc là, on est sur la setupClass.Mais si vous êtes juste sur la setupou juste sur la teardown,la teardown, elles vont s'exécuter avant chaque test.
00:55:23 :Et là, ici, elles vont s'exécuter après chaque test.Donc, c'est ce que j'ai fait.Une fois avant les tests.Donc là, la setup, elle s'exécute.
00:55:30 :Un test, le teardown.Le setup, elle s'exécute.Le teardown, ainsi de suite.Et là, on voit bien que mes setupClasset mes teardownClass s'exécutent chacun une fois.
00:55:40 :Une au début.Donc, setup au début.Et le teardownClass à la fin.Est-ce que ça va pour l'ordre...J'appelle ça l'ordre des méthodes, en fait.
00:55:49 :L'ordre des méthodes.Est-ce que c'est bon ?Oui.J'ai une petite question bête.Oui.Pourquoi devant le teardown et le setup,il te rajoute un point ?
00:55:59 :Attends.Dans le print.Dans le print.Dans le terminal.Parce que j'ai...Attends.Devant le quoi, tu dis ?Devant le setup2.Le deuxième setup.
00:56:15 :En ligne 5.Dans ton print.Comme tel qu'il est affiché, la ligne 5.Dans le terminal.Oui, oui, oui.Le 2, oui.Et le 6, le teardownClass.
00:56:24 :Est-ce que j'ai rajouté un point ?Non.C'est marrant.Je n'ai même pas vu pourquoi c'était ça.Avant le setup, le 2 ici.Là, il ne le fait pas.
00:56:34 :Là, il le fait.Alors, la bonne question,est-ce que c'est un problème qui est dû...Enfin, un problème.Est-ce que c'est normal ?Est-ce que c'est dû au terminal ?
00:56:43 :Bonne question.Je me demandais s'il y avait une raison particulière.Moi, je pense.Mais...Pour moi, non.Je n'ai jamais...En même temps, je ne fais jamais de print comme ça dans mes tests, d'ailleurs.
00:56:55 :Mais là, c'est juste pour l'exemple.C'est marrant.Je regarde.Tiens, je vais essayer de me poser la question.Je regarderai.Parce que comme ça...Comme ça, ce n'est pas évident.
00:57:07 :J'ai mon teardown après chaque test.Mon setup.Et j'ai le test 2.Je n'ai pas de point à la fin.Je n'ai pas de point nulle part.
00:57:17 :Le point, à chaque fois, il est juste après chaque nombre.Non, je ne sais pas.Bonne question.Désolé, je ne peux pas te répondre comme ça.
00:57:25 :Bon, tant pis.Je ne sais pas si c'est dû au terminal ou à un comportement.Je regarderai.Si je trouve.Si je trouve...Je vous dirai.
00:57:36 :Bon, du coup, là, on a juste testé un peu l'ordre des...Ici, des méthodes.Et là, maintenant, si je viens sur toutes mes...Hop là.
00:57:50 :Ici, je vais avoir, par exemple, une classe qu'on appelle Calculator.Donc, on va avoir des A de Subtract, Multiplier, Divide.Et ici, par exemple, dans le Setup.
00:58:00 :Donc là, c'est un Setup qui n'est pas un Setup class.C'est bien un Setup.C'est que ça va s'exécuter avant chaque test.Et donc, chaque méthode de test va avoir sa propre instance de Calculator, ici.
00:58:13 :Alors, ici, je suis d'accord qu'il n'y a pas grand intérêt.Mais après, si j'en ai besoin de tout le Django, je vous le montrerai.Ensuite, par exemple, je peux lancer tous mes tests.
00:58:22 :Et donc, pour tous mes tests, je vais faire un assertEqual.Donc, Calc, Add.Donc, ici, c'est bien mon instance de Calc.Et Add, c'est le fait de faire A plus B.
00:58:33 :Donc, ici, on fait du égal.Et donc, 3 plus 5 va être égal à 8.2 plus 2 n'est pas égal à 4.Donc, c'est assertEqual, ici.
00:58:43 :Là, ici, c'est assertNotEqual.Donc, ici, dans le test, on vérifie l'égalité.Là, on vérifie que ce n'est pas égal.Vous pouvez vérifier si c'est vrai ou si c'est faux.
00:58:52 :Je vous montre plusieurs asserts.AssertSquare, donc, si c'est plus grand ou si c'est plus petit.Ça, oui, j'en ai mis plusieurs.L'assertIsInstance.Voilà.Donc, vous pouvez vérifier que la valeur qui est retournée, c'est un certain type.
00:59:14 :Excusez-moi.Vérifier si ce n'est pas None.Voilà.Vous pouvez aussi vérifier s'il y a des éléments, par exemple, dans une liste.Donc, vous faites un assertIn.
00:59:23 :Donc, là, mon 2 fois 3, ça fait bien 6.Et 6 est bien dans la liste 4, 5, 6.C'est des exemples bidons, mais c'est pour un peu tous les asserts qu'on peut avoir.
00:59:32 :Pour avoir des assertsNotIn, on vérifie ici que notre résultat n'est pas dans cette liste.Intéressant à connaître, surtout pour le test,c'est qu'il y a des asserts qui ne sont pas dans la liste.
00:59:45 :Intéressant à connaître, surtout pour ceux qui font du Django,enfin, surtout, aussi, et notamment pour ceux qui font du Django, je veux dire,le assertRaise.
00:59:53 :Donc, en fait, ici, on peut vérifier qu'il y a une valeur,une exception qui est levée.Par exemple, si vous essayez de diviser 1 par 0,eh bien, Python va vous retourner un valueError.
01:00:11 :Donc là, on vérifie bien qu'il y a un valueError qui est levéquand on fait 1 divisé par 0.Donc là, par exemple, si je lance tous mes tests...
01:00:20 :Voilà, j'ai bien mes 8 tests qui ont été lancés avec succès.Et maintenant que tu m'as parlé de ce...Ah, le point là, il y a plusieurs points.
01:00:32 :Je crois que je sais.Là, devant le 1, avant tous les tests.Ok, alors, attends.Alors, je vais peut-être pouvoir l'expliquer.Voilà.Il y en a qui ont compris ou pas ce qui s'est passé ?
01:00:58 :Pourquoi, ici, il n'y a plus de pointe là ?Il y a plein de points ici, devant le 1.Je pense que c'est le teardown,la méthode qu'on appelle juste avant chaque test.
01:01:11 :En fait, pour moi, quand ça tourne comme ça,c'est que c'est le temps qu'il est en train de calculer.Et dès qu'il calcule, ça laisse un point.
01:01:21 :Et du coup, là, il y a un petit temps de calcul ici.Là, il y a un petit temps de calcul.Parce que si je laissais tous mes...
01:01:27 :Alors là, je vais faire exprès de laisser tous mes...de laisser tout mon code.Normalement, il va, au début, réfléchir plus longtemps, entre guillemets.Longtemps, c'est un grand mot, mais...
01:01:39 :Je vais le remettre comme ça.Et s'il le relance, je pense qu'il y aura plein de points devant ici.Je vais l'essayer.Ouais, il y a plus de points.
01:01:50 :C'est le temps qu'il a pour réfléchir, c'est ça, en gros.Bon, voilà.C'est comme elle disait, c'est le temps de choix.C'est ça.Mais je ne sais plus si j'ai...
01:02:03 :Alors, je ne sais pas si mon projet, là...Parce que là, du coup, juste pour ce qu'on a vu, ça va ou pas, les tests ?
01:02:08 :En gros, ça va être des asserts.On va vérifier certaines choses.Voilà, ici, c'est un entier.Là, c'est plus grand, c'est plus petit.C'est bon, du coup ?
01:02:18 :Ça revient.OK.J'avais un projet où...Un des tout premiers vrais projets...Si je le retrouve...Alors, on ne se moque pas parce que j'étais...
01:02:32 :Je débutais...Je débutais, et de tête, j'avais fait plein, plein de testsavec, justement, le client Django.C'est testcase.Voilà.Je regarde si je trouve quelque chose.
01:02:49 :Voilà.En fait, le framework Django, là, si je remonte le code source,il se base sur le testcase de unitest.Je vais accepter.Du coup, le test de Django se base sur unitest.
01:03:08 :Mais là, par exemple, si je lance les tests,on va voir, justement, c'est pour vous montrer...Alors, attendez, s'il est là...OK.Je crois que les tests, comme ça...
01:03:24 :Voilà, quand je dis qu'il réfléchit, vous voyez, là, à gauche,tous les petits points.Donc, en fait, c'est ça que j'ai passé tout à l'heure.
01:03:34 :Bon, là, j'ai tellement de tests, et je ne sais même pas s'ils sont bien utilisés.C'était un de mes tout premiers projets.Du coup, j'ai des tests dans tous les sens,et je ne suis même pas si optimisé que mes tests,s'ils prennent 50 secondes, je crois, à se faire.
01:03:45 :Je vais finir par les tests, justement.C'était déjà sur là, je n'ai pas fait gaffe.Donc, là, on a vu, justement...C'est bien, on va voir tout ce que je voulais voir.
01:03:56 :On a vu Unitest, ici.Mais il faut savoir qu'il existe, du coup...Donc, ça, j'ai vu que pas mal connaissaient.Il existe PyTest.Et, en fait, perso, moi, je suis...
01:04:12 :Ben, Cécile, c'est plutôt PyTest.Ben, moi aussi, je suis plutôt PyTest.Et, en fait, PyTest, ça marche un peu différemment.Vous avez des fixtures, donc ça a des choses que vous pouvez réutiliser.
01:04:22 :Et puis, vous allez faire vos tests.Vous pouvez faire forme de classe avec PyTest aussi, peut-être.Mais, moi, j'utilise des fonctions de test, en fait, par exemple.
01:04:30 :Voilà, c'est un peu fait différemment, mais c'est pareil.Là, par exemple, j'ai mes asserts.Donc, là, j'ai utilisé si l'utilisateur, c'est bien super user.S'il est bien du staff.
01:04:48 :Je vous l'ai montré tout à l'heure.Le valueError, je vérifie bien qu'il y ait une exception de levéequand j'essaye de créer l'utilisateur, ici.Voilà.
01:05:00 :Donc, il faut savoir qu'il y a aussi PyTest qui existe.Mais, ici, pour l'autosort, on parle d'unitest,parce que c'est natif à Python.Voilà.Est-ce que c'est bon pour tout le monde ou pas ?
01:05:18 :Ouais, mec.Ouais.C'était pas trop chiant ?J'hésite pas à me le dire, des fois, si les sessions paraissent un peu trop longues,vous aurez préféré voir autre chose ?
01:05:28 :Je suis ouvert à la critique.Non, je trouve ça intéressant.OK.C'est gentil, en tout cas.Cool.Cool.Merci pour le piqueur, aussi.Tu sais « cool » en arabe, c'est quoi ?
01:05:48 :Pardon ?« Cool » en arabe, tu sais ce que c'est ?Non, c'est moi.C'est « mange ».C'est « mange » ?Ouais, ouais.
01:05:55 :OK.Merci, je savais pas.OK, écoutez, s'il n'y a pas de questions,n'hésitez pas s'il y a des questions.Et même pour juste, s'il y en a qui sont arrivées tout à l'heure,j'ai dit au début, si vous avez des questions sur autre chose,et notamment, pour moi, ma spécialité, c'est le langot,
01:06:12 :n'hésitez pas, en fin de session, en début de session,en milieu, s'il y a besoin, mais il n'y a aucun souci.Et si jamais il n'y a pas de questions,je peux vous souhaiter une bonne soirée, du coup.
Aucune occurrence trouvée pour « ».
00:02:22
Exercice TOSA difficile : déterminer les relations de parenté dans un graphe
00:05:56
Explication de l'exercice - remonter une arborescence
00:12:00
Retour sur l'exercice et stratégies
00:14:00
Explication de la fonction abs
00:16:22
Module Itertools et ses fonctions
00:19:00
Différences entre dump / dumps et load / loads dans le module JSON
00:29:39
Présentation du module sys
00:34:23
Codes de sortie possibles de sys.exit
00:35:26
Le module sys dans un contexte Django et Pytest
00:37:24
Présentation du module csv
00:42:22
Présentation de urllib
00:50:20
Introduction et utilisation de unittest
Bravo, tu es prêt à passer à la suite