elastic / elastic/apm-agent-python
Refactor serialization mechanism to be extendable
- Ngôn ngữ chính
- Python
- Star
- 431
- Fork
- 239
- Merge trung bình
- 5 ngày 10 giờ
- Pull request đã merge (30 ngày)
- 7
Mô tả
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.
Hướng dẫn đóng góp
Hướng nghiên cứu
Bắt đầu bằng cách đọc elasticapm/utils/encoding.py quanh các dòng 85-138, nơi việc tuần tự hóa hiện được triển khai dưới dạng một chuỗi điều kiện dài. So sánh cách tiếp cận registry được đề xuất với nhu cầu xử lý tùy chọn Django QuerySet và rút ngắn giá trị. Công việc được xem là hoàn tất khi cơ chế tuần tự hóa có thể mở rộng, ít dễ hỏng hơn và tránh đánh giá QuerySet một cách không cần thiết khi Django được cài đặt.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- django, python
- Lĩnh vực
- backend
- Loại issue
- Tái cấu trúc
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 30/100