]> git.ipfire.org Git - people/ms/westferry.git/commitdiff
forms: Add store callback and automatic value setting
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 5 Dec 2021 17:31:42 +0000 (17:31 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 5 Dec 2021 17:31:42 +0000 (17:31 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/westferry/ui/forms.py

index 24afcb78271ae34cdca880c2ab3e998b444014a9..7faad9b2be037b8290771a67e8f48c7137e16d6d 100644 (file)
@@ -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