示例#1
0
def _process_widgets(form, widgets, modes, newFields):
    """Update the fields list with widgets
    """

    for fieldName in newFields:
        fieldInstance = newFields[fieldName]
        baseName = _bn(fieldInstance)

        widgetName = widgets.get(baseName, None)
        widgetMode = modes.get(baseName, fieldInstance.mode) \
            or form.mode \
            or INPUT_MODE

        widgetFactory = None
        if widgetName is not None:
            if isinstance(widgetName, six.string_types):
                widgetFactory = resolveDottedName(widgetName)
            elif IFieldWidget.implementedBy(widgetName):
                widgetFactory = widgetName
            elif IParameterizedWidget.providedBy(widgetName):
                widgetFactory = widgetName

            if widgetFactory is not None:
                fieldInstance.widgetFactory[widgetMode] = widgetFactory

        if baseName in modes:
            newFields[fieldName].mode = widgetMode
示例#2
0
def _process_widgets(form, widgets, modes, newFields):
    """Update the fields list with widgets
    """

    for fieldName in newFields:
        fieldInstance = newFields[fieldName]
        baseName = _bn(fieldInstance)

        widgetName = widgets.get(baseName, None)
        widgetMode = modes.get(baseName, fieldInstance.mode) \
            or form.mode \
            or INPUT_MODE

        widgetFactory = None
        if widgetName is not None:
            if isinstance(widgetName, six.string_types):
                widgetFactory = resolveDottedName(widgetName)
            elif IFieldWidget.implementedBy(widgetName):
                widgetFactory = widgetName
            elif IParameterizedWidget.providedBy(widgetName):
                widgetFactory = widgetName

            if widgetFactory is not None:
                fieldInstance.widgetFactory[widgetMode] = widgetFactory

        if baseName in modes:
            newFields[fieldName].mode = widgetMode
示例#3
0
 def __call__(self, field, request):
     __traceback_info__ = (
         '{0}, processing:\n'
         '- field "{1}"\n'
         '- widget: {2}\n'
         '- params: {3}\n'.format(
             self.__class__.__name__,
             field.__name__,
             repr(self.widget_factory),
             self.params
         )
     )
     if isinstance(self.widget_factory, six.string_types):
         __traceback_info__ += '- resolving dotted name\n'
         self.widget_factory = resolveDottedName(self.widget_factory)
     if self.widget_factory is None:
         # use default widget factory for this field type
         __traceback_info__ += '- using default widget factory\n'
         widget = getMultiAdapter((field, request), IFieldWidget)
     elif IWidget.implementedBy(self.widget_factory):
         __traceback_info__ += '- calling factory, then wrapping with ' \
                               'FieldWidget\n'
         widget = FieldWidget(field, self.widget_factory(request))
     elif IFieldWidget.implementedBy(self.widget_factory):
         __traceback_info__ += '- calling factory\n'
         widget = self.widget_factory(field, request)
     for k, v in self.params.items():
         setattr(widget, k, v)
     return widget
示例#4
0
 def __init__(self, widget_factory=None, **params):
     if widget_factory is not None:
         if not IFieldWidget.implementedBy(widget_factory) \
                 and not IWidget.implementedBy(widget_factory) \
                 and not isinstance(widget_factory, six.string_types):
             raise TypeError('widget_factory must be an IFieldWidget '
                             'or an IWidget')
     self.widget_factory = widget_factory
     self.params = params
示例#5
0
 def __init__(self, widget_factory=None, **params):
     if widget_factory is not None:
         if not IFieldWidget.implementedBy(widget_factory) \
                 and not IWidget.implementedBy(widget_factory) \
                 and not isinstance(widget_factory, basestring):
             raise TypeError('widget_factory must be an IFieldWidget '
                             'or an IWidget')
     self.widget_factory = widget_factory
     self.params = params
示例#6
0
    def __call__(self, field, request):
        if isinstance(self.widget_factory, basestring):
            self.widget_factory = resolveDottedName(self.widget_factory)

        if self.widget_factory is None:
            # use default widget factory for this field type
            widget = getMultiAdapter((field, request), IFieldWidget)
        elif IWidget.implementedBy(self.widget_factory):
            widget = FieldWidget(field, self.widget_factory(request))
        elif IFieldWidget.implementedBy(self.widget_factory):
            widget = self.widget_factory(field, request)
        for k, v in self.params.items():
            setattr(widget, k, v)
        return widget
示例#7
0
    def __call__(self, field, request):
        if isinstance(self.widget_factory, basestring):
            self.widget_factory = resolveDottedName(self.widget_factory)

        if self.widget_factory is None:
            # use default widget factory for this field type
            widget = getMultiAdapter((field, request), IFieldWidget)
        elif IWidget.implementedBy(self.widget_factory):
            widget = FieldWidget(field, self.widget_factory(request))
        elif IFieldWidget.implementedBy(self.widget_factory):
            widget = self.widget_factory(field, request)
        for k, v in self.params.items():
            setattr(widget, k, v)
        return widget
示例#8
0
    def factory(self, field_name=None, widget_class=None, **kw):
        widgets = {}

        if field_name is None:  # Usage 3           
            for field_name, widget in kw.items():
                if not isinstance(widget, basestring):
                    widget = "%s.%s" % (widget.__module__, widget.__name__)
                widgets[field_name] = widget
        else:
            if widget_class is not None \
            and not IFieldWidget.implementedBy(widget_class) \
            and not IWidget.implementedBy(widget_class):
                raise TypeError('widget_class must implement IWidget or IFieldWidget')
            widgets[field_name] = ParameterizedWidget(widget_class, **kw)

        return widgets
示例#9
0
    def factory(self, field_name=None, widget_class=None, **kw):
        widgets = {}

        if field_name is None:  # Usage 3
            for field_name, widget in kw.items():
                if not isinstance(widget, basestring):
                    widget = "%s.%s" % (widget.__module__, widget.__name__)
                widgets[field_name] = widget
        else:
            if widget_class is not None \
               and not IFieldWidget.implementedBy(widget_class) \
               and not IWidget.implementedBy(widget_class):
                raise TypeError(
                    'widget_class must implement IWidget or IFieldWidget')
            widgets[field_name] = ParameterizedWidget(widget_class, **kw)

        return widgets
示例#10
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)
示例#11
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)
示例#12
0
 def __call__(self, field, request):
     __traceback_info__ = ('{0}, processing:\n'
                           '- field "{1}"\n'
                           '- widget: {2}\n'
                           '- params: {3}\n'.format(
                               self.__class__.__name__, field.__name__,
                               repr(self.widget_factory), self.params))
     if isinstance(self.widget_factory, six.string_types):
         __traceback_info__ += '- resolving dotted name\n'
         self.widget_factory = resolveDottedName(self.widget_factory)
     if self.widget_factory is None:
         # use default widget factory for this field type
         __traceback_info__ += '- using default widget factory\n'
         widget = getMultiAdapter((field, request), IFieldWidget)
     elif IWidget.implementedBy(self.widget_factory):
         __traceback_info__ += '- calling factory, then wrapping with ' \
                               'FieldWidget\n'
         widget = FieldWidget(field, self.widget_factory(request))
     elif IFieldWidget.implementedBy(self.widget_factory):
         __traceback_info__ += '- calling factory\n'
         widget = self.widget_factory(field, request)
     for k, v in self.params.items():
         setattr(widget, k, v)
     return widget
示例#13
0
文件: tests.py 项目: kroman0/products
 def testCaptchaWidgetInterface(self):
     self.assertEqual(IFieldWidget.implementedBy(CaptchaWidgetFactory), True)