elastic / elastic/apm-agent-python

Refactor serialization mechanism to be extendable

Ouverte
#182 2 commentaires 1 réaction 0 personnes assignées Voir sur GitHub
agent-python
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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.