elastic / elastic/apm-agent-python
Refactor serialization mechanism to be extendable
- Langage dominant
- Python
- Étoiles
- 431
- Forks
- 239
- Merge moyen
- 5 j 10 h
- PR mergées (30 j)
- 7
Description
At the moment, our serialization code is just a really long `if-elif-elif-...` block: https://github.com/elastic/apm-agent-python/blob/ee45d21ff43be495089a005863b7f6af0707fe34/elasticapm/utils/encoding.py#L85-L138.
This has several drawbacks:
* it's not extendable (we e.g. might want to serialize Django `QuerySet` objects in a sane way that doesn't evaluate the queryset unnecessarily, but only if Django is installed)
* it's brittle
* it's hard to read
* ideally, serialization would also include shortening of values, which is hard to do in its current state
One option could be to have a registry, to which transformers can register themselves, together with a list of supported types for that transformer.
Guide de contribution
Ouvrir le guide de contribution
Piste de recherche
Commencez par lire elasticapm/utils/encoding.py autour des lignes 85-138, où la sérialisation est actuellement implémentée sous la forme d’une longue chaîne conditionnelle. Comparez l’approche proposée basée sur un registre avec le besoin de gérer facultativement Django QuerySet et de raccourcir les valeurs. Le travail est considéré comme terminé lorsque le mécanisme de sérialisation est extensible, moins fragile et évite d’évaluer inutilement les QuerySets lorsque Django est installé.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- django, python
- Domaine
- backend
- Type d'issue
- Refactorisation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 30/100