Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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)