questionpy-org / questionpy-sdk

Library and toolset for the development of QuestionPy packages
https://questionpy.org
MIT License
0 stars 2 forks source link

FormModel #8

Closed MHajoha closed 2 years ago

MHajoha commented 2 years ago

Die Funktionen in dsl.py geben Platzhalter zurück, die von der __new__-Methode einer eigenen Metaklasse _FormModelMeta zusammen mit dem Feldnamen durch FieldInfos ersetzt wird. Damit kann pydantic ganz normal Input-Daten validieren. Beim Rendern der Form werden die Form-Elemente dann wieder aus den FieldInfo (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 von QuestionType mitgeteilt. in __init_subclass__ wird dieser extrahiert und als form_model abgespeichert.

github-actions[bot] commented 2 years ago

Test Report

Report generated on 18-Aug-2022 at 15:26:58 by pytest-md

Summary

89 tests ran in 0.69 seconds

Coverage Report

Code Coverage

Package Line Rate Branch Rate Health
. 75% 82%
commands 0% 0%
form 93% 97%
Summary 74% (338 / 455) 86% (138 / 160)
MHajoha commented 2 years ago

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.