示例#1
0
    def write(self, fieldNode, schema, field):
        name = field.__name__

        widget = schema.queryTaggedValue(WIDGETS_KEY, {}).get(name, None)
        mode = [
            (i, v) for i, n, v in schema.queryTaggedValue(MODES_KEY, [])
            if n == name
        ]
        omitted = [
            (i, v) for i, n, v in schema.queryTaggedValue(OMITTED_KEY, [])
            if n == name
        ]
        order = [
            (d, v) for n, d, v in schema.queryTaggedValue(ORDER_KEY, [])
            if n == name
        ]

        if widget is not None:
            if not isinstance(widget, ParameterizedWidget):
                widget = ParameterizedWidget(widget)

            if widget.widget_factory or widget.params:
                widgetNode = etree.Element(ns('widget', self.namespace))
                widgetName = widget.getWidgetFactoryName()
                if widgetName is not None:
                    widgetNode.set('type', widgetName)

                widgetHandler = widget.getExportImportHandler(field)
                widgetHandler.write(widgetNode, widget.params)
                fieldNode.append(widgetNode)

        mode_values = []
        for interface, value in mode:
            if interface is not Interface:
                value = "%s:%s" % (interface.__identifier__, value)
            mode_values.append(value)
        if mode_values:
            fieldNode.set(ns('mode', self.namespace), " ".join(mode_values))

        omitted_values = []
        for interface, value in omitted:
            if interface is not Interface:
                value = "%s:%s" % (interface.__identifier__, value)
            omitted_values.append(value)
        if omitted_values:
            fieldNode.set(
                ns('omitted', self.namespace),
                " ".join(omitted_values)
            )

        for direction, relative_to in order:
            if direction == 'before':
                fieldNode.set(ns('before', self.namespace), relative_to)
            elif direction == 'after':
                fieldNode.set(ns('after', self.namespace), relative_to)
示例#2
0
    def read(self, fieldNode, schema, field):
        name = field.__name__

        widgetAttr = fieldNode.get(ns('widget', self.namespace))
        mode = fieldNode.get(ns('mode', self.namespace))
        omitted = fieldNode.get(ns('omitted', self.namespace))
        before = fieldNode.get(ns('before', self.namespace))
        after = fieldNode.get(ns('after', self.namespace))
        validator = fieldNode.get(ns('validator', self.namespace))

        if mode:
            self._add_interface_values(schema, MODES_KEY, name, mode)
        if omitted:
            self._add_interface_values(schema, OMITTED_KEY, name, omitted)
        if before:
            self._add_order(schema, name, 'before', before)
        if after:
            self._add_order(schema, name, 'after', after)
        if validator:
            self._add_validator(field, validator)

        widgetNode = fieldNode.find(ns('widget', self.namespace))
        widget = None
        if widgetNode is not None:  # form:widget element
            widgetFactory = widgetNode.get('type')
            if widgetFactory is not None:
                # resolve immediately so we don't have to each time
                # form is rendered
                widgetFactory = resolveDottedName(widgetFactory)
            widget = ParameterizedWidget(widgetFactory)
            widgetHandler = widget.getExportImportHandler(field)
            widgetHandler.read(widgetNode, widget.params)
        elif widgetAttr is not None:  # BBB for old form:widget attributes
            obj = resolveDottedName(widgetAttr)
            if not IFieldWidget.implementedBy(obj):
                raise ValueError(
                    'IFieldWidget not implemented by {0}'.format(obj)
                )
            widget = widgetAttr
        if widget is not None:
            self._add(schema, WIDGETS_KEY, name, widget)
示例#3
0
    def read(self, fieldNode, schema, field):
        name = field.__name__

        widgetAttr = fieldNode.get(ns('widget', self.namespace))
        mode = fieldNode.get(ns('mode', self.namespace))
        omitted = fieldNode.get(ns('omitted', self.namespace))
        before = fieldNode.get(ns('before', self.namespace))
        after = fieldNode.get(ns('after', self.namespace))
        validator = fieldNode.get(ns('validator', self.namespace))

        if mode:
            self._add_interface_values(schema, MODES_KEY, name, mode)
        if omitted:
            self._add_interface_values(schema, OMITTED_KEY, name, omitted)
        if before:
            self._add_order(schema, name, 'before', before)
        if after:
            self._add_order(schema, name, 'after', after)
        if validator:
            self._add_validator(field, validator)

        widgetNode = fieldNode.find(ns('widget', self.namespace))
        widget = None
        if widgetNode is not None:  # form:widget element
            widgetFactory = widgetNode.get('type')
            if widgetFactory is not None:
                # resolve immediately so we don't have to each time
                # form is rendered
                widgetFactory = resolveDottedName(widgetFactory)
            widget = ParameterizedWidget(widgetFactory)
            widgetHandler = widget.getExportImportHandler(field)
            widgetHandler.read(widgetNode, widget.params)
        elif widgetAttr is not None:  # BBB for old form:widget attributes
            obj = resolveDottedName(widgetAttr)
            if not IFieldWidget.implementedBy(obj):
                raise ValueError(
                    'IFieldWidget not implemented by {0}'.format(obj))
            widget = widgetAttr
        if widget is not None:
            self._add(schema, WIDGETS_KEY, name, widget)