bookmark_borderModèle de FastAPI Stripe Webhook

L’équivalent FastAPI de vérifier-que-les-événements-proviennent-de-stripe

import os

from http import HTTPStatus
from typing import Annotated

import stripe
from fastapi import Depends, FastAPI, Header, HTTPException, Request


app = FastAPI()


async def get_body(request: Request) -> bytes:
    return await request.body()


@app.post("/webhook", status_code=HTTPStatus.NO_CONTENT)
def post_report(
    stripe_signature: Annotated[str, Header(alias="stripe-signature")],
    body: bytes = Depends(get_body),
) -> None:
    endpoint_secret = os.environ["ENDPOINT_SECRET"]

    try:
        # signature validation
        event = stripe.Webhook.construct_event(body, stripe_signature, endpoint_secret)
    except ValueError as e:
        # Invalid payload
        raise HTTPException(status_code=HTTPStatus.BAD_REQUEST) from e
    except stripe.error.SignatureVerificationError as e:
        # Invalid signature
        raise HTTPException(status_code=HTTPStatus.UNPROCESSABLE_ENTITY) from e

    print(event)

    return

Un problème possible, que j’ai rencontré, est que j’ai demandé à FastAPI de convertir request.body en un dictionnaire au niveau des paramètres de fonction (donc body: dict). Puis, je l’ai sérialisé en une chaîne de caractères pour l’étape de validation… et cela a échoué parce qu’il n’était plus identique à ce qui était entré.

bookmark_borderAnnotations de type en python – Annoter ou convertir?

Lors d’une revue de code, un collègue, Zachary Paden, me demandait pourquoi j’appelais la fonction typing.cast sur mes variables plutôt que de créer des variables temporaires simplement pour typer. Eh bien, tout comme il ignorait l’existence de cast, j’ignorais que cette approche fonctionnait. En bon nerdz que nous sommes, il a décidé de mesurer la performance de chacune des approches.

Continue reading « Annotations de type en python – Annoter ou convertir? »

bookmark_borderExplications et astuces d’utilisation de python poetry

Pour ceux qui sont habitués à utiliser un environnement virtuel «de base» avec virtualenv, poetry peut être déroutant. Voici quelques éclaircissements et certains trucs avec l’utilisation de poetry.

Continue reading « Explications et astuces d’utilisation de python poetry »