eiffel-community / eiffel-community/eiffel-pythonlib
Use pydantic instead of dicts
- Lenguaje dominante
- Python
- Estrellas
- 8
- Forks
- 12
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
### Description
Instead of just storing the event contents as three anonymous dicts we should use [pydantic](https://pypi.org/project/pydantic/) to allow proper typed instance attributes. I tried it out with the ArtC event in https://github.com/magnusbaeck/eiffel-pythonlib/commit/59136e4188914ec8530ba658cef1b2e64f1ba185. Writing these classes by hand is rather boring so we should explore using [github.com/koxudaxi/datamodel-code-generator](https://github.com/koxudaxi/datamodel-code-generator) to generate the code.
### Motivation
Typed classes would enable linters and IDEs to help out when writing code that accesses events.
### Exemplification
I'd expect any piece of code that creates events would be easier to write. Reasonable people may disagree, but pydantic-based classes can be initialized from a dict so you could continue working with dicts if you prefer (but the syntax would be slightly different so it would break backwards compatibility).
### Benefits
See Motivation, above.
### Possible Drawbacks
It's not clear how we should deal with different versions of the events. When producing events we can probably just use the latest known version, but what do we do when deserializing events of old versions? They might not be acceptable to the current version of the schema (which is what the pydantic model would contain). Should we version the event classes too, when necessary?
Guía de contribución
Línea de trabajo
Comienza examinando los dicts de contenido de eventos existentes y la implementación de eventos de ArtC en el commit 59136e4; después, revisa cómo se crean y deserializan los eventos. Define cómo deben funcionar los modelos de Pydantic generados y la compatibilidad entre versiones de eventos antes de intentar el cambio; se considera terminado cuando el diseño resuelve la deserialización de versiones antiguas y conserva o cambia deliberadamente el uso basado en dict.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- backend-api-design, distributed-systems
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 25/100