eiffel-community / eiffel-community/eiffel-pythonlib

Use pydantic instead of dicts

Offen
#24 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
8
Forks
12
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

### 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?

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit der Untersuchung der vorhandenen event-content dicts und der ArtC-Ereignisimplementierung in Commit 59136e4 und prüfe anschließend, wie Ereignisse erstellt und deserialisiert werden. Lege fest, wie generierte Pydantic-Modelle und die Kompatibilität von Ereignisversionen funktionieren sollen, bevor du die Änderung versuchst; abgeschlossen bedeutet, dass das Design die Deserialisierung alter Versionen klärt und die dict-basierte Verwendung beibehält oder bewusst ändert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend-api-design, distributed-systems
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.