Skip to content

Suppression de l’objet global de registre d’indicateurs

Vincent Lara requested to merge remove-global-registry into main

Contexte

Mon but ultime est de supprimer l’objet global de connexion SQL de insitu pour ne plus me prendre les pieds dans le tapis pendant les tests.

Dans cette lutte acharnée, j’ai vu que le registre des indicateurs avait besoin de cet objet pour fonctionner (pour l’instant).

Contenu

On supprime cet objet global afin de lui passer par la suite une connexion et enfin ne plus avoir cet objet que je maudis !

Aussi on en profite pour renommer tous les REGISTRY en registre_indicateurs parce que ça pouvait être déroutant de ne pas savoir de quel registre on parle.

Changement dans l’API

La plus grosse difficulté a été rencontrée dans l’API, après moult péripéties avec @ronan on a mieux réussi à comprendre comment fonctionne FastAPI.

À l’initialisation de l’API le contexte lifespan est lancé, dans celui ci on vient initialiser le registre et son cache, puis on yield un objet {"registre_indicateurs": registre_indicateurs}.

On peut maintenant dans les requêtes récupérer le registre en faisant quelque chose comme ça

@app.route("/route")
def route(request: Request):
    request.state.registre_indicateurs

Simple facile, on est contents.

Maintenant on essaie de tester tout ça et patatra ! C’est compliqué !

Il faut ajouter une nouvelle notion les dependencies de fastapi (https://fastapi.tiangolo.com/tutorial/dependencies/?h=depend), pour pouvoir les over-rider https://fastapi.tiangolo.com/advanced/testing-dependencies/

Comme on peut le voir dans le fichier dependencies.py et l’over-rider après assez simplement.

De cette manière on a maintenant supprimé un objet global, et pas mais deux monkey-patches !

Joie et allégresse !

Merge request reports