Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correction du dag CMA #989

Merged
merged 5 commits into from
Nov 5, 2024
Merged

Correction du dag CMA #989

merged 5 commits into from
Nov 5, 2024

Conversation

kolok
Copy link
Contributor

@kolok kolok commented Oct 31, 2024

Description succincte du problème résolu

Le DAG de la CMA ne fonctionne plus depuis une optimisation lors de la récupération de des acteurs en base de données

Type de changement :

  • Bug fix
  • Nouvelle fonctionnalité
  • Mise à jour de données / DAG
  • Les changements nécessitent une mise à jour de documentation
  • Refactoring de code (explication à retrouver dans la description)

Auto-review

Les trucs à faire avant de demander une review :

  • J'ai bien relu mon code
  • La CI passe bien
  • En cas d'ajout de variable d'environnement, j'ai bien mis à jour le .env.template
  • J'ai ajouté des tests qui couvrent le nouveau code

Comment tester

En local / staging :

@kolok kolok requested a review from a team as a code owner October 31, 2024 09:14
@kolok kolok requested review from fabienheureux and maxcorbeau and removed request for a team October 31, 2024 09:14
Copy link
Member

@fabienheureux fabienheureux left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je serais tenté de dire "ajouter un test pour le #TODO", mais à part ça c'est bon pour moi 👍

@kolok
Copy link
Contributor Author

kolok commented Nov 4, 2024

Je serais tenté de dire "ajouter un test pour le #TODO", mais à part ça c'est bon pour moi 👍

J'ai ajouté le seul test que je pouvais faire sans ajouter de dépendance des tests à la base de donnée :)

Copy link
Contributor

@maxcorbeau maxcorbeau left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kolok : OK pour le merge, quelques remarques sur la déclaration/typing + potentielle amélioration de perf pour get_id_from_code

@@ -68,7 +68,8 @@
"materiel informatique"
],
"téléphones, smartphones": ["smartphone, tablette et console"],
"vêtements, textiles": ["vetement", "linge de maison"]
"vêtements, textiles": ["vetement", "linge de maison"],
"autres":[]
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kolok : même remarque que pour mapping des colonnes, je privilégierais un None plus explicite que [] pour clairement indiquer l'intention de ne pas mapper (et non pas un oubli potentiel de définir la correspondance)

@@ -275,14 +275,21 @@ def serialize_to_json(**kwargs):


def read_acteur(**kwargs):
source_code = kwargs["params"].get("source_code", [])
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kolok : dans cma.py tu définis le source_code comme chaîne:
"source_code": "CMA - Chambre des métiers et de l'artisanat"

Et là tu changes de type vers de la liste par défaut.

Normalement des librairies comme https://github.com/python/mypy retournent des exceptions pour le changement de type, malheureusement on passe par des accès indirectes de dict donc je pense que c'est mort pour le typing.

Piste d'amélioration: définir un modèle (ex: dataclass/pydantic) pour le kwargs["params"] qui contient nos paramètres custom avec contraintes de type.

df["produitsdechets_acceptes"] = df.apply(combine_categories, axis=1)
df["source_id"] = get_id_from_code(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kolok : à revoir, mais get_id_from_code fait le travail 2x: 1ère fois pour le test any et une 2ème fois pour récupérer une valeur, potentiellement moyen de faire en 1 fois.

Copy link
Contributor

@maxcorbeau maxcorbeau Nov 4, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

un outil que j'aime bien c'est https://github.com/ionelmc/pytest-benchmark:

  • il s'intègre avec pytest (pas un gros framework lourd de stress test à rajouter donc c'est pratique)
  • on peut créer l'arborescence tests/ avec tests/unit/ (unit tests) et tests/perf (performance optimisation)
  • dès qu'on écrit des fonctions on vient compléter (on garde l'historique des fonctions) tests/perf pour:
    • démontrer qu'on améliore les perfs
    • documenter ce qui marche mieux/moins bien pour éduquer et réutiliser ce qui marche mieux

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A chaque fois qu'on utilise la fonction get_id_from_code c'est pour récupérer les iddepuis le code, que penses-tu de transformer les dataframes en dict(code -> id) dès l'appel à la base de données ?

En attendant de transformer les données en DB et de récuprer les ID via des JOIN

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oui un dict lookup sera toujours plus rapide qu'une évaluation de dataframe c'est vrai

@kolok kolok merged commit 44d98e8 into main Nov 5, 2024
7 checks passed
@kolok kolok deleted the cma_get_from_source_code branch November 5, 2024 14:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants