def computeValue(self): # First lookup the request ignoreRequest = getValue(self.component, 'ignoreRequest', self.form) if not ignoreRequest: extractor = self.form.widgetFactory.extractor(self.component) if extractor is not None: value = extractor.extractRaw() if value: return self.prepareRequestValue(value, extractor) # After, the context ignoreContent = getValue(self.component, 'ignoreContent', self.form) if not ignoreContent: data = self.form.getContentData() try: value = data.get(self.component.identifier) # XXX: Need review if value is None: value = NO_VALUE return self.prepareContentValue(value) except KeyError: # No value on the content for field, continue. pass # Take any default value value = self.component.getDefaultValue(self.form) return self.prepareContentValue(value)
def verify_post(action, form, request): isPostOnly = getValue(action, 'postOnly', form) if isPostOnly and request.method != 'POST': form.errors.append( Error('This form was not submitted properly.', form.prefix)) return False else: return True
def widget(self, field): """Create a widget for the given field. """ if not field.available(self.form): return None mode = str(getValue(field, 'mode', self.form)) return getMultiAdapter( (field, self.form, self.request), interfaces.IWidget, name=mode)
def extractor(self, field): """Create a widget extractor for the given field. """ mode = getValue(field, 'mode', self.form) # The field mode should be extractable or we skip it. if (IModeMarker.providedBy(mode) and mode.extractable is False): return None extractor = queryMultiAdapter( (field, self.form, self.request), interfaces.IWidgetExtractor, name=str(mode)) if extractor is not None: return extractor # Default to the default extractor return getMultiAdapter( (field, self.form, self.request), interfaces.IWidgetExtractor)
def process(self, form, request): for action in self: extractor = interfaces.IWidgetExtractor(action, form, request) value, error = extractor.extract() if value is not markers.NO_VALUE: isPostOnly = markers.getValue(action, 'postOnly', form) if isPostOnly and request.method != 'POST': form.errors.append( errors.Error('This form was not submitted properly', form.prefix)) return None, markers.FAILURE try: if action.validate(form): return action, action(form) except interfaces.ActionError as error: form.errors.append(errors.Error( error.args[0], form.prefix)) return action, markers.FAILURE return None, markers.NOTHING_DONE