-
Notifications
You must be signed in to change notification settings - Fork 3
Description
Das aktuelle Austauschformat für Question Options ist denkbar umständlich:
type OptionsFormDataValue = str | int | float | bool | list[str] | list[OptionsFile] | RichTextEditor | None
type OptionsFormData = Mapping[str, OptionsFormDataValue]Konkret sieht das etwa so aus:
{
"general[input]": "a",
"general[chk]": false,
"general[radio]": "OPT_1",
"general[my_select]": ["OPT_1"],
"general[my_hidden]": "foo",
"general[my_repetition][1][role]": "OPT_1",
"general[my_repetition][1][name][first_name]": "",
"general[my_repetition][1][name][last_name]": "",
"general[has_name]": false,
"general[name_group][first_name]": "",
"general[name_group][last_name]": "",
"general[foo][text]": "<p>Foo bar</p>",
"general[foo][files]": []
}Das führt zu allerlei zerbrechlichen Umformungen im Backend, sowie im Frontend, z.B. hier, da oder auch dort, gesprenkelt über den gesamten Code, ist aber ganz besonders nervig wenn nicht bloß primitive Typen gehandhabt werden müssen, wie z.B. bei den Repetitions, oder jetzt neu File Uploads. (Ja, genau genommen ist es auch gar nicht flach, da es Ausnahmen gibt, z.B. für select, wie oben zu sehen.)
Das ganze führt auch ständig zu subtilen Bugs, z.B. beim Initialisieren mit defaults oder beim Umformen. Im Code sind auch noch einige Bugs, die ich bisher nicht angehen wollte, weil die mit diesem Issue eh obsolet würden.
Diese Umformungen sind auch eigentlich komplett unnötig, vor allem wenn man bedenkt, dass das Backend die Daten nur für die Übertragung flach macht, und das Frontend sie wieder zurück umwandeln muss in eine genestete Struktur, beim Speichern dasselbe, nur in umgekehrter Reihenfolge. Ich denke, insgesamt würde es viele Stellen stark vereinfachen, den Code insgesamt schrumpfen, lesbarer machen und nebenbei einige Bugs beheben, die Datenstruktur einfach genestet zu lassen.