def save(self, validate=False): """ Save the current values in all the widgets back to the persistent data storage. :param validate: Whether to validate the data before saving. Calling this while setting the `data` field (e.g. in a widget callback) will have no effect. When validating data, it can throw an Exception for any """ # Don't allow this function to be called if we are already updating the # data for the form. if self._in_call: return # We're clear - pass on to all layouts/widgets. invalid = [] for layout in self._layouts: try: layout.save(validate=validate) except InvalidFields as exc: invalid.extend(exc.fields) # Check for any bad data and raise exception if needed. if len(invalid) > 0: raise InvalidFields(invalid)
def _on_close(self, cancelled): try: if not cancelled: self._parent.value = self._parent.value.replace( day=self._days.value, month=self._months.value, year=self._years.value) except ValueError: raise InvalidFields([self._days])
def save(self, validate): """ Save the current values in all the widgets back to the persistent data storage. :param validate: whether to validate the saved data or not. :raises: InvalidFields if any invalid data is found. """ invalid = [] for column in self._columns: for widget in column: if widget.is_valid or not validate: if widget.name is not None: # This relies on the fact that we are passed the actual # dict and so can edit it directly. In this case, that # is all we want - no need to update the widgets. self._frame._data[widget.name] = widget.value else: invalid.append(widget.name) if len(invalid) > 0: raise InvalidFields(invalid)