diff --git a/06 - Teaching/Exercises 923.md b/06 - Teaching/Exercises 923.md index 7540563..6ed40e7 100644 --- a/06 - Teaching/Exercises 923.md +++ b/06 - Teaching/Exercises 923.md @@ -21,10 +21,10 @@ Les développeur.euse.s de l'API viennent vous voir en disant qu'iels aimeraient Quel(s) fichier(s) devez-vous éditer afin de satisfaire leur besoin ? -- [ ] main.py _0 points_ -- [x] Dockerfile _1 points_ -- [ ] docker-compose.yaml _0 points_ -- [ ] .gitignore _0 points_ +- [ ] main.py - _0 point_ +- [x] Dockerfile - _1 point_ +- [ ] docker-compose.yaml - _0 point_ +- [ ] .gitignore - _0 point_ ### Exercice 2 @@ -32,19 +32,19 @@ Quel(s) fichier(s) devez-vous éditer afin de satisfaire leur besoin ? La nouvelle version de l'API doit pouvoir être testée sur l'infrastructure sans intérferer avec l'API en production. Vous devez donc mettre en place un nouveau container pour l'API de test qui s'accède par un port différent que celui utilisé pour l'API en production. -Le port mapping de l'API de production est `8000:8000`. +Le port mapping de l'API de production est `8000:8000` et le nom de l'image est `api-image`. Quel(s) fichier(s) éditez vous ? -- [ ] main.py _0 points_ -- [ ] Dockerfile _0 points_ -- [x] docker-compose.yaml _1 points_ -- [ ] .gitignore _0 points_ -- [x] Je n'édite aucun fichier et utilise à la place la ligne de commande suivante: `docker run -p 8001:8000 my-image` _1 points_ +- [ ] main.py - _0 point_ +- [ ] Dockerfile - _0 point_ +- [x] docker-compose.yaml - _1 point_ +- [ ] .gitignore - _0 point_ +- [x] Je n'édite aucun fichier et utilise à la place la ligne de commande suivante: `docker run -p 8001:8000 api-image` - _1 point_ ### Exercice 3 -#### 2 point max. +#### 2 points max. Afin d'éviter de polluer la base de donnée de production avec les tests, vous avez décidé de créer un nouveau container pour la base de donnée. Ce container doit être similaire en tout point à la production avec les conditions suivantes: - Cette nouvelle base de donnée ne doit en aucun cas interférer avec la production. @@ -75,14 +75,14 @@ Vous décidez de dupliquer la configuration ci-dessus pour créer le nouveau con Quelles étapes devez-vous effectuer pour que le nouveau container respecte les conditions ci-dessus ? -- [ ] Vous changez la version de l'image pour `postgres:latest` _0 points_ -- [ ] Vous changez le port mapping pour `9876:9876` _0 points_ -- [x] Vous changez le port mapping pour `9876:5432` _1 points_ -- [ ] Vous supprimez les variables d'environnement _0 points_ -- [ ] Vous changez le volume mapping du container pour `./src/:/var/lib/postgresql/data` _0 points_ -- [ ] Vous changez le volume mapping du container pour `test-db-data:/var/lib/postgresql/data` et ajoutez `test-db-data` dans la définition des volumes en bas du fichier _0 points_ -- [x] Vous supprimez le volume mapping du container _1 points_ -- [ ] Vous supprimer la définition du volume `prod-db-data` en bas du fichier _-1 points_ +- [ ] Vous changez la version de l'image pour `postgres:latest` - _0 point_ +- [ ] Vous changez le port mapping pour `9876:9876`- _0 point_ +- [x] Vous changez le port mapping pour `9876:5432` - _1 point_ +- [ ] Vous supprimez les variables d'environnement - _0 point_ +- [ ] Vous changez le volume mapping du container pour `./src/:/var/lib/postgresql/data` - _0 point_ +- [ ] Vous changez le volume mapping du container pour `test-db-data:/var/lib/postgresql/data` et ajoutez `test-db-data` dans la définition des volumes en bas du fichier - _0 point_ +- [x] Vous supprimez le volume mapping du container - _1 point_ +- [ ] Vous supprimer la définition du volume `prod-db-data` en bas du fichier- _-1 point_ ### Exercice 4 @@ -112,10 +112,10 @@ API/ Quel(s) autre(s) fichier(s) devez-vous modifier pour éviter de revoir le responsable sécurité prochainement ? -- [ ] main.py _0 points_ -- [ ] Dockerfile _0 points_ -- [x] docker-compose.yaml _1 points_ -- [x] .gitignore _1 points_ +- [ ] main.py - _0 point_ +- [ ] Dockerfile - _0 point_ +- [x] docker-compose.yaml - _1 point_ +- [x] .gitignore - _1 point_ # Backend @@ -139,6 +139,8 @@ On vous demande donc le code Python nécessaire pour effectuer les actions suiva Vous devez `print` toutes les instances de `User` dont le nom est égal à "clown". +**Option 1** - _1 point_ + ```python for user in User.select().where(User.name == "clown"): print(user) @@ -150,11 +152,13 @@ for user in User.select().where(User.name == "clown"): On a de bonne raison de penser que l'utilisateur a créé un compte dans la base de donnée juste avant l'attaque. Il faudrait récupérer le `User` dont la date de création du compte correspond à la date de l'attaque afin de pouvoir le retrouver. +**Option 1** - _1 point_ + ```python hacker = User.get(User.date_created=date(2025, 4, 17)) ``` -_équivalent à_ +**Option 2** - _1 point_ ```python hacker = User.select().where(User.date_created=date(2025, 4, 17)).get() @@ -167,7 +171,22 @@ hacker = User.select().where(User.date_created=date(2025, 4, 17)).get() Vous devez à présent supprimer toutes les instances de `User` dont le nom est égal à "clown". Bonus si vous le faites en une seule ligne. +**Option 1** - _1 point_ + ```python for user in User.select().where(User.name == "clown"): user.delete_instance() ``` + +**Option 2** - _2 points_ + +```python +[user.delete_instance() for user in User.select().where(User.name == "clown")] +``` + +**Option 3** - _2 points_ + +```python +User.delete().where(User.name == "clown") +``` +