Closed MHajoha closed 2 years ago
Report generated on 18-Aug-2022 at 15:26:58 by pytest-md
89 tests ran in 0.69 seconds
Package | Line Rate | Branch Rate | Health |
---|---|---|---|
. | 75% | 82% | ➖ |
commands | 0% | 0% | ❌ |
form | 93% | 97% | ✔ |
Summary | 74% (338 / 455) | 86% (138 / 160) | ➖ |
Ich habe die select und radio_group Komponenten jetzt nocheinmal so verändert, dass sie statt einer Liste von Optionen einen speziellen Enum-Typen (OptionEnum
) nehmen können, dessen Varianten die Optionen definieren. Der Wert des Felds ist dann auch einer (oder mehrere) der Enum-Varianten.
Außerdem habe ich ein wenig refactored (die Definition von Default und Typ aus den FormElement-Instanzen raus und in die dsl-Funktionen verschoben) und ein paar mehr test cases hinzugefügt.
Die Funktionen in
dsl.py
geben Platzhalter zurück, die von der__new__
-Methode einer eigenen Metaklasse_FormModelMeta
zusammen mit dem Feldnamen durchFieldInfo
s ersetzt wird. Damit kann pydantic ganz normal Input-Daten validieren. Beim Rendern der Form werden die Form-Elemente dann wieder aus denFieldInfo
(die arbiträre Metadaten enthalten können) herausgelesen.Die ganzen Overloads in
dsl.py
sind dafür da, dass der Typ des Felds auch ohne Annotation korrekt inferred wird.Die
FormModel
-Subklasse wird als Typenparameter vonQuestionType
mitgeteilt. in__init_subclass__
wird dieser extrahiert und alsform_model
abgespeichert.