Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:00 :On va continuer notre refactoring, cette fois-ci en enlevant un petit peu la logique qui pourl'instant est beaucoup contenue à l'intérieur du main ici. Vous voyez dans cette fonction main
00:00:09 :qui n'est pas très explicite, c'est normalement seulement le point d'entrée du script, eh bienon a beaucoup de choses qui se passent. Donc là pour ce qui est de récupérer les arguments en
00:00:17 :ligne de commande, ça peut rester ici. On verra éventuellement si on a vraiment beaucoup deconfigurations, on pourrait faire une classe ou mettre tout ça dans une fonction séparée,mais ça ça me dérange pas trop. Pareil pour la lecture de l'environnement. Par contre tout
00:00:30 :ce qui est ici création de notre session avec également tout ce qui est gestion des données,donc là vous voyez qu'on a vraiment cette logique principale de la boucle qui se retrouve dans cemain, eh bien c'est pas vraiment efficace de l'avoir ici si jamais on voulait faire des tests
00:00:42 :par exemple. Donc je vais essayer de sortir ça de la fonction main et on avait également àl'intérieur de cette classe cinéma session la récupération des données des horaires de cinéma.
00:00:52 :Donc là on a tout ce qui concerne l'objet request, donc ça c'est bien que ce soit àl'intérieur de cette classe, le wait for delay qui permettait d'avoir un délai entre chaque requête,le get qui est juste un wrapper autour du get qui me permet de changer la encoding,
00:01:05 :donc ça aussi, et d'avoir le wait for delay justement qui permet cet espace entre lesrequêtes. Par contre le get movie schedule il n'a pas grand chose à faire ici, donc là encore je
00:01:14 :veux séparer ça pour le sortir dans une classe séparée qui va donc être responsable de récupérerles horaires des films et également les métadonnées comme on le fait actuellement dansla fonction main. Donc je vais dire tout ça à l'IA, ici je vais démarrer un prompt. En ce moment
00:01:28 :il y a beaucoup de logique du code qui se passe à l'intérieur de la fonction main, j'aimerais bienextraire cette logique dans une classe séparée et également séparer la logique de l'objetrequest qui pour l'instant est dans la classe cinéma session pour avoir une classe qui s'appellepar exemple session manager qui gère tout ce qui concerne les requêtes avec la librairie
00:01:49 :request et une classe séparée qui soit responsable uniquement de la récupération des données. Doncc'est pas mal, je vais juste ici lui mettre un S majuscule pour être sûr qu'il l'écrive biencomme ça et qu'on respecte la pep 8, sinon voilà le request il a toujours du mal, il oublie le S mais
00:02:07 :c'est pas encore très gras, je pense qu'il arrivera à comprendre. Et voilà donc je pense que c'estbon on va faire submit et on va le laisser faire cette réorganisation du code et ensuite on vaprobablement repasser un petit peu derrière à moins qu'il fasse ça très très bien mais là j'ai
00:02:21 :quelques petits doutes là dessus parce qu'il se peut comme on l'a vu juste précédemment qu'il amis beaucoup de logique un peu à différents endroits donc il n'était pas très très bienorganisé là dessus donc c'est pour ça qu'on essaye de le réorienter ici en le laissant faire quand
00:02:34 :même le gros du travail puisque ça nous permet d'éviter d'avoir à écrire et à restructurer toutça nous même ça va plus vite. Donc là il commence avec une classe session manager ça va être
00:02:43 :ressemblant en fait à ce qu'on avait il met donc toujours la logique des proxys du header ici avecle request delay donc ça c'est parfait avec les proxys ici le wait for delay et le get donc c'estexactement ce que je lui ai demandé d'avoir juste cette logique à l'intérieur d'une classe session
00:02:59 :manager donc ça c'est parfait ensuite il nous crée une classe cinéma data fetcher qui va récupérerdonc cet objet session manager on va avoir une url de base c'est parfait d'ailleurs là je crois quece n'est pas la bonne url si je me souviens bien c'est slash film mais on va voir on va tester notre
00:03:14 :script après donc on a bien le get movie schedule il a déplacé ici cette fonction qui était àl'intérieur de la fonction qui servait à la gestion de la session donc ça c'est bien il l'a séparé eton a une autre fonction donc ça c'est tout ce qui était à l'intérieur du main qui se retrouve
00:03:30 :également dans sa propre fonction à l'intérieur de notre session. A voir d'ailleurs là si on avraiment besoin d'une classe c'était bien pour séparer les choses après peut-être qu'on pourraitfaire ça uniquement avec deux fonctions là vous voyez que dans le init on n'a pas grand chose ona juste le session manager et le base url donc là c'est une question de choix je pense que ça
00:03:48 :peut être bien de le penser comme ça directement parce qu'on pourra avoir d'autres choses et onpourra avoir différents data fetcher en fonction de différents sites qui sera un petit peu différentet donc on pourra avoir des options qui soient différentes en fonction des instances qu'on créeà partir de cette classe pour l'instant il n'y a pas grand chose qui justifie la création d'une
00:04:05 :classe mais on peut le laisser comme ça pour la suite si on voulait améliorer ce script. Donc là ilfait pas mal de choses encore dans une seule fonction pourrait peut-être aussi séparer ça enplusieurs fonctions parce que là il va à la fois récupérer tous les films et les métadonnées et les
00:04:19 :schedules donc on pourrait faire ça en deux ou trois fonctions séparées éventuellement et si jeregarde là on a bien donc notre fonction alors vous voyez qu'il a commencé également à séparer çadans différents fichiers donc on a un nouveau fichier cinéma data fetcher on a un autre fichier
00:04:33 :session manager donc il met les classes à chaque fois dans des fichiers différents et on a un fichierdans lequel il a commencé à mettre des utilitaires donc là on a un fichier qui s'appelle date utilspeut-être qu'on pourra juste l'appeler utils et mettre d'autres utilitaires dedans là il est
00:04:47 :allé très spécifique avec quelque chose spécifiquement pour les dates et on a donc uneseule fonction à l'intérieur de ça là encore c'est bien de séparer les choses à ce niveau dès ledébut comme ça après si on a d'autres utilitaires pour les dates on sait précisément où les mettre
00:04:59 :donc il a bien créé donc une nouvelle classe une deuxième classe ici le date utils et aprèsj'imagine qu'il a voilà tout réorienté tout réorganisé à l'intérieur du main.py pour utiliser
00:05:10 :ces nouvelles classes donc on a une séparation plus claire des responsabilités c'est ce queje voulais un code plus facile à tester c'est exactement ce que je voulais et une meilleuremaintenabilité et réutilisabilité des components donc exactement ce que je voulais je vais accepteron va tester que ça fonctionne bien encore parce que comme je vous avais dit je pense que l'url
00:05:26 :n'est peut-être plus la bonne donc on regarde dans le main vous voyez qu'on a enlevé beaucoupde logique qui était à l'intérieur du main ici pour la déporter dans les fichiers secondairespar exemple le data fetcher ici ou le session manager donc on va relancer notre main pourvérifier que tout fonctionne je vais aller voir si j'ai toujours mon slice donc qui doit être
00:05:44 :maintenant dans le fetch all movies on doit avoir notre boucle ici donc il a bien enlevé le sliceou je l'avais enlevé je crois donc on va refaire un test complet sur tous les films pour voir siça fonctionne bien je relance mon script donc le script main.py et on va voir si ça fonctionne et
00:06:00 :ça a l'air de bien fonctionner on a peut-être juste voilà vous voyez là qu'on a des caractèresspéciaux donc à voir peut-être qu'il a enlevé notre notre encoding en latin mais je pense queça va là on a bien ici les caractères qui sont correctement affichés donc à voir ici on a tout
00:06:16 :le debug donc on pourrait également repasser notre logger en info pour avoir un petit peu moins dedétails là on va voir on va descendre et là je vois je voyais un 443 je pensais qu'on avait uneerreur mais en fait non on a bien un statut 200 donc ça a l'air bon et le fichier est créé donc je
00:06:31 :pense que c'est bon également je descends je regarde ici on va regarder au niveau de l'encodage ça avaitl'air bon sur ce que j'ai vu là j'ai vu des caractères spéciaux on va retourner au niveau dumovie ici et on va en déplier quelques-uns alors là ici on a des problèmes avec les caractères
00:06:46 :spéciaux donc je vais retourner voir dans mon session manager et je pense que donc il doit faireun encodage en latin 1 effectivement pour toutes les requêtes donc là effectivement ce n'est pasce qu'on veut finalement parce que pour la première requête ça pose des problèmes doncpour la première requête il faudrait probablement le laisser sans cet encodage et pour la deuxième
00:07:04 :on avait un problème donc là je vais rajouter un paramètre ici encoding et par défaut on vale mettre en utf-8 on peut aussi mettre utf-8 comme ça si je me trompe pas je crois que lesdeux fonctionnent et on va lui passer le encoding ici et ici sur le get je vais faire commande b pour
00:07:19 :voir où est-ce qu'il est utilisé donc on a dans le cinéma data feature effectivement deux utilisationsdu get donc la première qui est pour récupérer le movie schedule donc celle là on voulait bienle encoding en latin 1 donc je vais le rajouter ici il me le propose d'ailleurs encoding
00:07:34 :égal latin 1 et par contre pour le deuxième donc celui ci là on va le laisser en utf-8 donc c'estla valeur par défaut donc on va juste rien mettre ici on va le laisser avec le get normalje vais avant ça pour ne pas avoir trop de debug remettre mon logging ici en info je sauvegarde et
00:07:50 :je relance et effectivement ça fonctionne bien donc là on retrouve bien nos caractères qui sontcorrectement encodés donc c'est bien c'était bien ça le problème il fallait dans le premier casrester en utf-8 et dans le deuxième cas vous voyez que l'on a des problèmes avec l'api qui ne
00:08:03 :retourne pas tout le temps le même encodage donc ça c'est un problème au niveau de l'api qu'ondoit régler de notre côté dans le script et ça a l'air de bien fonctionner cette fois ci donc jevais le laisser aller jusqu'au bout pour voir si jusqu'à l'écriture du fichier jason on est bon
00:08:15 :mais normalement ça devrait être le cas ok donc le fichier est écrit on va aller voir et donc làon a le premier film et là on a bien le deuxième film avec la catégorie qui est correctementaffiché le synopsis aussi et si on va voir dans les schedules on devrait avoir donc là je crois
00:08:31 :qu'il y avait je vais essayer de trouver on avait un cinéma qui avait un caractère spécial donceffectivement on retrouve ici le cinéma avec le a avec un accent aigu et il est correctement affichéégalement donc c'est tout bon pour cette partie on a bien séparé les choses en différents fichiers
Ce n'est pas fini...
✋
Tu as complété % du parcours 🔥
Termine l'intégralité de la formation pour pouvoir débloquer ton attestation de réussite.