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)
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)
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)