From: Michael Tremer Date: Sun, 5 Dec 2021 17:31:42 +0000 (+0000) Subject: forms: Add store callback and automatic value setting X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4d13129f708438579d1398a2a2fe03a798b396c3;p=people%2Fms%2Fwestferry.git forms: Add store callback and automatic value setting Signed-off-by: Michael Tremer --- diff --git a/src/westferry/ui/forms.py b/src/westferry/ui/forms.py index 24afcb7..7faad9b 100644 --- a/src/westferry/ui/forms.py +++ b/src/westferry/ui/forms.py @@ -76,14 +76,19 @@ class Form(object): """ log.debug("Executing form %s" % self) - # Export all form data - data = self.export() + for element in self: + log.debug(" Processing element %s" % element) + + # Call the store callback if available + if element.store and callable(element.store): + element.store(element.value) - # Log everything - for key in data: - log.debug(" %-24s : %s" % (key, data[key])) + # Otherwise try setting attribute to object + elif element.object and element.attribute: + setattr(element.object, element.attribute, element.value) - # TODO handle callback + else: + log.warning("Value of %s could not be stored" % element) # Sub-Forms @@ -176,7 +181,7 @@ class Element(object): type = None def __init__(self, form, name=None, label=None, default=None, - disabled=False, readonly=False, **kwargs): + disabled=False, readonly=False, object=None, attribute=None, store=None, **kwargs): assert self.type self.form = form @@ -188,6 +193,17 @@ class Element(object): self.disabled = disabled self.readonly = readonly + # Object & Attribute + self.object = object + self.attribute = attribute or name + + # Import default value from object and attribute if none set + if self.default is None and self.object and self.attribute: + self.default = getattr(self.object, self.attribute) + + # Callbacks + self.store = store + # Help text self.help = None