Giter Club home page Giter Club logo

td_egg_warehouse's Introduction

Hi 👋 I'm Geoffray

CodepenJSFiddle

A French student in computer science, passionate about web development

HTML5 JavaScript CSS SCSS TailwindCSS
Node.js Express React Svelte Next.js
C Java Hibernate Spring Boot
Docker Gitlab CI
MySQL MongoDB SQLite
VSCode IntelliJEclipse
Notion Jira Confluence
Linux macOS

td_egg_warehouse's People

Contributors

jofresh avatar

Stargazers

 avatar

Watchers

 avatar

td_egg_warehouse's Issues

exercise-2-pymongo

Ici, nous allons jouer avec deux images Docker qui devrons pouvoir communiquer entre elles.
Pour cela, nous allons utiliser Docker pour créer un réseau que nous nommerons mynet

docker network create mynet

Pour les utilisateurs de Windows, il est possible que cette appel ne fonctionne pas. Dans ce cas, passez par la commande

docker network create --driver nat mynet

Commencez par lancer un premier conteneur basé sur l'image mongo que vous nommerez mongodb et que vous connecterez au réseau mynet (utilisez l'option --network mynet).
Ensuite, lancez un second conteneur basé sur l'image python:alpine que vous nommerez python-mongo et que vous connecterez au réseau mynet.
Afin d'éviter que le conteneur de l'image python ne se ferme automatiquement, il faudra utiliser le mode "foreground" (-t, -i ou -it).

Dans le conteneur python-mongo installez la paquet pymongo que nous allons utiliser pour remplir la base de donnée.
Utilisez l'interpréteur python du conteneur, pour peupler la base de données avec des immatriculations d'oeuf en vous inspirant du code suivant :

import pymongo
# Import de la classe MongoClient qui nous permettra de nous connecter a la base de donnees MongoDB
from pymongo import MongoClient
client = MongoClient(host="A_REMPLIR")
# Acces a la base de donnees "NOM_BASE_DE_DONNEES"
db = client["NOM_BASE_DE_DONNEES"]
# Acces a la collection "NOM_COLLECTION"
col = db["NOM_COLLECTION"]
# Ajout d'un 'fruit' dans la collection
fruit = {
        "nom": "banane",
        "couleur": "jaune"
}
res = col.insert_one(fruit)
# Verification de l'ajout
print(f'Le fruit {res.inserted_id} a bien ete cree')
# Localise et affiche le fruit
col.find_one()

En parallèle, vous pouvez vous assurer que la base de donnée à bien été remplie depuis le conteneur mongo.
Pour cela, interagissez avec celui-ci en exécutant la commande mongosh.
Une fois réalisé, utilisez la base de donnée que vous défini depuis le conteneur python.
use NOM_BASE_DE_DONNEES
Ensuite, interrogez la base pour récupérer un élément qui compose la collection que vous avec définit.
db.NOM_COLLECTION.findOne()

exercise-3-seeder

Ecrivez un script Python seeder.py permettant de peupler la base de donnée.
Pour cela, vous allez utiliser les tests réalisés à l'Exerice 1 et ajouter des entrées valides et non valides.

Une fois le scrip écrit, il ne vous reste plus qu'à définir le Dockerfile associé où l'on doit retrouver:

- l'installation des dépendances nécessaires
- la copie des données nécessaires
- l'exécution du script `seeder.py`

Maintenant, vous allez construire votre image en la taggant par $DOCKERID/seed_mongo (où DOCKERID est votre identifiant docker hub).
Puis, après vous être connecté à Docker Hub, vous allez publier votre image.

exercise-6-cli

Modifiez egg_warehouse.py pour en faire une interface en ligne de commande (CLI).
Pour commencer vous pouvez recouvrir vos développements existant, i.e. ajouter une option "--check" permettant de regarder si les immatriculations sont valides.
Ensuite vous pouvez proposer d'autres options :
- afficher les informations relatives à un oeuf à partir de son immatriculation (poule pondeuse, taille, ...)
- rechercher les oeufs provenant d'une certaine poule pondeuse, mois de ponte, ...
- supprimer les immatriculations invalides dans la base de données
- ...

exercise-4-egg-warehouse

Ecrivez un script Python egg_warehouse.py basé sur vos développement à l'Exercice 1.
Lorsque celui-ci est appelé, il doit se connecter à la base de données et regarder que les immatriculations sont valides.
Dans le cas où une immatriculation n'est pas valide, il doit l'afficher à l'écran.

Note : pour itérer sur une collection obtenus via pymongo, vous pouvez utiliser le snippet suivant:

fruits = col.find()
for fruit in fruits:
        nom = fruit["nom"]
        couleur = fruit["couleur"]

exercise-1-models-tests

Vous allez débuter le projet en créant :

  • une classe Warehouse qui :

      - encapsule un nombre d'emplacement d'oeufs et une liste d'oeufs;
      - dispose de méthodes permettant d'accéder à ces informations et d'ajouter ou de retirer une instance `Egg` à la boîte;
      - possède une méthode publique `is_valid` qui vérifie que le nombre d'oeufs composant l'entrepot est inférieur au nombre d'emplacements et déclenche l'analyse des immatriculations des oeufs et retourne `True` si les immatriculations sont valides et que les oeufs sont de la bonnes tailles, `False` sinon.
    
  • une classe Egg qui :

      - encapsule un nom d'élevage d'origine, une couleur et un numéro d'immatriculation
      - possède une méthode publique `is_valid` qui retourne `True` si l'immatriculation est valide, `False` sinon.
    

Une immatriculation est valide si elle est composée de 12 caractères :

- deux chiffres qui représentent un nombre divisible par 5 (poids de l'oeuf arrondi);
- un tiret
- deux lettres qui représentent les initiales de la France ou d'un des pays voisins à la Franche (Belgique, Allemagne, Luxembourg, Suisse, Italie ou Espagne)
- trois chiffres qui ne doivent pas représenter un palindrome (représentent le code de l'élevage)
- deux chiffres allant de O1 à 31 (jour de ponte)
- deux lettres indiquant le mois de ponte ("JA", "FE", "MA", "AV", "MI", "JU", "JL", "AO", "SE", "OC", "NO", "DE")

Attention, les deux dernier chiffres et deux dernières lettres doivent identifier des mois différents. Par exemple "01" et "FE" est valide mais pas "02" et "FE".

Dans cet exercice, il est attendu que vous réalisiez des tests unitaire.

exercise-5-docker-compose

Votre fichier docker-compose.yml va se composer de trois services :

- `mongodb` : que vous allez lancer à partir de l'image `mongo:latest`
- `seed_mongo` :  que vous allez lancer à partir de votre image `$DOCKERID/seed_mongo` (ou de celle d'un de vos camarades) et qui dépendra de `mongodb`
- `egg_warehouse` : que vous allez construire à partir des sources de l'Exercice 4 (il vous faudra faire un nouveau Dockerfile dédié à ce conteneur) et qui dépendra de seed_mongo

Note : dans le cas du conteneur mongodb, n'oubliez pas que le service mongod utilise le port 27017.

Vérifiez ensuite que tout cela fonctionne :
docker-compose up --build
et, depuis un autre terminal
docker exec -it NOM_DU_CONTENEUR bash
et enfin l'exécution de votre code python réalisant le traitement sur la base de donnée.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.