# Python WorkShop 3 Jours - Creer un environnement de devellopement pour python `docker` ou `venv` - Architecture du code `import`, Syntaxe, Programmation Objet - Installation et utilisation de librairies avec `pip` - Develloper une API REST & GRAPHQL avec un micro-framework `aiohttp` # Contexte - Docker Docker-Compose bootstrap *essential for everyone* - Debutant en Python avec une approche pratique - Nous allons mettre en place un moyen simple de creer une API Asynchrone - Avec une 20aine de ligne de code pour pouvez desormais rester concentrer sur la logique de vos fonctions et oublier les infrastructure monolitique complexe - Le but etant dans le contexte d'une entreprise de pouvoir develloper des briques facilement integrable en production `app-container` - Rechercher et Utiliser des librairies qui permettront d'effectuer les objectifs demandes - Fournir un code fonctionnel qui pourra etre tester par un script # Objectifs - Construire le skelette d'une applications avec comme routes - GET /cryptoTickers *return assets lists* as ```yaml= crypto_assets: BTC: 39000 ADA: 1.45 ``` - POST /cryptoAssetTick *return inserted row* - **srv: https://school.alcyone.life/graphql** - **install, setup, A GraphQL Library to interact with the srv** - **write functions getters and mutation in python route handler** ```yaml row: id: 1 sym: BTC pri: 39000 ``` - POST /cryptoAssetPlot *return generate plot img* - with graphql ask the database for all the inserted row correspondong to the crypto symbol and plot the results with the create_at timestamp and the price value ```yaml ticks: - sym: BTC price: 39000 created_at: 2020-06-36 18:00:25 - sym: BTC price: 36000 created_at: 2020-06-36 18:01:25 - sym: BTC price: 37000 created_at: 2020-06-36 18:02:25 ``` - POST /authGQL - authenticate on strapi with graphql - code handler from this [registration-example](https://strapi.io/documentation/developer-docs/latest/development/plugins/graphql.html#usage) - Construire une fonction middleware d'authentification (jwt via graphql) - https://docs.aiohttp.org/en/stable/web_advanced.html ```python from aiohttp.web import middleware @middleware async def middleware(request, handler): resp = await handler(request) resp.text = resp.text + ' wink' return resp ``` - chacun de vos handlers pourra se voir ajouter ce middleware ```python @auth_jwt_check async def cryptoTicker(request) -> dict: price = await ...() return dict(sym=sym, price=price) ``` - il faudra aller dans les headers present dans `request` - extraire le token dans la clef `Auth-Jwt-Aio` - joindre son token au requete graphql presente dans le `handler` # Veuillez deposez votre code fonctionnel dans un repo git afin qu'il puisse etre valider par mes tests unitaires Tous les details sur discord au long de la formation. Bonne chance.