Inscris-toi
(c'est gratuit !)
Un compte est nécessaire pour participer aux discussions.
Créer un compte00:00:08 :Donc je vais créer un nouveau composer.Une question qu'on se pose souvent quand on commence à utiliser Cursor, c'est quand est-ce que c'est le bon moment de créer un nouveau composer ?
00:00:16 :Moi, il y a deux choses que je prends en compte.Déjà, est-ce que je vais faire un rapport avec le contexte actuel ?Dans ce cas-ci, non, puisque dans ce composer-là, on faisait plus de la manutention,c'est-à-dire qu'on allait installer des dépendances, créer des dossiers, créer une interface de base.
00:00:32 :Là, ce qu'on va faire, c'est créer la logique du back-end, donc c'est quelque chose qui est un petit peu séparé.Donc pour cette raison, je vais créer un nouveau composer.
00:00:39 :Et la deuxième raison, c'est quand le contexte devient un petit peu long.Donc si vous faites une même opération, mais que vous commencez à avoir un historique de la conversation qui est assez long,il peut commencer à halluciner, c'est-à-dire qu'il ne va plus vraiment se souvenir du début.
00:00:53 :Il va même prendre des libertés qui sont des fois un petit peu bizarres sur ce qu'il va faire.Il va modifier, par exemple, du code dans des fichiers qui n'ont absolument rien à voir.
00:01:01 :Donc quand ce chose-là commence à arriver, il vaut mieux le prévenir.Et donc, au bout d'un moment, si ça fait dix minutes que vous êtes dans le même composer,ça peut être une bonne idée de créer un nouveau composer pour revenir avec un état un peu plus cleanet en lui redonnant du contexte si nécessaire.
00:01:17 :Donc là, je vais créer un nouveau composer.Et on va enlever justement du contexte le index.html.J'ai préparé le prompt pour ne pas que ce soit trop long. Je vais vous le montrer après.
00:01:27 :Donc je le colle ici.Et ce que je dis déjà, c'est quel est l'objectif de ce qu'on va faire.Donc l'objectif, c'est d'afficher la liste des horaires de films.
00:01:34 :J'explique qu'on commence par la partie back-end, qu'on va donc récupérer les films contenus dans le dernier JSON,dernier en date. Donc là encore, vous voyez, être le plus explicite possible.
00:01:43 :Qu'est-ce que ça veut dire le dernier JSON ?Est-ce que c'est le dernier dans le dossier ? Auquel cas, ça peut être classé par nom, par date, on ne sait pas trop.
00:01:49 :Donc là, j'explique que c'est bien le dernier en date.Et j'explique aussi que c'est dans le dossier data.Je lui dis d'enlever les films qui n'ont aucun horaire.
00:01:57 :Donc je précise ici enlève ou filtre. On va voir ce qu'il nous fait.L'idée, ce n'est pas forcément de les supprimer du fichier JSON.C'est juste de les filtrer.
00:02:06 :Donc je pense qu'il va comprendre avec ça que je ne veux pas supprimer les informations, mais juste les filtrer.Et dans le front-end, je lui dis pour l'instant de juste faire une liste.
00:02:13 :Donc là, c'est juste pour faire du debug.Pour voir si on a bien les films qui sont bien récupérés et qui sont affichés dans le front-end.
00:02:19 :Et par la suite, on s'intéressera à la partie visuelle de comment on affiche tout ça.Je lui demande aussi des informations sur la date du dernier scrapping.
00:02:27 :Donc là, je m'attends à ce qu'il me fasse une fonction séparée pour traiter ça.Je pourrais lui préciser ici.Je vais même le faire tout de suite puisqu'on ne sait pas trop comment il peut faire.
00:02:36 :Peut-être qu'il va tout faire dans la même fonction back-end.Donc là, je vais lui dire pour que ça soit un petit peu mieux séparé, de le faire dans une fonction séparée.
00:02:43 :Donc utilise une fonction Python séparée pour déterminer cette information à partir du nom du fichier.Donc on s'assure d'être bien en mode agent.On clique sur submit.
00:02:54 :Je n'ai pas mis de contexte là parce que ça va toucher à pas mal de fichiers.Je pense qu'il va comprendre ici qu'on parle du fichier app.py et du fichier index.
00:03:02 :Je pourrais les mettre, mais je ne veux pas qu'il aille chercher des informations depuis app ou index.Je veux juste qu'il aille les modifier.Donc je ne vais pas les mettre en contexte et je pense qu'il va définir tout seul quels sont les bons fichiers qu'il faut modifier à partir de ce que j'ai mis dans mon prompt.
00:03:17 :Donc je fais un submit et on va voir ce qu'il nous fait.Donc vous voyez ici l'incidence que ça a de ne pas avoir mis de fichier dans le contexte.
00:03:23 :Il va vérifier en fait si on a déjà une application parce qu'il dit je vais maintenant créer l'application Flask.Elle est déjà créée et comme on a fait un nouveau composer, il n'a pas l'historique de ce qu'on a fait.
00:03:38 :Donc là vous voyez qu'il a fait un listing, il a trouvé le app.py.Il va lire ensuite le contenu du fichier pour voir ce qu'il contient.
00:03:45 :Donc vous voyez que même sans le donner en contexte, il arrive à retomber sur ses pieds pour faire ce qu'il faut.Donc il a ajouté une fonction pour trouver le dernier JSON, c'est parfait.
00:03:52 :Ajouter une fonction pour extraire la date, c'est parfait aussi.On a des choses qui sont bien séparées dès le début et il modifie donc la route principale pour afficher les films.
00:04:00 :Donc si on va voir dans notre app.py, je vais faire un petit peu de place ici pour qu'on voit ce qu'il a fait.Donc on a une fonction pour récupérer le dernier fichier.
00:04:07 :Là encore vous voyez qu'il utilise le module OS.Je pense que je vais lui demander et je vais probablement rajouter une règle pour ça, pour que ce soit pris en compte si jamais on fait d'autres modifications,pour utiliser pathlib à la place de OS.
00:04:19 :Donc là on voit qu'il va récupérer le dossier data.On voit qu'il va récupérer donc uniquement les fichiers au JSON, au format JSON, donc avec .json ici.
00:04:28 :Ensuite il fait bien un get ctime ici pour aller trier les fichiers en fonction de leur date, pour pouvoir récupérer le dernier en date.Donc c'est ce que fait cette fonction.
00:04:37 :On a le extract datetime from filename.Donc là je pense qu'il a réussi à partir du filename ici.On a la date 2025-02-22 et l'heure.
00:04:47 :Donc si on regarde ça ressemble pas mal à ça.On a l'année ici, le mois, le jour, le tiré du bas, heure, minute et seconde.
00:04:54 :Et ensuite il va récupérer ça au format.Donc avec string for time il va récupérer un objet datetime à partir de cette chaîne de caractère.
00:05:01 :Donc ça semble bon.Et dans le index tout simplement il va récupérer cette donnée, donc la donnée du dernier fichier.Il va extraire la date de scrapping.
00:05:10 :Il va aller lire ces données et ensuite il va faire le filtre ici.Donc ça on pourra le faire éventuellement dans une fonction séparée, mais c'est juste une ligne de code avec une structure ici qui est une liste en compréhension,qui va récupérer les movies seulement s'il y a des données dans la clé schedule ici.
00:05:26 :Et ensuite on retourne le fichier index.html avec un contexte.Si on va voir dans le index ici, il a fait cette fois-ci un ul li, donc c'est parfait.
00:05:34 :On va aller accepter tout ça dans notre composer.On va lancer la commande qui va nous permettre de lancer le serveur Flask.Là vous voyez qu'il dit que le port 5000 est déjà utilisé apparemment, que souvent c'est avec Airplay.
00:05:48 :Donc il propose de changer le port.On va faire ok.On va voir si ça fonctionne et si ça ne fonctionne toujours pas.Alors là il le fait directement dans l'application.
00:05:56 :Je pense que c'est son terminal intégré ici qui ne fonctionne pas.On va voir si ça fonctionne de cette façon.Ok, donc là ça fonctionne.
00:06:02 :Tout à l'heure ça fonctionnait avec le port 5000, donc je l'avais fait dans un terminal séparé.Je pense que c'est pour ça que dans son terminal intégré ici, il y a quelque chose qui fait que ça ne fonctionne pas.
00:06:10 :Mais c'est pas grave, on a le port 5001, donc on va juste le changer ici.Je valide.Et là on a une erreur.Donc l'erreur elle se passe dans le filtre movie.getSchedule.
00:06:22 :Donc on va aller voir ce qu'il se passe.Là encore vous avez le choix, soit vous copiez cette erreur.Donc on peut prendre l'erreur ici et lui donner pour qu'il essaye de vérifier ça tout seul.
00:06:36 :Donc là je pense que c'est un problème avec la structure du JSON.Si je vais voir dans mon JSON à quoi ça ressemble, on a un JSON avec la date d'export.
00:06:44 :D'ailleurs la date d'export est disponible ici.On pourrait aller la récupérer ici plutôt que de la récupérer dans le fichier.On verra par la suite si on change ça.
00:06:52 :Vu qu'on l'avait indiqué ici, ça peut être pas mal de le faire directement depuis les données JSONplutôt que de le faire avec une regex depuis le nom du fichier.
00:06:59 :C'est peut-être plus simple comme ça.Et ici on a donc le movies.Alors qu'est-ce qu'il fait ?Si on revient voir notre erreur, on a string object has no attribute get.
00:07:08 :Donc là ça veut dire que le movie ici c'est une chaîne de caractère plutôt que d'être une entrée de dictionnaire.Donc si je reviens dans mon application, il prend chaque movie pour movies data.
00:07:18 :Movies data c'est le JSON complet.Donc je pense qu'effectivement le problème c'est qu'il va récupérer cette chaîne de caractère ici.Il ne fait pas un get movies au départ.
00:07:28 :Donc là ce qu'on pourrait faire c'est justement modifier ça.Donc le extract date time on va le modifier pour aller récupérer à la place le export date.
00:07:37 :Et on va faire movies ici qui va être égal à movies data.Et là vous voyez il arrive à comprendre, il le complète.Et on va faire scrapping date égale à movies data.get export date.
00:07:48 :Donc là vous voyez qu'avec l'autocomplétion il comprend bien ce qu'on essaie de faire.Là on va remplacer ça ici pour à la place de movies data mettre movies.
00:07:55 :Je vais accepter ces changements pour enlever les git diff ici qui nous a pollué un petit peu ce qui est affiché.Donc là il est toujours en train de mouliner dessus donc j'ai oublié de l'arrêter.
00:08:05 :Je vais accepter les changements qu'on a fait ici.Et vous voyez qu'en acceptant j'ai fait un petit peu des bêtises parce qu'il était en train de modifier tous en même temps.
00:08:13 :Donc on va refaire notre scrapping date.On va enlever cette fonction ici et en fait on va peut-être la garder on va voir.Puisqu'on va lui passer plutôt que le filename ici on va lui passer ce format là.
00:08:25 :Alors là je pense que je l'avais stocké un format qui va être facile à récupérer avec date time.Donc on va enlever cette fonction ici qui ne sert plus.
00:08:33 :Je vais l'enlever et à la place on va faire cette opération directement ici.Donc là je vais probablement lui donner ce format.On va le faire dans le composer et on va lui dire à partir de ça.
00:08:44 :Donc je reviens dans mon composer.On va dire à partir de la donnée dans le JSON j'ai récupéré le scrapping date au format.Et là je lui donne le format.
00:08:56 :Converti ce format en date time.Donc là je pense que ça va être le format ISO.Et je pense que c'est from ISO tout simplement.
00:09:06 :Alors là j'ai un petit doute donc je me repose de façon un petit peu facile.Donc là il a fait une nouvelle fonction pour ça.
00:09:15 :C'est un petit peu simple mais vous voyez on a un try except assez simple.Et voilà c'est le from ISO format.Donc c'est une date qui est au format ISO.
00:09:22 :On a cette fonction qui est disponible dans date time qui nous permet de récupérer ça facilement.Donc j'accepte ces changements.On a donc cette fonction qui à partir de l'export date va aller récupérer le date time du scrapping.
00:09:34 :On a le movies data ici donc là il l'a modifié.Ok on a fait data il a mis data ici et movies data.C'est parfait il a juste remodifié un petit peu les nombres des variables que j'avais mises.
00:09:43 :Et movies to display on a les titles etc.Donc ça semble fonctionner.Je sauvegarde.Je rouvre mon terminal.Donc je crois qu'on avait déjà l'application qui tournait.
00:09:53 :Donc là je pense qu'il l'a arrêté je vais faire un stop et je ne vais pas lancer l'application.Je vais le faire depuis mon terminal ici.
00:09:59 :Donc on va faire python web app.On est toujours au port 5001.Je reviens là j'actualise et cette fois-ci ça fonctionne.On a bien la liste des films disponibles.
00:10:08 :On a également la date de mise à jour qui correspond bien à celle qu'on avait.Donc à 9h33 le 2202.Donc tout fonctionne bien.Vous voyez on a travaillé main dans la main avec Figaro.
00:10:18 :On a quand même essayé de faire travailler un petit peu nos neurones pour ne pas être 100% dépendant.Mais comme je vous dis je pense que si j'avais donné l'erreur dans le contexte du composer ici.
00:10:27 :Il aurait assez facilement compris en analysant le JSON qui s'était planté.Et qu'il fallait récupérer la clé Movies.Et qu'il ne pouvait pas le faire directement à partir des données JSON brut comme il l'avait fait auparavant.
00:10:38 :On a également modifié un petit peu notre façon de faire.Puisque on est parti avec une intuition donc à partir du fichier .filename ici.Là encore vous voyez si on ne l'avait pas dit peut-être qu'il aurait directement eu une meilleure intuition que nous.
00:10:51 :En analysant le fichier JSON et en se rendant compte qu'il pouvait récupérer la date ici.Là dans ce cas-ci c'est nous qui avons été un petit peu bêtes de penser que c'était plus simple de le récupérer.
00:10:59 :Parce qu'on n'a pas nous même analysé les données qu'on avait.Donc vous voyez des fois est-ce que c'est l'homme ou la machine là dans ce cas-ci qui est le plus intelligent à voir.
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.