def checkToken(self): session = getSession() if session is None: raise CSRFTokenGenerationError("No session.") cookietoken = session.get('__csrftoken__') if cookietoken is None: raise InvalidCSRFToken(_('Invalid CSRF token')) if cookietoken != self.request.form.get('form.field.__csrftoken__', None): raise InvalidCSRFToken(_('Invalid CSRF token'))
def extractData(self, fields): # XXX to review this cached = self._extracted.get(fields) if cached is not None: return cached data = FieldsValues(self, fields) errors = Errors() self._extracted[fields] = (data, errors) for field in fields: if not field.available(self): continue # Widget extraction and validation extractor = self.widgetFactory.extractor(field) if extractor is not None: value, error = extractor.extract() if error is None: error = field.validate(value, self) if error is not None: if not IError.providedBy(error): error = Error(error, extractor.identifier) errors.append(error) data[field.identifier] = value # Generic form validation errors.extend(self.validateData(fields, data)) if len(errors): # Add a form level error if not already present if self.prefix not in errors: errors.append( Error(_(u"There were errors.", default=u"There were errors."), self.prefix)) self.errors = errors return (data, errors)
def process(self, form, request): assert interfaces.ITableFormCanvas.providedBy(form) one_selected = False ready = False for action in self: extractor = getMultiAdapter( (action, form, request), IWidgetExtractor) value, error = extractor.extract() if value is not NO_VALUE: if not verify_post(action, form, request): return action, FAILURE if not ready: form.updateLines(mark_selected=True) ready = True # first validate got_error = False for line in form.lines: if not line.selected: continue one_selected = True try: got_error |= not action.validate(line) except ActionError, e: got_error = True line.errors.append( Error(unicode(e), identifier=line.prefix)) if line.errors: merge_errors(line, form) if not one_selected: form.errors.append( Error(_(u"You didn't select any item!"), form.prefix)) got_error = True if got_error: return action, FAILURE # then compute for line in form.lines: if not line.selected: continue try: status = action(line) got_error |= status != SUCCESS except ActionError, e: got_error = True line.errors.append( Error(unicode(e), identifier=line.prefix)) if line.errors: merge_errors(line, form) return action, SUCCESS if not got_error else FAILURE
def formErrors(self): error = self.errors.get(self.prefix, None) if self.errors and error is None: # If the form has errors but no form specific ones # we have to add it. This could be overridable. error = Error(_(u"There were errors."), self.prefix) if error is not None: # If there's a form error, we need to make sure it's iterable. # Doing this, we can handle both Error and Errors. # Some forms can trigger more than one error, on failure. if ICollection.providedBy(error): return error else: return [error] return []
def extract(self): value, error = super(SchemaWidgetExtractor, self).extract() if self.empty_is_None and hasattr(value, '__len__') and not len(value): value = None if error is not None: return value, error if value is not NO_VALUE: try: value = self.component.fromUnicode(value) except schema_interfaces.ValidationError as e: return None, e.doc() except Invalid as e: return None, e.args[0] except ValueError as e: return None, _(u"Invalid value.") return value, None
def extract(self): value, errors = super(MultiChoiceWidgetExtractor, self).extract() if errors is None: is_present = self.request.form.get( self.identifier + '.present', NO_VALUE) if is_present is NO_VALUE: # Not in the request return (NO_VALUE, None) if value is NO_VALUE: # Nothing selected return (self.component.collectionType(), None) choices = self.source.getChoices(self.form.context) try: if not isinstance(value, list): value = [value] value = self.component.collectionType( [choices.getTermByToken(t).value for t in value]) except LookupError: return (None, _(u'The selected value is not available.')) return (value, errors)
def validate(self, value, context=None): if self.required and self.isEmpty(value): return _(u"Missing required value.", default=u"Missing required value.") return None
def valueToUnicode(self, value): if bool(value): return _(u'Yes') return _(u'No')