---
# System prepended metadata

title: Python WorkShop 3 Jours

---

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