# 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.