def extract(self, default=NO_VALUE): value = self.request.get(self.name, default) converter = IDataConverter(self) try: c_value = converter.toFieldValue(value) except: return value unit_name = self.request.get(self.name + '-unit') if unit_name and unit_name != self.base_unit: try: unit = getattr(ureg, unit_name) base_unit = getattr(ureg, self.base_unit) except UndefinedUnitError: c_value = self.field.get(self.context) # Do the conversion try: c_value = c_value * unit except TypeError: return value else: c_value = c_value.to(base_unit).magnitude if not self.ignoreContext: self._set_unit_annotation(unit_name) value = converter.toWidgetValue(c_value) return value
def widgets(self, mode=DISPLAY_MODE): """Return the widgets for the databox # https://stackoverflow.com/questions/8476781/how-to-access-z3c-form-widget-settings-from-browser-view """ widgets = [] fields = api.get_fields(self.context) for name, field in fields.items(): widget = getMultiAdapter((field, self.request), IFieldWidget) widget.mode = mode widget.context = self.context converter = IDataConverter(widget) value = field.get(self.context) widget.value = converter.toWidgetValue(value) widget.update() widgets.append(widget) return widgets
def updateWidgets(self, *args, **kwargs): super(AddWebactionForm, self).updateWidgets(*args, **kwargs) saving = 'form.buttons.save' in self.request # Prefill other widgets only upon initial rendering of the form, # not when trying to save - this is so we don't override # actual user provided inputs with missing values if saving: return # Prefill form widgets with missing values for widget in self.widgets.values(): missing_value = widget.field.missing_value if not missing_value: continue converter = IDataConverter(widget) widget.value = converter.toWidgetValue(missing_value)
def updateWidgets(self, *args, **kwargs): super(AddWebactionForm, self).updateWidgets(*args, **kwargs) saving = 'form.buttons.save' in self.request # Prefill other widgets only upon initial rendering of the form, # not when trying to save - this is so we don't override # actual user provided inputs with missing values if saving: return # Prefill form widgets with missing values for widget in self.widgets.values(): missing_value = widget.field.missing_value if not missing_value: continue converter = IDataConverter(widget) widget.value = converter.toWidgetValue(missing_value)
def updateWidgets(self, *args, **kwargs): super(EditKeyForm, self).updateWidgets(*args, **kwargs) saving = 'form.buttons.save' in self.request # Prefill form widgets with persisted values from DB key = self.get_key() for widget in self.widgets.values(): # Always prefill readonly widgets. # # Prefill other widgets only upon initial rendering of the form, # not when trying to save - this is so we don't override # actual user provided inputs with persisted values from the # DB when rendering the form in the case of validation errors. if widget.field.readonly or not saving: name = widget.field.getName() value = key[name] converter = IDataConverter(widget) widget.value = converter.toWidgetValue(value)
def widget_value(self): """Return the converted value.""" self.unit = self.request.get(self.name + '-unit', self.preferred_unit) if not self.value: return try: base_unit = getattr(ureg, self.base_unit) except UndefinedUnitError: value = self.value else: # Do the conversion converter = IDataConverter(self) try: value = converter.toFieldValue(self.value) except: return self.value system = None if not self.ignoreContext: system = self._get_unit_annotation() else: if self.unit in interfaces.METRICS: system = interfaces.SYSTEM_METRIC elif self.unit in interfaces.IMPERIALS: system = interfaces.SYSTEM_IMPERIAL if not system in self.unit_systems: system = self.preferred_system self.unit = utils.get_best_unit( value, system, self.unit_dimension, level_min=self.level_min, level_max=self.level_max, )[0] unit = getattr(ureg, self.unit) value = value * base_unit value = value.to(unit).magnitude if isinstance(value, Decimal): value = value.quantize(interfaces.TWOPLACES) value = converter.toWidgetValue(value) return value
def updateWidgets(self, *args, **kwargs): super(EditWebactionForm, self).updateWidgets(*args, **kwargs) saving = 'form.buttons.save' in self.request # Prefill form widgets with persisted values from DB or # with missing value if needed webaction = self.get_webaction() for widget in self.widgets.values(): # Always prefill readonly widgets. # # Prefill other widgets only upon initial rendering of the form, # not when trying to save - this is so we don't override # actual user provided inputs with persisted values from the # DB when rendering the form in the case of validation errors. if widget.field.readonly or not saving: name = widget.field.getName() value = webaction.get(name, widget.field.missing_value) if value is None: continue converter = IDataConverter(widget) widget.value = converter.toWidgetValue(value)